diff --git a/api-reference/google/google-flights/flights-booking-options.mdx b/api-reference/google/google-flights/flights-booking-options.mdx new file mode 100644 index 0000000..41bf4bd --- /dev/null +++ b/api-reference/google/google-flights/flights-booking-options.mdx @@ -0,0 +1,5 @@ +--- +title: "Google Flights Booking Options" +description: "Retrieve the airline and OTA booking providers (with prices) for a selected flight, using the selection_token from a flights search offer." +openapi: "GET /v1/google/flights/booking_options" +--- diff --git a/docs.json b/docs.json index 7a69a70..cb1c1f2 100644 --- a/docs.json +++ b/docs.json @@ -203,7 +203,8 @@ { "group": "Flights", "pages": [ - "api-reference/google/google-flights/flights-search" + "api-reference/google/google-flights/flights-search", + "api-reference/google/google-flights/flights-booking-options" ] }, { diff --git a/openapi-google.json b/openapi-google.json index fe30341..2b61a57 100644 --- a/openapi-google.json +++ b/openapi-google.json @@ -1 +1 @@ -{"openapi":"3.1.0","info":{"title":"ScrapeBadger Google Scraper","description":"Dedicated API for scraping Google products (SERP, Maps, News, Hotels, Trends, Jobs, Shopping, Patents, Scholar, Autocomplete, Images, Videos, Finance, AI Mode, Lens, Products).","version":"1.0.0"},"paths":{"/api/v1/search":{"get":{"tags":["Google Search"],"summary":"Google web search","description":"Search Google and get structured results.\n\nTwo response modes:\n\n- **full** (default, 2 credits): complete SERP with organic, ads,\n knowledge graph, People Also Ask, AI Overview, local pack, news,\n related searches, inline videos, etc. ~1.5-2s cold, ~1.5ms warm.\n- **fast** (1 credit, ~40% faster): lite endpoint (`gbv=1`) returning\n only organic results + related searches. Rich blocks (KG, local,\n AI Overview, news) are **not** returned \u2014 request ``mode=full`` for\n those. Auto-upgrades to full if ``ai_overview=true`` is set.\n\nFirst request in either mode triggers a browser warmup (~15s) to\nsolve SearchGuard. Subsequent requests reuse the sticky session.","operationId":"google_search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (supports Google operators like site:, inurl:, intitle:)","title":"Q"},"description":"Search query (supports Google operators like site:, inurl:, intitle:)"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code (e.g. us, gb, de, fr)","default":"us","title":"Gl"},"description":"Country code (e.g. us, gb, de, fr)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code (e.g. en, es, fr)","default":"en","title":"Hl"},"description":"Language code (e.g. en, es, fr)"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":10,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset (0, 10, 20...)","default":0,"title":"Start"},"description":"Pagination offset (0, 10, 20...)"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain (e.g. google.com, google.co.uk)","default":"google.com","title":"Domain"},"description":"Google domain (e.g. google.com, google.co.uk)"},{"name":"device","in":"query","required":false,"schema":{"type":"string","description":"desktop or mobile","default":"desktop","title":"Device"},"description":"desktop or mobile"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City-level geo-targeting (e.g. 'New York, USA')","title":"Location"},"description":"City-level geo-targeting (e.g. 'New York, USA')"},{"name":"lr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language restrict (e.g. lang_en)","title":"Lr"},"description":"Language restrict (e.g. lang_en)"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time-based search filter (e.g. qdr:d for past 24h)","title":"Tbs"},"description":"Time-based search filter (e.g. qdr:d for past 24h)"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search (active/off)","default":"off","title":"Safe"},"description":"Safe search (active/off)"},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Encoded location parameter (UULE)","title":"Uule"},"description":"Encoded location parameter (UULE)"},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1,"minimum":0},{"type":"null"}],"description":"Include omitted results (0=show all, 1=filter)","title":"Filter"},"description":"Include omitted results (0=show all, 1=filter)"},{"name":"nfpr","in":"query","required":false,"schema":{"type":"integer","maximum":1,"minimum":0,"description":"Disable auto-correction (1=exact match)","default":0,"title":"Nfpr"},"description":"Disable auto-correction (1=exact match)"},{"name":"cr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country restrict (e.g. countryUS|countryGB)","title":"Cr"},"description":"Country restrict (e.g. countryUS|countryGB)"},{"name":"ludocid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google My Business CID (place ID)","title":"Ludocid"},"description":"Google My Business CID (place ID)"},{"name":"lsig","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Knowledge Graph map view ID","title":"Lsig"},"description":"Knowledge Graph map view ID"},{"name":"kgmid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Knowledge Graph entity ID","title":"Kgmid"},"description":"Knowledge Graph entity ID"},{"name":"si","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cached search parameters","title":"Si"},"description":"Cached search parameters"},{"name":"ibp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Layout control (e.g. gwp;0,7)","title":"Ibp"},"description":"Layout control (e.g. gwp;0,7)"},{"name":"uds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google filter string","title":"Uds"},"description":"Google filter string"},{"name":"ai_overview","in":"query","required":false,"schema":{"type":"boolean","description":"When true, chase Google's deferred AI Overview page_token with a follow-up fetch and merge the result into ai_overview. Adds ~1s and 1 credit when the SERP actually defers the overview.","default":false,"title":"Ai Overview"},"description":"When true, chase Google's deferred AI Overview page_token with a follow-up fetch and merge the result into ai_overview. Adds ~1s and 1 credit when the SERP actually defers the overview."},{"name":"mode","in":"query","required":false,"schema":{"enum":["full","fast"],"type":"string","description":"Response mode. **full** (default): complete SERP with all blocks (organic, ads, knowledge graph, local pack, AI overview, news, related questions, etc). **fast**: lite endpoint via `gbv=1` that returns ONLY organic results + related searches in ~0.6-1s cold (vs 1.5-2s full). Use when you only need organic results and can skip rich features.","default":"full","title":"Mode"},"description":"Response mode. **full** (default): complete SERP with all blocks (organic, ads, knowledge graph, local pack, AI overview, news, related questions, etc). **fast**: lite endpoint via `gbv=1` that returns ONLY organic results + related searches in ~0.6-1s cold (vs 1.5-2s full). Use when you only need organic results and can skip rich features."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/search":{"get":{"tags":["Google Maps"],"summary":"Search Google Maps places","description":"Search Google Maps for places.\n\nReturns place names, ratings, addresses, phone numbers, coordinates,\nhours, and service options.","operationId":"maps_search_api_v1_maps_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (e.g. 'pizza in New York')","title":"Q"},"description":"Search query (e.g. 'pizza in New York')"},{"name":"ll","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPS coords @lat,lng,zoom","title":"Ll"},"description":"GPS coords @lat,lng,zoom"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset (increments of 20)","default":0,"title":"Start"},"description":"Pagination offset (increments of 20)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/place":{"get":{"tags":["Google Maps"],"summary":"Get place details","description":"Get detailed place information from Google Maps via the protobuf API.\n\nRequires either ``place_id`` (e.g. ``ChIJN1t_tDeuEmsRUsoyG83frY4``) or\n``data_id`` (e.g. ``0x89c259617ae5b78b:0xe919ce17bb09920e``). The\ndata_id is available in the ``data_id`` field of ``/maps/search``\nresults. Returns name, address, rating, review count, phone, website,\nGPS coordinates, categories, and up to 20 photo URLs.","operationId":"maps_place_api_v1_maps_place_get","parameters":[{"name":"place_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google place ID (ChIJ...)","title":"Place Id"},"description":"Google place ID (ChIJ...)"},{"name":"data_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPlaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/reviews":{"get":{"tags":["Google Maps"],"summary":"Get place reviews","description":"Get reviews for a Google Maps place via the protobuf API.\n\nThe ``data_id`` is the hex pair from ``/maps/search`` results\n(e.g. ``0x89c259617ae5b78b:0xe919ce17bb09920e``). Supports both\noffset-based and token-based pagination.","operationId":"maps_reviews_api_v1_maps_reviews_get","parameters":[{"name":"data_id","in":"query","required":true,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["qualityScore","newestFirst","ratingHigh","ratingLow"],"type":"string","description":"Sort order","default":"qualityScore","title":"Sort By"},"description":"Sort order"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token from previous response","title":"Next Page Token"},"description":"Pagination token from previous response"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Review offset (0-based)","default":0,"title":"Offset"},"description":"Review offset (0-based)"},{"name":"results","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Reviews per page","default":10,"title":"Results"},"description":"Reviews per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsReviewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/photos":{"get":{"tags":["Google Maps"],"summary":"Get place photos","description":"Get photos for a Google Maps place.\n\nPhotos are extracted from the ``/maps/preview/place`` response\n(field ``data[6][37]``). Returns up to 20 photo URLs with\nconfigurable width/height via the Google CDN pattern\n``lh3.googleusercontent.com/gps-cs-s/{id}=w{w}-h{h}-k-no``.","operationId":"maps_photos_api_v1_maps_photos_get","parameters":[{"name":"data_id","in":"query","required":true,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPhotosResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/posts":{"get":{"tags":["Google Maps"],"summary":"Get business posts","description":"Get Google Business posts / updates for a Maps place.\n\n**Approach**: searches the Google SERP for the business by ``ludocid``\n(derived from the ``data_id``'s low hex part) and parses the knowledge\npanel's ``data-attrid=\"kc:/local:any posts\"`` and\n``kc:/local:merchant_description`` sections. This is the same data\nsurface and other SERP-based scrapers use.\n\nThe Maps protobuf endpoints (``localposts``, ``batchexecute Qt4aBe``)\nreturn empty for virtually all businesses even when they have posts\nin the knowledge panel \u2014 Google deprecated those endpoints in favor\nof the SERP knowledge panel.\n\nRequires ``data_id`` (``0x...:0x...``), available from ``/maps/search``\nresults.","operationId":"maps_posts_api_v1_maps_posts_get","parameters":[{"name":"data_id","in":"query","required":false,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...) \u2014 from /maps/search results","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...) \u2014 from /maps/search results"},{"name":"place_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google place ID (ChIJ...)","title":"Place Id"},"description":"Google place ID (ChIJ...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/search":{"get":{"tags":["Google News"],"summary":"Search Google News","description":"Search Google News articles via RSS feed.","operationId":"search_news_api_v1_news_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum articles","default":10,"title":"Max Results"},"description":"Maximum articles"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/topics":{"get":{"tags":["Google News"],"summary":"News by topic","description":"Get Google News articles by topic category via RSS.","operationId":"news_by_topic_api_v1_news_topics_get","parameters":[{"name":"topic","in":"query","required":true,"schema":{"enum":["WORLD","BUSINESS","TECHNOLOGY","ENTERTAINMENT","SPORTS","SCIENCE","HEALTH"],"type":"string","description":"Topic name","title":"Topic"},"description":"Topic name"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsTopicsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/trending":{"get":{"tags":["Google News"],"summary":"Trending news","description":"Get trending Google News stories via RSS.","operationId":"trending_news_api_v1_news_trending_get","parameters":[{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hotels/search":{"get":{"tags":["Google Hotels"],"summary":"Search Google Hotels","description":"Search Google Hotels with dates and pricing.\n\nUses browser rendering to access Google Travel Hotels.","operationId":"hotels_search_api_v1_hotels_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Location or hotel name","title":"Q"},"description":"Location or hotel name"},{"name":"check_in","in":"query","required":true,"schema":{"type":"string","description":"Check-in date (YYYY-MM-DD)","title":"Check In"},"description":"Check-in date (YYYY-MM-DD)"},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","description":"Check-out date (YYYY-MM-DD)","title":"Check Out"},"description":"Check-out date (YYYY-MM-DD)"},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Number of adults","default":2,"title":"Adults"},"description":"Number of adults"},{"name":"children","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":0,"description":"Number of children","default":0,"title":"Children"},"description":"Number of children"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency code","default":"USD","title":"Currency"},"description":"Currency code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: price_low, rating_high, most_reviewed","title":"Sort By"},"description":"Sort: price_low, rating_high, most_reviewed"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum price","title":"Min Price"},"description":"Minimum price"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum price","title":"Max Price"},"description":"Maximum price"},{"name":"hotel_class","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":5,"minimum":2},{"type":"null"}],"description":"Star rating","title":"Hotel Class"},"description":"Star rating"},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token","title":"Next Page Token"},"description":"Pagination token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotelsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hotels/details":{"get":{"tags":["Google Hotels"],"summary":"Hotel details","description":"Get detailed hotel information and pricing.","operationId":"hotel_details_api_v1_hotels_details_get","parameters":[{"name":"property_token","in":"query","required":true,"schema":{"type":"string","description":"Property token from search results","title":"Property Token"},"description":"Property token from search results"},{"name":"check_in","in":"query","required":true,"schema":{"type":"string","description":"Check-in date (YYYY-MM-DD)","title":"Check In"},"description":"Check-in date (YYYY-MM-DD)"},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","description":"Check-out date (YYYY-MM-DD)","title":"Check Out"},"description":"Check-out date (YYYY-MM-DD)"},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Adults"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","default":"USD","title":"Currency"}},{"name":"gl","in":"query","required":false,"schema":{"type":"string","default":"us","title":"Gl"}},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Hl"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotelDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/interest":{"get":{"tags":["Google Trends"],"summary":"Interest over time","description":"Get interest over time for search terms via Google Trends internal API.","operationId":"trends_interest_api_v1_trends_interest_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term(s), comma-separated (max 5)","title":"Q"},"description":"Search term(s), comma-separated (max 5)"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Geographic location (e.g. US, GB)","default":"","title":"Geo"},"description":"Geographic location (e.g. US, GB)"},{"name":"date","in":"query","required":false,"schema":{"type":"string","description":"Time range (e.g. 'now 1-H', 'today 12-m', 'all', or 'YYYY-MM-DD YYYY-MM-DD')","default":"today 12-m","title":"Date"},"description":"Time range (e.g. 'now 1-H', 'today 12-m', 'all', or 'YYYY-MM-DD YYYY-MM-DD')"},{"name":"category","in":"query","required":false,"schema":{"type":"integer","description":"Category filter (0 = all)","default":0,"title":"Category"},"description":"Category filter (0 = all)"},{"name":"gprop","in":"query","required":false,"schema":{"type":"string","description":"Property: web, images, news, froogle, youtube","default":"","title":"Gprop"},"description":"Property: web, images, news, froogle, youtube"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsInterestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/regions":{"get":{"tags":["Google Trends"],"summary":"Interest by region","description":"Get interest by region for a search term.\n\nGoogle's widget has a resolution hierarchy \u2014 you can't ask for\ncountry-level data inside a specific country. Passing\n``resolution=auto`` (the default) uses whatever resolution the\nwidget itself returned, which is always valid.","operationId":"trends_regions_api_v1_trends_regions_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term","title":"Q"},"description":"Search term"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Geographic location","default":"","title":"Geo"},"description":"Geographic location"},{"name":"date","in":"query","required":false,"schema":{"type":"string","default":"today 12-m","title":"Date"}},{"name":"resolution","in":"query","required":false,"schema":{"enum":["COUNTRY","REGION","DMA","CITY","auto"],"type":"string","description":"Region granularity. `auto` (default) uses Google's widget default, which is `COUNTRY` for worldwide queries and `REGION` (state/province) for single-country queries. Overriding to `COUNTRY` when `geo` is set returns HTTP 400 from Google \u2014 use `REGION`, `DMA`, or `CITY` in that case.","default":"auto","title":"Resolution"},"description":"Region granularity. `auto` (default) uses Google's widget default, which is `COUNTRY` for worldwide queries and `REGION` (state/province) for single-country queries. Overriding to `COUNTRY` when `geo` is set returns HTTP 400 from Google \u2014 use `REGION`, `DMA`, or `CITY` in that case."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsRegionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/related":{"get":{"tags":["Google Trends"],"summary":"Related topics & queries","description":"Get related topics and queries for a search term.","operationId":"trends_related_api_v1_trends_related_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term","title":"Q"},"description":"Search term"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","default":"","title":"Geo"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","default":"today 12-m","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsRelatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/trending":{"get":{"tags":["Google Trends"],"summary":"Trending searches","description":"Get trending searches with related queries via Google's TrendsUi.\n\nPrimary path: ``POST /_/TrendsUi/data/batchexecute?rpcids=i0OFE``,\nGoogle's internal RPC backend for the ``/trending`` page. This\nendpoint is **not** protected by SearchGuard / BotGuard \u2014 no\ncookies or anti-abuse token required \u2014 and returns the trending\nlist **with related queries embedded per trend** (10-25 queries\neach), the same data that powers the trending UI's expanded view.\n\nFallback: ``GET /trending/rss?geo=US`` \u2014 also cookieless but\nreturns only title + approximate traffic, no related queries.\n\nVerified working 2026-05-08 (research from a parallel investigation\nconfirmed 30 rapid bursts from one IP all returned 200, payloads\n145 KB - 1 MB).","operationId":"trends_trending_api_v1_trends_trending_get","parameters":[{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Geo"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en-US","title":"Hl"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Hours-back window for the trending list. Google supports 24, 48, 168 (= 1 week).","default":24,"title":"Hours"},"description":"Hours-back window for the trending list. Google supports 24, 48, 168 (= 1 week)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/autocomplete":{"get":{"tags":["Google Trends"],"summary":"Trends topic autocomplete","description":"Return categorized topic entities from the Google Trends autocomplete API.\n\nUnlike Google Search autocomplete (which returns flat keyword suggestions),\nthis endpoint returns Knowledge Graph entities each tagged with a `type`\nand a machine identifier (`mid`) \u2014 the same data that powers the Trends\nUI's \"Search topic\" picker. Each entry includes a direct link into the\nTrends explore view for that topic.","operationId":"trends_autocomplete_api_v1_trends_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Query prefix to resolve into Trends topics","title":"Q"},"description":"Query prefix to resolve into Trends topics"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en-US","title":"Hl"},"description":"Language code"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"Timezone offset in minutes (Google format)","default":"0","title":"Tz"},"description":"Timezone offset in minutes (Google format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsAutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/search":{"get":{"tags":["Google Trends"],"summary":"Google Trends \u2014 unified search","description":"Unified Google Trends dispatcher. Pick the shape via `data_type`.","operationId":"trends_search_api_v1_trends_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term(s). Up to 5 comma-separated terms for TIMESERIES / GEO_MAP; single term for GEO_MAP_0 / RELATED_TOPICS / RELATED_QUERIES. Also accepts a topic MID.","title":"Q"},"description":"Search term(s). Up to 5 comma-separated terms for TIMESERIES / GEO_MAP; single term for GEO_MAP_0 / RELATED_TOPICS / RELATED_QUERIES. Also accepts a topic MID."},{"name":"data_type","in":"query","required":false,"schema":{"enum":["TIMESERIES","GEO_MAP","GEO_MAP_0","RELATED_TOPICS","RELATED_QUERIES"],"type":"string","description":"Dispatch on: TIMESERIES (interest over time), GEO_MAP (compared breakdown, multi-query), GEO_MAP_0 (interest by region, single query), RELATED_TOPICS (top + rising topics), RELATED_QUERIES (top + rising queries).","default":"TIMESERIES","title":"Data Type"},"description":"Dispatch on: TIMESERIES (interest over time), GEO_MAP (compared breakdown, multi-query), GEO_MAP_0 (interest by region, single query), RELATED_TOPICS (top + rising topics), RELATED_QUERIES (top + rising queries)."},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country / region code (e.g. US, GB, US-CA).","default":"","title":"Geo"},"description":"Country / region code (e.g. US, GB, US-CA)."},{"name":"date","in":"query","required":false,"schema":{"type":"string","description":"Time range.","default":"today 12-m","title":"Date"},"description":"Time range."},{"name":"cat","in":"query","required":false,"schema":{"type":"integer","description":"Category filter ID (0 = all).","default":0,"title":"Cat"},"description":"Category filter ID (0 = all)."},{"name":"gprop","in":"query","required":false,"schema":{"type":"string","description":"Property filter: \"\" (web), \"images\", \"news\", \"froogle\", \"youtube\".","default":"","title":"Gprop"},"description":"Property filter: \"\" (web), \"images\", \"news\", \"froogle\", \"youtube\"."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geo resolution for GEO_MAP / GEO_MAP_0: COUNTRY / REGION / DMA / CITY. Omit to use the widget's own default.","title":"Region"},"description":"Geo resolution for GEO_MAP / GEO_MAP_0: COUNTRY / REGION / DMA / CITY. Omit to use the widget's own default."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `hl`. Defaults to en-US.","title":"Language"},"description":"Alias for `hl`. Defaults to en-US."},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"Timezone offset in minutes.","default":"0","title":"Tz"},"description":"Timezone offset in minutes."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/trending-now":{"get":{"tags":["Google Trends"],"summary":"Google Trends \u2014 current trending searches","description":"Current trending searches with the full Google Trends UI filters.\n\n``geo`` honored by the upstream feed. ``category`` is passed through\nas ``cat=``; when the feed ignores it we still return the\nbase result set so callers get *something* useful. ``status`` and\n``sort`` are applied client-side against the parsed result list.","operationId":"trends_trending_now_api_v1_trends_trending_now_get","parameters":[{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country code (e.g. ``US``, ``LT``, ``GB``).","default":"US","title":"Geo"},"description":"Country code (e.g. ``US``, ``LT``, ``GB``)."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Look-back window in hours. Google's UI supports 4, 24, 48, 168. Passed through to the upstream feed; the public RSS currently ignores this filter.","default":24,"title":"Hours"},"description":"Look-back window in hours. Google's UI supports 4, 24, 48, 168. Passed through to the upstream feed; the public RSS currently ignores this filter."},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Category filter. Accepts Google's letter codes (``b`` business, ``e`` entertainment, ``m`` health, ``t`` sci/tech, ``s`` sports, ``h`` top stories) or the friendly aliases (``business``, ``entertainment``, ``health``, ``sci_tech``/``technology``, ``sports``, ``top_stories``). ``all`` (default) returns every category.","default":"all","title":"Category"},"description":"Category filter. Accepts Google's letter codes (``b`` business, ``e`` entertainment, ``m`` health, ``t`` sci/tech, ``s`` sports, ``h`` top stories) or the friendly aliases (``business``, ``entertainment``, ``health``, ``sci_tech``/``technology``, ``sports``, ``top_stories``). ``all`` (default) returns every category."},{"name":"status","in":"query","required":false,"schema":{"enum":["all","active"],"type":"string","description":"Trend state. ``active`` keeps only entries with a non-zero search volume (still surging); ``all`` (default) returns every entry including ended ones.","default":"all","title":"Status"},"description":"Trend state. ``active`` keeps only entries with a non-zero search volume (still surging); ``all`` (default) returns every entry including ended ones."},{"name":"sort","in":"query","required":false,"schema":{"enum":["relevance","search_volume","title","recency"],"type":"string","description":"Sort order. ``relevance`` (default) keeps Google's ordering; ``search_volume`` orders by parsed traffic descending; ``title`` sorts alphabetically; ``recency`` falls back to relevance when the feed omits publication timestamps.","default":"relevance","title":"Sort"},"description":"Sort order. ``relevance`` (default) keeps Google's ordering; ``search_volume`` orders by parsed traffic descending; ``title`` sorts alphabetically; ``recency`` falls back to relevance when the feed omits publication timestamps."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en-US","title":"Hl"},"description":"Language code."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/search":{"get":{"tags":["Google Jobs"],"summary":"Search Google Jobs","description":"Search Google Jobs.\n\nTwo data sources are available via ``mode``:\n\n- ``mode=rpc`` (default) \u2014 Google's own Careers SPA RPC. Very fast\n (~300 ms), richly structured (title, apply URL, company,\n locations, responsibilities, qualifications, posted-at,\n experience levels). Scope limited to Google's openings.\n- ``mode=serp`` \u2014 public Google Jobs SERP (aggregator).","operationId":"jobs_search_api_v1_jobs_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Job title / keywords / combined query.","title":"Q"},"description":"Job title / keywords / combined query."},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City / state / region \u2014 concatenated with `q` before sending to Google.","title":"Location"},"description":"City / state / region \u2014 concatenated with `q` before sending to Google."},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code (ISO 3166 alpha-2).","default":"us","title":"Gl"},"description":"Country code (ISO 3166 alpha-2)."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `gl`; when present overrides it.","title":"Country"},"description":"Alias for `gl`; when present overrides it."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en","title":"Hl"},"description":"Language code."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `hl`; when present overrides it.","title":"Language"},"description":"Alias for `hl`; when present overrides it."},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain for locale-specific results (`google.com`, `google.co.uk`, `google.co.in`, \u2026).","default":"google.com","title":"Domain"},"description":"Google domain for locale-specific results (`google.com`, `google.co.uk`, `google.co.in`, \u2026)."},{"name":"job_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["FULLTIME","PARTTIME","CONTRACTOR","INTERN"],"type":"string"},{"type":"null"}],"description":"Employment type \u2014 translated into a `chips` filter.","title":"Job Type"},"description":"Employment type \u2014 translated into a `chips` filter."},{"name":"date_posted","in":"query","required":false,"schema":{"anyOf":[{"enum":["today","3days","week","month"],"type":"string"},{"type":"null"}],"description":"Posted-date window \u2014 translated into a `chips` filter.","title":"Date Posted"},"description":"Posted-date window \u2014 translated into a `chips` filter."},{"name":"ltype","in":"query","required":false,"schema":{"anyOf":[{"enum":["remote","hybrid","onsite","work_from_home"],"type":"string"},{"type":"null"}],"description":"Work arrangement \u2014 maps onto Google's remote/hybrid/onsite chips.","title":"Ltype"},"description":"Work arrangement \u2014 maps onto Google's remote/hybrid/onsite chips."},{"name":"chips","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Raw Google chip-filter string (comma-separated). Merged with any structured filters (`job_type`, `date_posted`, `ltype`).","title":"Chips"},"description":"Raw Google chip-filter string (comma-separated). Merged with any structured filters (`job_type`, `date_posted`, `ltype`)."},{"name":"uds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque Google filter token harvested from a prior Jobs search URL.","title":"Uds"},"description":"Opaque Google filter token harvested from a prior Jobs search URL."},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google's UULE-encoded location (e.g. `w+CAIQIFJlbGF5IFN0YXRlcw==`).","title":"Uule"},"description":"Google's UULE-encoded location (e.g. `w+CAIQIFJlbGF5IFN0YXRlcw==`)."},{"name":"lrad","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search radius around the location (Google accepts a distance in miles).","title":"Lrad"},"description":"Search radius around the location (Google accepts a distance in miles)."},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque token from the previous response's `pagination.next`.","title":"Next Page Token"},"description":"Opaque token from the previous response's `pagination.next`."},{"name":"mode","in":"query","required":false,"schema":{"enum":["rpc","serp"],"type":"string","description":"Data source. ``rpc`` (default, ~300 ms) replays Google's own ``r06xKb`` batchexecute RPC on the Google Careers portal \u2014 clean JSON, 20 roles per page, scope = Google's internal openings. ``serp`` uses the public Jobs search vertical (``udm=8``, SERP-embedded, 3rd-party aggregator) and costs more latency because Google gates it behind JS.","default":"rpc","title":"Mode"},"description":"Data source. ``rpc`` (default, ~300 ms) replays Google's own ``r06xKb`` batchexecute RPC on the Google Careers portal \u2014 clean JSON, 20 roles per page, scope = Google's internal openings. ``serp`` uses the public Jobs search vertical (``udm=8``, SERP-embedded, 3rd-party aggregator) and costs more latency because Google gates it behind JS."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/search":{"get":{"tags":["Google Shopping"],"summary":"Search Google Shopping","description":"Search Google Shopping for products.\n\nRequires browser rendering due to dynamic JS-loaded content.","operationId":"shopping_search_api_v1_shopping_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Product search query","title":"Q"},"description":"Product search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum price","title":"Min Price"},"description":"Minimum price"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum price","title":"Max Price"},"description":"Maximum price"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: price_low, price_high, rating, reviews","title":"Sort By"},"description":"Sort: price_low, price_high, rating, reviews"},{"name":"free_shipping","in":"query","required":false,"schema":{"type":"boolean","description":"Free shipping filter","default":false,"title":"Free Shipping"},"description":"Free shipping filter"},{"name":"on_sale","in":"query","required":false,"schema":{"type":"boolean","description":"On sale filter","default":false,"title":"On Sale"},"description":"On sale filter"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/product/click":{"get":{"tags":["Google Shopping"],"summary":"Resolve merchant URL for a Google Shopping product","description":"Resolve the real merchant URL for a product from Google Shopping.\n\nGoogle has removed direct merchant links from organic Shopping HTML,\nso the public /shopping/search response can only return the product\ntitle + price + source. This endpoint takes a product title (and\noptionally the source merchant) and uses Google's \"I'm Feeling Lucky\"\nredirect (`btnI=1`) to materialize the top merchant URL, mirroring\nthe per-product enrichment pattern exposes via\n`immersive product link`.\n\nWhen `source` is passed, the query is scoped with `site:{domain}`\nso the resolved URL lands on the exact merchant whose price was\nshown in the card (rather than a generic top organic match).\n\nTypical usage:\n 1. Call GET /shopping/search?q=laptop\n 2. Pick a product from the results\n 3. Call the product's click_link field to get the merchant URL\n\nCredits: 1 per call (one secondary scrape via curl_cffi).","operationId":"shopping_product_click_api_v1_shopping_product_click_get","parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string","description":"Exact product title from a search result","title":"Title"},"description":"Exact product title from a search result"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Merchant source name from the shopping card (e.g. 'Walmart', 'Best Buy'). Forces the resolved URL to that merchant via site: operator.","title":"Source"},"description":"Merchant source name from the shopping card (e.g. 'Walmart', 'Best Buy'). Forces the resolved URL to that merchant via site: operator."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Original search query (optional, improves disambiguation)","title":"Q"},"description":"Original search query (optional, improves disambiguation)"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stable product_id from the /shopping/search result","title":"Product Id"},"description":"Stable product_id from the /shopping/search result"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingClickResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/product":{"get":{"tags":["Google Shopping"],"summary":"Product details","description":"Get detailed product information with seller offers.","operationId":"shopping_product_api_v1_shopping_product_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID from search results","title":"Product Id"},"description":"Product ID from search results"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","default":"us","title":"Gl"}},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Hl"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/patents/search":{"get":{"tags":["Google Patents"],"summary":"Search Google Patents","description":"Search Google Patents using the XHR API.","operationId":"search_patents_api_v1_patents_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (supports Boolean logic)","title":"Q"},"description":"Search query (supports Boolean logic)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number","default":0,"title":"Page"},"description":"Page number"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":10,"title":"Num"},"description":"Results per page"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["new","old"],"type":"string"},{"type":"null"}],"description":"Sort order","title":"Sort"},"description":"Sort order"},{"name":"inventor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inventor name(s)","title":"Inventor"},"description":"Inventor name(s)"},{"name":"assignee","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assignee name(s)","title":"Assignee"},"description":"Assignee name(s)"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country code(s)","title":"Country"},"description":"Country code(s)"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"enum":["ENGLISH","GERMAN","CHINESE","FRENCH","JAPANESE","KOREAN","SPANISH"],"type":"string"},{"type":"null"}],"description":"Patent language","title":"Language"},"description":"Patent language"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["GRANT","APPLICATION"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"patent_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["PATENT","DESIGN"],"type":"string"},{"type":"null"}],"title":"Patent Type"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Before date (YYYYMMDD)","title":"Before"},"description":"Before date (YYYYMMDD)"},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"After date (YYYYMMDD)","title":"After"},"description":"After date (YYYYMMDD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/patents/detail":{"get":{"tags":["Google Patents"],"summary":"Get patent details","description":"Get detailed patent information using the XHR endpoint (returns HTML).","operationId":"get_patent_detail_api_v1_patents_detail_get","parameters":[{"name":"patent_id","in":"query","required":true,"schema":{"type":"string","description":"Patent/publication number (e.g. US10000000B2)","title":"Patent Id"},"description":"Patent/publication number (e.g. US10000000B2)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/search":{"get":{"tags":["Google Scholar"],"summary":"Search Google Scholar","description":"Search Google Scholar for scholarly articles using direct HTTP.","operationId":"search_scholar_api_v1_scholar_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query for scholarly articles","title":"Q"},"description":"Search query for scholarly articles"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"as_ylo","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Year from (e.g. 2020)","title":"As Ylo"},"description":"Year from (e.g. 2020)"},{"name":"as_yhi","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Year to (e.g. 2024)","title":"As Yhi"},"description":"Year to (e.g. 2024)"},{"name":"as_sdt","in":"query","required":false,"schema":{"type":"string","description":"Search type: 0=exclude patents, 7=include patents","default":"0","title":"As Sdt"},"description":"Search type: 0=exclude patents, 7=include patents"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based)","default":0,"title":"Page"},"description":"Page number (0-based)"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Results per page (max 20)","default":10,"title":"Num"},"description":"Results per page (max 20)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/profiles":{"get":{"tags":["Google Scholar"],"summary":"Search Google Scholar author profiles","description":"Search Google Scholar for author profiles by name.\n\nGoogle auth-gates the direct ``view_op=search_authors`` endpoint for\nunauthenticated clients, so this handler falls back to a regular\n``/scholar?q=`` search and harvests unique\n``/citations?user=`` links from each result's author byline\n(``gs_a`` div). The response schema is unchanged \u2014 each\n``ScholarProfile`` carries ``author_id``, ``name``, and ``link``.\nAffiliation, email domain, cited-by count, interests, and thumbnail\nare intentionally left ``None`` because a search page doesn't carry\nthat metadata; callers who want them should pipe each ``author_id``\nthrough ``/v1/google/scholar/author`` for the full profile.\n\n``after_author`` / ``before_author`` pagination tokens are accepted\nfor API compatibility but ignored, since the fallback uses the main\nScholar search (which paginates via ``page=N``) rather than the\ngated author-search view.","operationId":"scholar_profiles_api_v1_scholar_profiles_get","parameters":[{"name":"mauthors","in":"query","required":true,"schema":{"type":"string","description":"Author name query (e.g. 'Geoffrey Hinton')","title":"Mauthors"},"description":"Author name query (e.g. 'Geoffrey Hinton')"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"after_author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token for the next page","title":"After Author"},"description":"Pagination token for the next page"},{"name":"before_author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token for the previous page","title":"Before Author"},"description":"Pagination token for the previous page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarProfilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/author":{"get":{"tags":["Google Scholar"],"summary":"Get Google Scholar author profile","description":"Get detailed Google Scholar author profile including articles, stats, and co-authors.","operationId":"scholar_author_api_v1_scholar_author_get","parameters":[{"name":"author_id","in":"query","required":true,"schema":{"type":"string","description":"Scholar user ID (the `user` query parameter)","title":"Author Id"},"description":"Scholar user ID (the `user` query parameter)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"cstart","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Articles pagination offset","default":0,"title":"Cstart"},"description":"Articles pagination offset"},{"name":"pagesize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Articles per page","default":20,"title":"Pagesize"},"description":"Articles per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarAuthorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/author/citation":{"get":{"tags":["Google Scholar"],"summary":"Get citation chart data for a Scholar author","description":"Return the citations-per-year chart for a Google Scholar author.","operationId":"scholar_author_citation_api_v1_scholar_author_citation_get","parameters":[{"name":"author_id","in":"query","required":true,"schema":{"type":"string","description":"Scholar user ID","title":"Author Id"},"description":"Scholar user ID"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarAuthorCitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/cite":{"get":{"tags":["Google Scholar"],"summary":"Get citation formats for a Scholar paper","description":"Return MLA, APA, Chicago, Harvard, and Vancouver citation formats.\n\n**Currently returns HTTP 501.** Google's cite-dialog endpoint\n(``/scholar?q=info::scholar.google.com/&output=cite``)\nreturns ``HTTP 403 Forbidden`` for every unauthenticated client as of\nlate 2026 \u2014 the dialog is only served to browsers that have an\nactive Scholar JS session established via a prior `/scholar` page\nload. Working around that requires a stateful browser session which\nis not cost-effective for a single citation lookup.\n\n**Recommended workaround:** call ``/v1/google/scholar/search`` for\nthe paper and build a citation string client-side from the fields\nit already returns: ``title``, ``authors`` (list), ``publication_info``\n(which contains journal + year), and ``link``. That's enough to\nassemble MLA / APA / Chicago / Harvard / Vancouver formats without\nmaking a second HTTP hop.\n\nTracked in scrape-badger/scrapebadger#135 follow-up work; this\nendpoint will be re-enabled when we add a browser-session-backed\nfetch path.","operationId":"scholar_cite_api_v1_scholar_cite_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Cluster ID from a search result (e.g. '5Gohgn6QFikJ')","title":"Q"},"description":"Cluster ID from a search result (e.g. '5Gohgn6QFikJ')"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarCiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/autocomplete/":{"get":{"tags":["Google Autocomplete"],"summary":"Google search suggestions","description":"Get Google search autocomplete suggestions via the JSON API.\n\nReturns up to 10 search suggestions ordered by relevance.","operationId":"get_autocomplete_api_v1_autocomplete__get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query to get suggestions for","title":"Q"},"description":"Search query to get suggestions for"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/search":{"get":{"tags":["Google Images"],"summary":"Search Google Images","description":"Search Google Images for visual content.","operationId":"search_images_api_v1_images_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Image search query","title":"Q"},"description":"Image search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time/filter string (e.g. qdr:d)","title":"Tbs"},"description":"Time/filter string (e.g. qdr:d)"},{"name":"imgsz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image size: l=large, m=medium, i=icon, xXl, etc.","title":"Imgsz"},"description":"Image size: l=large, m=medium, i=icon, xXl, etc."},{"name":"imgcolor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image color: color, gray, transparent, red, orange, etc.","title":"Imgcolor"},"description":"Image color: color, gray, transparent, red, orange, etc."},{"name":"imgtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image type: face, photo, clipart, lineart, animated","title":"Imgtype"},"description":"Image type: face, photo, clipart, lineart, animated"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search: off, active","default":"off","title":"Safe"},"description":"Safe search: off, active"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based, each page = 20 results)","default":0,"title":"Page"},"description":"Page number (0-based, each page = 20 results)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagesSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/videos/search":{"get":{"tags":["Google Videos"],"summary":"Search Google Videos","description":"Search Google for video results.","operationId":"search_videos_api_v1_videos_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Video search query","title":"Q"},"description":"Video search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time filter (e.g. qdr:d=past day, qdr:w=past week, qdr:m=past month)","title":"Tbs"},"description":"Time filter (e.g. qdr:d=past day, qdr:w=past week, qdr:m=past month)"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search: off, active","default":"off","title":"Safe"},"description":"Safe search: off, active"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based, each page = 10 results)","default":0,"title":"Page"},"description":"Page number (0-based, each page = 10 results)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideosSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/quote":{"get":{"tags":["Google Finance"],"summary":"Get Google Finance stock quote","description":"Get a stock or index quote from Google Finance.","operationId":"get_finance_quote_api_v1_finance_quote_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Stock ticker and exchange (e.g. \"AAPL:NASDAQ\", \"GOOGL:NASDAQ\", \"BTC-USD\")","title":"Q"},"description":"Stock ticker and exchange (e.g. \"AAPL:NASDAQ\", \"GOOGL:NASDAQ\", \"BTC-USD\")"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinanceQuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-mode/search":{"get":{"tags":["Google AI Mode"],"summary":"Google AI Mode search","description":"Get AI-generated search results from Google AI Mode.\n\n**Currently returns HTTP 501.** As of 2026 Google has repurposed\nthe historical ``udm=50`` parameter \u2014 it now opens the Visual Search\nhistory prompt, not a dedicated AI Mode surface. There is no\nstandalone ``/search?udm=50`` URL that returns AI-only content\nanymore; AI Overview blocks are rendered inside regular SERPs\ninstead, gated on query + user + geolocation signals.\n\n**Recommended workaround:** call\n``/v1/google/search?q=&ai_overview=true``. The main SERP\nendpoint already parses the ``ai_overview`` block when Google\nincludes one in the response, and the ``ai_overview=true`` flag\nautomatically chases the deferred ``page_token`` follow-up fetch\nwhen Google serves the overview lazily. That's the exact data this\nendpoint was originally meant to return.\n\nThis route remains registered so the product catalog, docs, and\nSDKs don't break \u2014 it will be re-enabled if/when Google ships a\nstable dedicated AI Mode surface again.","operationId":"search_ai_mode_api_v1_ai_mode_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query for AI-generated response","title":"Q"},"description":"Search query for AI-generated response"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"include_html","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Include the raw answer_html body (can be 100s of KB). Set false for just text_blocks + markdown.","title":"Include Html"},"description":"Include the raw answer_html body (can be 100s of KB). Set false for just text_blocks + markdown."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiModeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lens/search":{"get":{"tags":["Google Lens"],"summary":"Google Lens visual search","description":"Search Google Lens by image URL for visually similar results.","operationId":"search_lens_api_v1_lens_search_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public URL of the image to search visually","title":"Url"},"description":"Public URL of the image to search visually"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/local/search":{"get":{"tags":["Google Local"],"summary":"Google Local Pack search","description":"Return Google Local Pack listings for a query.\n\nUnlike ``/v1/google/maps/search`` (which targets the Maps Protobuf API and\nis keyed by ``data_id``), this endpoint follows the Web SERP ``tbm=lcl``\nmode \u2014 the same data that populates the \"Places\" block inside regular\nsearch results. Use it when you care about ranking relative to a SERP\nquery (e.g. SEO/local-SEO research), not when you need full place\nmetadata.","operationId":"local_search_api_v1_local_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (e.g. 'pizza in New York')","title":"Q"},"description":"Search query (e.g. 'pizza in New York')"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain","default":"google.com","title":"Domain"},"description":"Google domain"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City-level geo-targeting (e.g. 'New York, USA')","title":"Location"},"description":"City-level geo-targeting (e.g. 'New York, USA')"},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"UULE encoded location","title":"Uule"},"description":"UULE encoded location"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":20,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLocalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/detail":{"get":{"tags":["Google Products"],"summary":"Google immersive product detail","description":"Get deep product details from Google's immersive product page.\n\nTwo-step fetch: render the Shopping SERP for ``q`` to extract\nsession-bound tokens, then call ``/async/oapv`` with them. Returns\n404 when the product isn't on the SERP \u2014 the caller's query has to\nsurface the tile because the tokens are session-scoped.\n\nResponse time: ~3 s warm (cached SERP), ~6 s cold (SERP + RPC).\nCredits: 5 per call (matches the Shopping product-detail cost).","operationId":"get_product_detail_api_v1_products_detail_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Google Shopping product identifier (``gpcid``). Returned as ``product_id``/``gpcid`` on ``/shopping/search`` tiles.","title":"Product Id"},"description":"Google Shopping product identifier (``gpcid``). Returned as ``product_id``/``gpcid`` on ``/shopping/search`` tiles."},{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Original search query that surfaced the product. Required by Google's ``/async/oapv`` RPC \u2014 the page-level ``ei``/``xsrf`` and per-tile ``oapvfc`` tokens are extracted from the SERP Google renders for this exact query, so the product must be discoverable via this query.","title":"Q"},"description":"Original search query that surfaced the product. Required by Google's ``/async/oapv`` RPC \u2014 the page-level ``ei``/``xsrf`` and per-tile ``oapvfc`` tokens are extracted from the SERP Google renders for this exact query, so the product must be discoverable via this query."},{"name":"gl","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country code (ISO 3166 alpha-2). Defaults to the country implied by ``domain`` (e.g. ``google.com.au`` \u2192 ``au``), falling back to ``us`` when domain doesn't carry a country hint.","title":"Gl"},"description":"Country code (ISO 3166 alpha-2). Defaults to the country implied by ``domain`` (e.g. ``google.com.au`` \u2192 ``au``), falling back to ``us`` when domain doesn't carry a country hint."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en","title":"Hl"},"description":"Language code."},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain (\"google.com\" / \"google.co.uk\" / \u2026) \u2014 used to localise the SERP render that produces the session tokens.","default":"google.com","title":"Domain"},"description":"Google domain (\"google.com\" / \"google.co.uk\" / \u2026) \u2014 used to localise the SERP render that produces the session tokens."},{"name":"include_offers","in":"query","required":false,"schema":{"type":"boolean","description":"When true, return the full merchant-offer list with deep product URLs for every merchant Google ships an offer-block for. Offers come from the primary oapv response (top ~5 panel merchants: DICK'S, Kohl's, Zappos, etc.) plus a parallel paginated fan-out of ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets sori=5..60 \u2014 which surfaces an additional ~50 sellers including GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club, etc. (+5 parallel RPCs, ~1 s wall-clock).","default":false,"title":"Include Offers"},"description":"When true, return the full merchant-offer list with deep product URLs for every merchant Google ships an offer-block for. Offers come from the primary oapv response (top ~5 panel merchants: DICK'S, Kohl's, Zappos, etc.) plus a parallel paginated fan-out of ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets sori=5..60 \u2014 which surfaces an additional ~50 sellers including GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club, etc. (+5 parallel RPCs, ~1 s wall-clock)."},{"name":"include_variants","in":"query","required":false,"schema":{"type":"boolean","description":"When true, also fetch size/colour variants via ``/async/toy_v`` (+1 secondary RPC, ~1 s).","default":false,"title":"Include Variants"},"description":"When true, also fetch size/colour variants via ``/async/toy_v`` (+1 secondary RPC, ~1 s)."},{"name":"resolve_deep_urls","in":"query","required":false,"schema":{"type":"boolean","description":"When true (only meaningful with ``include_offers=true``), browser-render the Shopping SERP so additional merchant deep URLs surface from the rendered HTML. Best-effort: catalog-feed retailers (DSW / Famous Footwear / Shoe Carnival / Myer / rebel) get deep URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy, etc.) still get their homepage because their click-through URLs are signed by Google's aclk redirect and can't be reproduced server-side. Adds ~5\u20138 s latency.","default":false,"title":"Resolve Deep Urls"},"description":"When true (only meaningful with ``include_offers=true``), browser-render the Shopping SERP so additional merchant deep URLs surface from the rendered HTML. Best-effort: catalog-feed retailers (DSW / Famous Footwear / Shoe Carnival / Myer / rebel) get deep URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy, etc.) still get their homepage because their click-through URLs are signed by Google's aclk redirect and can't be reproduced server-side. Adds ~5\u20138 s latency."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shorts/search":{"get":{"tags":["Google Shorts"],"summary":"Google Shorts search","description":"Return Google Shorts \u2014 short-form vertical videos surfaced in search.\n\nTriggers Google's Shorts mode via `udm=39` and parses out the\n`short_videos_results` carousel. Mostly returns YouTube Shorts but also\nincludes TikToks, Facebook Reels, and other short-form sources when\nGoogle surfaces them.","operationId":"shorts_search_api_v1_shorts_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain","default":"google.com","title":"Domain"},"description":"Google domain"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page","default":20,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleShortsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flights/search":{"get":{"tags":["Google Flights"],"summary":"Google Flights search","description":"Search Google Flights for available itineraries.\n\nReturns `best_flights` (Google's top recommendations) and `other_flights`\n(the rest of the result set), plus `price_insights` when Google shows\nits typical-price range / high-low-typical indicator.\n\nParser is best-effort against the rendered DOM \u2014 Google's internal\nbatchexecute protobuf would give richer data (seat maps, booking tokens,\nper-leg aircraft) but requires reverse-engineering that changes\nfrequently. The DOM route is more stable for daily-use scraping.","operationId":"flights_search_api_v1_flights_search_get","parameters":[{"name":"departure_id","in":"query","required":true,"schema":{"type":"string","description":"Departure airport IATA code (e.g. JFK) or location ID","title":"Departure Id"},"description":"Departure airport IATA code (e.g. JFK) or location ID"},{"name":"arrival_id","in":"query","required":true,"schema":{"type":"string","description":"Arrival airport IATA code (e.g. LHR) or location ID","title":"Arrival Id"},"description":"Arrival airport IATA code (e.g. LHR) or location ID"},{"name":"outbound_date","in":"query","required":true,"schema":{"type":"string","description":"Outbound date (YYYY-MM-DD)","title":"Outbound Date"},"description":"Outbound date (YYYY-MM-DD)"},{"name":"return_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Return date (YYYY-MM-DD, round-trip only)","title":"Return Date"},"description":"Return date (YYYY-MM-DD, round-trip only)"},{"name":"trip_type","in":"query","required":false,"schema":{"enum":["one_way","round_trip","multi_city"],"type":"string","description":"Trip type: round_trip | one_way | multi_city","default":"round_trip","title":"Trip Type"},"description":"Trip type: round_trip | one_way | multi_city"},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","maximum":9,"minimum":1,"description":"Adult passengers","default":1,"title":"Adults"},"description":"Adult passengers"},{"name":"children","in":"query","required":false,"schema":{"type":"integer","maximum":8,"minimum":0,"description":"Children passengers","default":0,"title":"Children"},"description":"Children passengers"},{"name":"infants_in_seat","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":0,"default":0,"title":"Infants In Seat"}},{"name":"infants_on_lap","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":0,"default":0,"title":"Infants On Lap"}},{"name":"travel_class","in":"query","required":false,"schema":{"enum":["economy","premium_economy","business","first"],"type":"string","description":"Cabin class","default":"economy","title":"Travel Class"},"description":"Cabin class"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"ISO-4217 currency code","default":"USD","title":"Currency"},"description":"ISO-4217 currency code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"stops","in":"query","required":false,"schema":{"enum":["any","nonstop","one_stop","two_stops"],"type":"string","description":"Max stops filter","default":"any","title":"Stops"},"description":"Max stops filter"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Max price filter","title":"Max Price"},"description":"Max price filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleFlightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health":{"get":{"summary":"Api Health","description":"API health check.","operationId":"api_health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title","link"],"title":"AdResult","description":"A sponsored/ad result."},"AiModeResponse":{"properties":{"text_blocks":{"items":{"$ref":"#/components/schemas/AiTextBlock"},"type":"array","title":"Text Blocks"},"references":{"items":{"$ref":"#/components/schemas/AiReference"},"type":"array","title":"References"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Markdown","description":"Compact Markdown rendering of the whole answer."},"answer_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer Html","description":"Raw answer body HTML (script/style stripped). Omitted when include_html=false."}},"type":"object","required":["query"],"title":"AiModeResponse","description":"Response for GET /api/v1/ai-mode/search."},"AiOverview":{"properties":{"text_blocks":{"items":{"$ref":"#/components/schemas/AiOverviewTextBlock"},"type":"array","title":"Text Blocks"},"references":{"items":{"$ref":"#/components/schemas/AiOverviewReference"},"type":"array","title":"References"},"page_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Token","description":"Continuation token for the deferred AI Overview fetch. Non-null when Google embeds only a placeholder in the main SERP response."},"deferred":{"type":"boolean","title":"Deferred","description":"True when the AI Overview was present as a deferred block.","default":false}},"type":"object","title":"AiOverview","description":"Google AI Overview (AI-generated summary).\n\nGoogle increasingly serves the AI Overview as a **deferred** block \u2014 the\ninitial SERP HTML contains only a placeholder plus a `page_token` that\nthe client has to POST back to retrieve the actual content. When that\nhappens, the SERP parser populates `page_token` and leaves\n`text_blocks`/`references` empty. Callers of `/v1/google/search` can pass\n`ai_overview=true` to have the scraper chase the token automatically and\nmerge the result back into this object."},"AiOverviewListItem":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"snippet_links":{"items":{"$ref":"#/components/schemas/SnippetLink"},"type":"array","title":"Snippet Links"}},"type":"object","title":"AiOverviewListItem","description":"A list item within an AI Overview text block."},"AiOverviewReference":{"properties":{"index":{"type":"integer","title":"Index"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"}},"type":"object","required":["index","title","link"],"title":"AiOverviewReference","description":"A source reference in AI Overview."},"AiOverviewTextBlock":{"properties":{"type":{"type":"string","enum":["paragraph","heading","list","video","table"],"title":"Type"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"snippet_links":{"items":{"$ref":"#/components/schemas/SnippetLink"},"type":"array","title":"Snippet Links"},"list_items":{"items":{"$ref":"#/components/schemas/AiOverviewListItem"},"type":"array","title":"List Items"},"video":{"anyOf":[{"$ref":"#/components/schemas/AiOverviewVideo"},{"type":"null"}]},"video_links":{"items":{"$ref":"#/components/schemas/AiOverviewVideo"},"type":"array","title":"Video Links"}},"type":"object","required":["type"],"title":"AiOverviewTextBlock","description":"A typed content block within AI Overview."},"AiOverviewVideo":{"properties":{"link":{"type":"string","title":"Link"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["link"],"title":"AiOverviewVideo","description":"Video reference in AI Overview."},"AiReference":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"AiReference","description":"A reference cited in the AI response."},"AiTextBlock":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Level"},"header":{"items":{"type":"string"},"type":"array","title":"Header","description":"Header cells for a table block."},"rows":{"items":{"$ref":"#/components/schemas/AiTableRow"},"type":"array","title":"Rows","description":"Body rows for a table block."}},"type":"object","title":"AiTextBlock","description":"A block of the AI answer: paragraph | heading | list | table. A table block carries header + rows."},"AutocompleteResponse":{"properties":{"suggestions":{"items":{"$ref":"#/components/schemas/AutocompleteSuggestion"},"type":"array","title":"Suggestions"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"AutocompleteResponse","description":"Response for GET /api/v1/autocomplete/."},"AutocompleteSuggestion":{"properties":{"value":{"type":"string","title":"Value"},"relevance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Relevance"}},"type":"object","required":["value"],"title":"AutocompleteSuggestion","description":"A single autocomplete suggestion."},"CitationByYear":{"properties":{"year":{"type":"integer","title":"Year"},"citations":{"type":"integer","title":"Citations"}},"type":"object","required":["year","citations"],"title":"CitationByYear","description":"One point in the citations-per-year chart."},"FinanceQuoteResponse":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"stock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stock"},"exchange":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exchange"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"price_movement":{"anyOf":[{"$ref":"#/components/schemas/PriceMovement"},{"type":"null"}]},"stats":{"$ref":"#/components/schemas/FinanceStats"}},"type":"object","title":"FinanceQuoteResponse","description":"Response for GET /api/v1/finance/quote."},"FinanceStats":{"properties":{"prev_close":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prev Close"},"day_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Range"},"year_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Year Range"},"market_cap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Cap"},"pe_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pe Ratio"}},"type":"object","title":"FinanceStats","description":"Key financial statistics."},"FlightAirport":{"properties":{"iata_code":{"type":"string","title":"Iata Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},"type":"object","required":["iata_code"],"title":"FlightAirport","description":"Airport metadata referenced in a search result."},"FlightLayover":{"properties":{"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airport"},"airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airport Name"},"overnight":{"type":"boolean","title":"Overnight","default":false}},"type":"object","title":"FlightLayover","description":"A layover between two legs in a multi-segment itinerary."},"FlightLeg":{"properties":{"departure_airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Airport","description":"IATA code"},"departure_airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Airport Name"},"departure_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Time","description":"ISO-8601 local time of departure"},"arrival_airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Airport"},"arrival_airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Airport Name"},"arrival_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Time"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"airline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline"},"airline_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline Logo"},"flight_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flight Number"},"aircraft":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aircraft"},"travel_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Travel Class"},"legroom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legroom"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","title":"FlightLeg","description":"One segment of a flight itinerary (e.g. SFO \u2192 LHR on a connection)."},"FlightOffer":{"properties":{"legs":{"items":{"$ref":"#/components/schemas/FlightLeg"},"type":"array","title":"Legs"},"layovers":{"items":{"$ref":"#/components/schemas/FlightLayover"},"type":"array","title":"Layovers"},"total_duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Minutes"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"price_type":{"anyOf":[{"type":"string","enum":["base","total"]},{"type":"null"}],"title":"Price Type"},"booking_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Booking Token"},"departure_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Token"},"carbon_emissions_grams":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carbon Emissions Grams"},"carbon_emissions_diff_typical":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carbon Emissions Diff Typical","description":"Difference vs typical emissions for this route, in grams"},"airline_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline Logo"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","title":"FlightOffer","description":"A single end-to-end flight itinerary that appears in the results."},"FlightPriceInsights":{"properties":{"lowest_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lowest Price"},"price_level":{"anyOf":[{"type":"string","enum":["low","typical","high"]},{"type":"null"}],"title":"Price Level"},"typical_price_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Typical Price Range","description":"[min, max] typical price for this route"},"price_history":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Price History","description":"Historical price points as [[unix_timestamp, price], ...]"}},"type":"object","title":"FlightPriceInsights","description":"Typical price range insight for the searched route."},"GoogleFlightsResponse":{"properties":{"best_flights":{"items":{"$ref":"#/components/schemas/FlightOffer"},"type":"array","title":"Best Flights"},"other_flights":{"items":{"$ref":"#/components/schemas/FlightOffer"},"type":"array","title":"Other Flights"},"price_insights":{"anyOf":[{"$ref":"#/components/schemas/FlightPriceInsights"},{"type":"null"}]},"airports":{"items":{"$ref":"#/components/schemas/FlightAirport"},"type":"array","title":"Airports"},"departure_id":{"type":"string","title":"Departure Id"},"arrival_id":{"type":"string","title":"Arrival Id"},"outbound_date":{"type":"string","title":"Outbound Date"},"return_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Date"},"currency":{"type":"string","title":"Currency","default":"USD"},"trip_type":{"type":"string","enum":["one_way","round_trip","multi_city"],"title":"Trip Type","default":"round_trip"}},"type":"object","required":["departure_id","arrival_id","outbound_date"],"title":"GoogleFlightsResponse","description":"Response for GET /api/v1/flights/search."},"GoogleLocalResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"local_results":{"items":{"$ref":"#/components/schemas/LocalResult"},"type":"array","title":"Local Results"}},"type":"object","required":["search_information"],"title":"GoogleLocalResponse","description":"Response for GET /api/v1/local/search."},"GoogleSearchResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"ai_overview":{"anyOf":[{"$ref":"#/components/schemas/AiOverview"},{"type":"null"}]},"organic_results":{"items":{"$ref":"#/components/schemas/OrganicResult"},"type":"array","title":"Organic Results"},"ads":{"items":{"$ref":"#/components/schemas/AdResult"},"type":"array","title":"Ads"},"knowledge_graph":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeGraph"},{"type":"null"}]},"local_results":{"items":{"$ref":"#/components/schemas/LocalResult"},"type":"array","title":"Local Results"},"related_questions":{"items":{"$ref":"#/components/schemas/RelatedQuestion"},"type":"array","title":"Related Questions"},"related_searches":{"items":{"$ref":"#/components/schemas/RelatedSearch"},"type":"array","title":"Related Searches"},"news_results":{"items":{"$ref":"#/components/schemas/NewsResult"},"type":"array","title":"News Results"},"inline_videos":{"items":{"$ref":"#/components/schemas/InlineVideo"},"type":"array","title":"Inline Videos"},"shopping_results":{"items":{"$ref":"#/components/schemas/ShoppingResult"},"type":"array","title":"Shopping Results"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["search_information","pagination"],"title":"GoogleSearchResponse","description":"Response for GET /api/v1/search."},"GoogleShortsResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"short_videos_results":{"items":{"$ref":"#/components/schemas/ShortVideoResult"},"type":"array","title":"Short Videos Results"}},"type":"object","required":["search_information"],"title":"GoogleShortsResponse","description":"Response for GET /api/v1/shorts/search."},"GpsCoordinates":{"properties":{"lat":{"type":"number","title":"Lat"},"lng":{"type":"number","title":"Lng"}},"type":"object","required":["lat","lng"],"title":"GpsCoordinates","description":"GPS coordinates."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HotelDetailResponse":{"properties":{"property":{"$ref":"#/components/schemas/HotelProperty"}},"type":"object","required":["property"],"title":"HotelDetailResponse","description":"Response for GET /api/v1/hotels/details."},"HotelNearbyPlace":{"properties":{"name":{"type":"string","title":"Name"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["name"],"title":"HotelNearbyPlace","description":"A place near the hotel."},"HotelPrice":{"properties":{"source":{"type":"string","title":"Source"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"cancellation_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Policy"}},"type":"object","required":["source"],"title":"HotelPrice","description":"A hotel price from a specific source."},"HotelProperty":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"hotel_class":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hotel Class"},"eco_certified":{"type":"boolean","title":"Eco Certified","default":false},"check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check In Time"},"check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Out Time"},"overall_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"rate_per_night":{"anyOf":[{"$ref":"#/components/schemas/HotelRate"},{"type":"null"}]},"total_rate":{"anyOf":[{"$ref":"#/components/schemas/HotelRate"},{"type":"null"}]},"prices":{"items":{"$ref":"#/components/schemas/HotelPrice"},"type":"array","title":"Prices"},"nearby_places":{"items":{"$ref":"#/components/schemas/HotelNearbyPlace"},"type":"array","title":"Nearby Places"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"property_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Token"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["name"],"title":"HotelProperty","description":"A hotel search result."},"HotelRate":{"properties":{"lowest":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lowest"},"extracted":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Extracted"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},"type":"object","title":"HotelRate","description":"Hotel rate information."},"HotelsSearchResponse":{"properties":{"properties":{"items":{"$ref":"#/components/schemas/HotelProperty"},"type":"array","title":"Properties"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"HotelsSearchResponse","description":"Response for GET /api/v1/hotels/search."},"ImageResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original"},"original_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Width"},"original_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Height"}},"type":"object","title":"ImageResult","description":"A single image search result."},"ImagesSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ImageResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"ImagesSearchResponse","description":"Response for GET /api/v1/images/search."},"InlineSitelink":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","title":"InlineSitelink","description":"An inline sitelink (e.g. Reddit post metadata)."},"InlineVideo":{"properties":{"title":{"type":"string","title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"}},"type":"object","required":["title"],"title":"InlineVideo","description":"Inline video result."},"JobApplyOption":{"properties":{"source":{"type":"string","title":"Source"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"type":"string","title":"Link"}},"type":"object","required":["source","link"],"title":"JobApplyOption","description":"A job application link."},"JobFilter":{"properties":{"name":{"type":"string","title":"Name"},"options":{"items":{"$ref":"#/components/schemas/JobFilterOption"},"type":"array","title":"Options"}},"type":"object","required":["name"],"title":"JobFilter","description":"A filter option for job search."},"JobFilterOption":{"properties":{"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","required":["label"],"title":"JobFilterOption","description":"A single filter option value."},"JobHighlights":{"properties":{"qualifications":{"items":{"type":"string"},"type":"array","title":"Qualifications"},"responsibilities":{"items":{"type":"string"},"type":"array","title":"Responsibilities"},"benefits":{"items":{"type":"string"},"type":"array","title":"Benefits"}},"type":"object","title":"JobHighlights","description":"Structured job highlights."},"JobResult":{"properties":{"title":{"type":"string","title":"Title"},"company_name":{"type":"string","title":"Company Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via","description":"Source platform (\"Talent.com\", \"Built In NYC\", \u2026) parsed from \"via X\"."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Canonical Google Jobs listing URL."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"salary":{"anyOf":[{"$ref":"#/components/schemas/JobSalary"},{"type":"null"}]},"job_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type"},"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type"},"work_from_home":{"type":"boolean","title":"Work From Home","default":false},"posted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted At"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"apply_options":{"items":{"$ref":"#/components/schemas/JobApplyOption"},"type":"array","title":"Apply Options"},"apply_links":{"items":{"type":"string"},"type":"array","title":"Apply Links","description":"Flat list of apply URLs for quick access."},"job_highlights":{"anyOf":[{"$ref":"#/components/schemas/JobHighlights"},{"type":"null"}]},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title","company_name"],"title":"JobResult","description":"A single job listing."},"JobSalary":{"properties":{"min":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},"type":"object","title":"JobSalary","description":"Job salary information."},"JobsSearchResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Jobs"},"jobs_results":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Jobs Results"},"filters":{"items":{"$ref":"#/components/schemas/JobFilter"},"type":"array","title":"Filters"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"JobsSearchResponse","description":"Response for GET /api/v1/jobs/search."},"KnowledgeGraph":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"attributes":{"additionalProperties":{"type":"string"},"type":"object","title":"Attributes"}},"type":"object","title":"KnowledgeGraph","description":"Knowledge Graph panel."},"LensResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","title":"LensResult","description":"A single visual search result."},"LensSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/LensResult"},"type":"array","title":"Results"},"image_url":{"type":"string","title":"Image Url"}},"type":"object","required":["image_url"],"title":"LensSearchResponse","description":"Response for GET /api/v1/lens/search."},"LocalResult":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]}},"type":"object","required":["title"],"title":"LocalResult","description":"Local pack result."},"MapsLocationDetails":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"}},"type":"object","title":"MapsLocationDetails","description":"Business identity shown alongside posts (matches shape)."},"MapsLocationInfo":{"properties":{"title":{"type":"string","title":"Title"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"}},"type":"object","required":["title"],"title":"MapsLocationInfo","description":"Location summary in review responses."},"MapsOwnerResponse":{"properties":{"text":{"type":"string","title":"Text"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","required":["text"],"title":"MapsOwnerResponse","description":"Business owner response to a review."},"MapsPhoto":{"properties":{"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"}},"type":"object","title":"MapsPhoto","description":"A place photo."},"MapsPhotoCategory":{"properties":{"name":{"type":"string","title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"type":"object","required":["name"],"title":"MapsPhotoCategory","description":"A photo category."},"MapsPhotosResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/MapsPhotoCategory"},"type":"array","title":"Categories"},"photos":{"items":{"$ref":"#/components/schemas/MapsPhoto"},"type":"array","title":"Photos"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsPhotosResponse","description":"Response for GET /api/v1/maps/photos."},"MapsPlaceDetail":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"data_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Id"},"data_cid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cid"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Level"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"types":{"items":{"type":"string"},"type":"array","title":"Types"},"type_ids":{"items":{"type":"string"},"type":"array","title":"Type Ids"},"extensions":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Extensions"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"open_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Open State"},"hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hours"},"operating_hours":{"additionalProperties":{"type":"string"},"type":"object","title":"Operating Hours"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"Full-size image URL (same CDN as thumbnail but larger)"},"google_maps_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Maps Url"},"reviews_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews Link"},"photos_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photos Link"},"posts_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posts Link"},"service_options":{"anyOf":[{"$ref":"#/components/schemas/MapsServiceOptions"},{"type":"null"}]},"provider_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Id"},"rating_breakdown":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rating Breakdown"},"order_online_urls":{"items":{"type":"string"},"type":"array","title":"Order Online Urls"},"photos":{"items":{"type":"string"},"type":"array","title":"Photos"}},"type":"object","required":["title"],"title":"MapsPlaceDetail","description":"Detailed place information."},"MapsPlaceResponse":{"properties":{"place":{"$ref":"#/components/schemas/MapsPlaceDetail"}},"type":"object","required":["place"],"title":"MapsPlaceResponse","description":"Response for GET /api/v1/maps/place."},"MapsPlaceResult":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"data_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Id"},"data_cid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cid"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Level"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"types":{"items":{"type":"string"},"type":"array","title":"Types"},"type_ids":{"items":{"type":"string"},"type":"array","title":"Type Ids"},"extensions":{"items":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"type":"array","title":"Extensions"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"open_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Open State"},"hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hours"},"operating_hours":{"additionalProperties":{"type":"string"},"type":"object","title":"Operating Hours"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"Full-size image URL (same CDN as thumbnail but larger)"},"google_maps_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Maps Url"},"reviews_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews Link"},"photos_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photos Link"},"posts_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posts Link"},"service_options":{"anyOf":[{"$ref":"#/components/schemas/MapsServiceOptions"},{"type":"null"}]}},"type":"object","required":["title"],"title":"MapsPlaceResult","description":"A place from Maps search results."},"MapsPost":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","title":"MapsPost","description":"A business post or update."},"MapsPostsResponse":{"properties":{"location_details":{"anyOf":[{"$ref":"#/components/schemas/MapsLocationDetails"},{"type":"null"}]},"post_data":{"items":{"$ref":"#/components/schemas/MapsPost"},"type":"array","title":"Post Data"},"has_updates":{"type":"boolean","title":"Has Updates","description":"True when the SERP knowledge panel shows an 'Updates from' section","default":false},"merchant_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Description","description":"The 'From the business' description text set by the business owner"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsPostsResponse","description":"Response for GET /api/v1/maps/posts."},"MapsReview":{"properties":{"rating":{"type":"integer","title":"Rating"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"iso_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iso Date"},"user":{"anyOf":[{"$ref":"#/components/schemas/MapsReviewUser"},{"type":"null"}]},"likes":{"type":"integer","title":"Likes","default":0},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"response_from_owner":{"anyOf":[{"$ref":"#/components/schemas/MapsOwnerResponse"},{"type":"null"}]}},"type":"object","required":["rating"],"title":"MapsReview","description":"A single place review."},"MapsReviewTopic":{"properties":{"keyword":{"type":"string","title":"Keyword"},"mentions":{"type":"integer","title":"Mentions","default":0},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"type":"object","required":["keyword"],"title":"MapsReviewTopic","description":"A review topic/keyword."},"MapsReviewUser":{"properties":{"name":{"type":"string","title":"Name"},"contributor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contributor Id"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"local_guide":{"type":"boolean","title":"Local Guide","default":false},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"photos_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Photos Count"}},"type":"object","required":["name"],"title":"MapsReviewUser","description":"User who wrote a review."},"MapsReviewsResponse":{"properties":{"location":{"anyOf":[{"$ref":"#/components/schemas/MapsLocationInfo"},{"type":"null"}]},"topics":{"items":{"$ref":"#/components/schemas/MapsReviewTopic"},"type":"array","title":"Topics"},"reviews":{"items":{"$ref":"#/components/schemas/MapsReview"},"type":"array","title":"Reviews"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsReviewsResponse","description":"Response for GET /api/v1/maps/reviews."},"MapsSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/MapsPlaceResult"},"type":"array","title":"Results"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["results","pagination"],"title":"MapsSearchResponse","description":"Response for GET /api/v1/maps/search."},"MapsServiceOptions":{"properties":{"dine_in":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dine In"},"takeout":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Takeout"},"delivery":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Delivery"},"curbside_pickup":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Curbside Pickup"}},"type":"object","title":"MapsServiceOptions","description":"Service options for a business."},"NewsArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"$ref":"#/components/schemas/NewsSource"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"related_stories":{"items":{"$ref":"#/components/schemas/NewsRelatedStory"},"type":"array","title":"Related Stories"}},"type":"object","required":["title","link","source"],"title":"NewsArticle","description":"A single news article."},"NewsRelatedStory":{"properties":{"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["title","link"],"title":"NewsRelatedStory","description":"A related story within a news cluster."},"NewsResult":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["title"],"title":"NewsResult","description":"Inline news/top stories result."},"NewsSearchResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles","query"],"title":"NewsSearchResponse","description":"Response for GET /api/v1/news/search."},"NewsSource":{"properties":{"name":{"type":"string","title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["name"],"title":"NewsSource","description":"News article source."},"NewsTopicsResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"topic":{"type":"string","title":"Topic"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles","topic"],"title":"NewsTopicsResponse","description":"Response for GET /api/v1/news/topics."},"NewsTrendingResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles"],"title":"NewsTrendingResponse","description":"Response for GET /api/v1/news/trending."},"OrganicResult":{"properties":{"position":{"type":"integer","title":"Position"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"highlighted_keywords":{"items":{"type":"string"},"type":"array","title":"Highlighted Keywords"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon"},"sitelinks":{"items":{"$ref":"#/components/schemas/Sitelink"},"type":"array","title":"Sitelinks"},"inline_sitelinks":{"items":{"$ref":"#/components/schemas/InlineSitelink"},"type":"array","title":"Inline Sitelinks"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"page_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Rank"}},"type":"object","required":["position","title","link"],"title":"OrganicResult","description":"A single organic search result."},"Pagination":{"properties":{"current":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Current","default":1},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"total_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Pages"},"page_no":{"additionalProperties":{"type":"string"},"type":"object","title":"Page No"}},"type":"object","title":"Pagination","description":"Pagination metadata."},"PatentCitation":{"properties":{"patent_id":{"type":"string","title":"Patent Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"}},"type":"object","required":["patent_id"],"title":"PatentCitation","description":"A patent citation reference."},"PatentDetail":{"properties":{"title":{"type":"string","title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"patent_id":{"type":"string","title":"Patent Id"},"publication_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Number"},"priority_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Date"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"},"grant_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grant Date"},"publication_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Date"},"inventor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inventor"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"figures":{"items":{"$ref":"#/components/schemas/PatentFigure"},"type":"array","title":"Figures"},"country_status":{"additionalProperties":{"type":"string"},"type":"object","title":"Country Status"},"abstract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstract"},"claims":{"items":{"type":"string"},"type":"array","title":"Claims"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"classifications":{"items":{"type":"string"},"type":"array","title":"Classifications"},"citations":{"items":{"$ref":"#/components/schemas/PatentCitation"},"type":"array","title":"Citations"},"application_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Number"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["title","patent_id"],"title":"PatentDetail","description":"Detailed patent information from /xhr/result."},"PatentDetailResponse":{"properties":{"patent":{"$ref":"#/components/schemas/PatentDetail"}},"type":"object","required":["patent"],"title":"PatentDetailResponse","description":"Response for GET /api/v1/patents/detail."},"PatentFigure":{"properties":{"url":{"type":"string","title":"Url"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["url"],"title":"PatentFigure","description":"Patent figure/drawing."},"PatentResult":{"properties":{"title":{"type":"string","title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"patent_id":{"type":"string","title":"Patent Id"},"publication_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Number"},"priority_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Date"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"},"grant_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grant Date"},"publication_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Date"},"inventor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inventor"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"figures":{"items":{"$ref":"#/components/schemas/PatentFigure"},"type":"array","title":"Figures"},"country_status":{"additionalProperties":{"type":"string"},"type":"object","title":"Country Status"}},"type":"object","required":["title","patent_id"],"title":"PatentResult","description":"A single patent search result."},"PatentSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/PatentResult"},"type":"array","title":"Results"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"query":{"type":"string","title":"Query"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["results","query","pagination"],"title":"PatentSearchResponse","description":"Response for GET /api/v1/patents/search."},"PriceMovement":{"properties":{"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},"type":"object","title":"PriceMovement","description":"Price movement data."},"ProductDetailResponse":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Range"},"sellers":{"items":{"$ref":"#/components/schemas/ProductSeller"},"type":"array","title":"Sellers"},"specs":{"additionalProperties":{"type":"string"},"type":"object","title":"Specs"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"}},"type":"object","title":"ProductDetailResponse","description":"Response for GET /api/v1/products/detail."},"ProductSeller":{"properties":{"name":{"type":"string","title":"Name"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"shipping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping"}},"type":"object","required":["name"],"title":"ProductSeller","description":"A seller offering the product."},"RelatedQuestion":{"properties":{"question":{"type":"string","title":"Question"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"source_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Logo"}},"type":"object","required":["question"],"title":"RelatedQuestion","description":"People Also Ask question."},"RelatedSearch":{"properties":{"query":{"type":"string","title":"Query"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["query"],"title":"RelatedSearch","description":"Related search suggestion."},"ScholarAuthorArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"authors":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authors"},"publication":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication"},"cited_by_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By Count"},"cited_by_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cited By Link"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},"type":"object","required":["title"],"title":"ScholarAuthorArticle","description":"One article row from the author profile's publication list."},"ScholarAuthorCitationResponse":{"properties":{"author_id":{"type":"string","title":"Author Id"},"citations_by_year":{"items":{"$ref":"#/components/schemas/CitationByYear"},"type":"array","title":"Citations By Year"},"total_citations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Citations"}},"type":"object","required":["author_id"],"title":"ScholarAuthorCitationResponse","description":"Response for GET /api/v1/scholar/author/citation."},"ScholarAuthorInfo":{"properties":{"author_id":{"type":"string","title":"Author Id"},"name":{"type":"string","title":"Name"},"affiliations":{"items":{"type":"string"},"type":"array","title":"Affiliations"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"interests":{"items":{"type":"string"},"type":"array","title":"Interests"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"homepage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage"}},"type":"object","required":["author_id","name"],"title":"ScholarAuthorInfo","description":"Header block of a Scholar author profile page."},"ScholarAuthorResponse":{"properties":{"author":{"$ref":"#/components/schemas/ScholarAuthorInfo"},"articles":{"items":{"$ref":"#/components/schemas/ScholarAuthorArticle"},"type":"array","title":"Articles"},"stats":{"anyOf":[{"$ref":"#/components/schemas/ScholarAuthorStats"},{"type":"null"}]},"co_authors":{"items":{"$ref":"#/components/schemas/ScholarCoAuthor"},"type":"array","title":"Co Authors"}},"type":"object","required":["author"],"title":"ScholarAuthorResponse","description":"Response for GET /api/v1/scholar/author."},"ScholarAuthorStats":{"properties":{"citations_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citations All"},"citations_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citations Since Year"},"h_index_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"H Index All"},"h_index_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"H Index Since Year"},"i10_index_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"I10 Index All"},"i10_index_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"I10 Index Since Year"},"since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Since Year"}},"type":"object","title":"ScholarAuthorStats","description":"Right-rail citation stats table."},"ScholarCitationFormat":{"properties":{"style":{"type":"string","title":"Style"},"citation":{"type":"string","title":"Citation"}},"type":"object","required":["style","citation"],"title":"ScholarCitationFormat","description":"A single citation-style rendering (MLA, APA, Chicago, etc.)."},"ScholarCitationLink":{"properties":{"name":{"type":"string","title":"Name"},"link":{"type":"string","title":"Link"}},"type":"object","required":["name","link"],"title":"ScholarCitationLink","description":"Export link shown at the bottom of the cite dialog (BibTeX, RIS, ...)."},"ScholarCiteResponse":{"properties":{"citations":{"items":{"$ref":"#/components/schemas/ScholarCitationFormat"},"type":"array","title":"Citations"},"links":{"items":{"$ref":"#/components/schemas/ScholarCitationLink"},"type":"array","title":"Links"}},"type":"object","title":"ScholarCiteResponse","description":"Response for GET /api/v1/scholar/cite."},"ScholarCoAuthor":{"properties":{"author_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Id"},"name":{"type":"string","title":"Name"},"affiliation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affiliation"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["name"],"title":"ScholarCoAuthor","description":"Co-author card shown on the author profile page."},"ScholarProfile":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"author_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Id","description":"Google Scholar user ID (the `user` query parameter)"},"name":{"type":"string","title":"Name"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"affiliation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affiliation"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"cited_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By"},"interests":{"items":{"type":"string"},"type":"array","title":"Interests"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["name"],"title":"ScholarProfile","description":"One author card from the Scholar profile search page."},"ScholarProfilesResponse":{"properties":{"profiles":{"items":{"$ref":"#/components/schemas/ScholarProfile"},"type":"array","title":"Profiles"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"before_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before Author","description":"Pagination token for the previous page"},"after_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After Author","description":"Pagination token for the next page"}},"type":"object","required":["query"],"title":"ScholarProfilesResponse","description":"Response for GET /api/v1/scholar/profiles."},"ScholarResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"authors":{"items":{"type":"string"},"type":"array","title":"Authors"},"publication_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Info"},"cited_by_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By Count"},"cited_by_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cited By Link"},"related_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Link"},"versions_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Versions Count"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"}},"type":"object","required":["title"],"title":"ScholarResult","description":"A single scholarly article result."},"ScholarSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ScholarResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"}},"type":"object","required":["query"],"title":"ScholarSearchResponse","description":"Response for GET /api/v1/scholar/search."},"SearchInformation":{"properties":{"query_displayed":{"type":"string","title":"Query Displayed"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"time_taken":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time Taken"},"organic_results_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organic Results State"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["query_displayed"],"title":"SearchInformation","description":"Metadata about the search query."},"ShoppingClickResponse":{"properties":{"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"title":{"type":"string","title":"Title"},"merchant_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Url"},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"source_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Query"}},"type":"object","required":["title"],"title":"ShoppingClickResponse","description":"Response for GET /api/v1/shopping/product/click.\n\nReturns the direct merchant URL for a given product title by using\nGoogle's \"I'm Feeling Lucky\" redirect. Mirrors \nimmersive product link pattern \u2014 an on-demand per-product\nenrichment that materializes the merchant link that Google strips from\norganic Shopping HTML."},"ShoppingFilter":{"properties":{"name":{"type":"string","title":"Name"},"options":{"items":{"$ref":"#/components/schemas/ShoppingFilterOption"},"type":"array","title":"Options"}},"type":"object","required":["name"],"title":"ShoppingFilter","description":"A shopping filter group."},"ShoppingFilterOption":{"properties":{"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"aria_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aria Label"}},"type":"object","required":["label"],"title":"ShoppingFilterOption","description":"A single filter option."},"ShoppingPrice":{"properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"extracted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extracted"}},"type":"object","title":"ShoppingPrice","description":"Product price."},"ShoppingProductDetail":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_range_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Range Low"},"price_range_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Range High"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"sellers":{"items":{"$ref":"#/components/schemas/ShoppingSeller"},"type":"array","title":"Sellers"},"specs":{"additionalProperties":{"type":"string"},"type":"object","title":"Specs"},"images":{"items":{"type":"string"},"type":"array","title":"Images"}},"type":"object","required":["title"],"title":"ShoppingProductDetail","description":"Detailed product information."},"ShoppingProductResponse":{"properties":{"product":{"$ref":"#/components/schemas/ShoppingProductDetail"}},"type":"object","required":["product"],"title":"ShoppingProductResponse","description":"Response for GET /api/v1/shopping/product."},"ShoppingProductResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"$ref":"#/components/schemas/ShoppingPrice"},{"type":"null"}]},"old_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Price"},"old_price_extracted":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Old Price Extracted"},"on_sale":{"type":"boolean","title":"On Sale","default":false},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"source_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Icon"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"click_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Click Link"},"page_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Token"},"delivery":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery"},"return_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Policy"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title"],"title":"ShoppingProductResult","description":"A single product from search results."},"ShoppingResult":{"properties":{"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews"}},"type":"object","required":["title"],"title":"ShoppingResult","description":"Inline shopping result."},"ShoppingSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ShoppingProductResult"},"type":"array","title":"Results"},"filters":{"items":{"$ref":"#/components/schemas/ShoppingFilter"},"type":"array","title":"Filters"},"ads":{"items":{"$ref":"#/components/schemas/ShoppingProductResult"},"type":"array","title":"Ads"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"ShoppingSearchResponse","description":"Response for GET /api/v1/shopping/search."},"ShoppingSeller":{"properties":{"name":{"type":"string","title":"Name"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Price"},"shipping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping"},"tax":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax"},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"}},"type":"object","required":["name"],"title":"ShoppingSeller","description":"A seller offering the product."},"ShortVideoResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"video_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Id"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Host domain (e.g. 'youtube.com', 'tiktok.com')"},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account","description":"Channel / account name"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"views":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Views"},"published":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["title"],"title":"ShortVideoResult","description":"A single short-form video result surfaced in Google Shorts."},"Sitelink":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"}},"type":"object","required":["title"],"title":"Sitelink","description":"A sitelink within an organic result."},"SnippetLink":{"properties":{"link":{"type":"string","title":"Link"},"link_text":{"type":"string","title":"Link Text"}},"type":"object","required":["link","link_text"],"title":"SnippetLink","description":"Inline link within an AI Overview text block."},"TrendsAutocompleteItem":{"properties":{"title":{"type":"string","title":"Title"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"mid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mid","description":"Knowledge Graph machine ID (e.g. '/m/02vx4')"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["title"],"title":"TrendsAutocompleteItem","description":"A categorized topic suggestion returned by the Trends autocomplete API.\n\nDistinct from Google Search autocomplete in that each entry is a\ncategorized entity with a Knowledge Graph `mid` identifier and a\nsemantic `type` (\"Topic\", \"Sports\", \"Career\", etc.) plus a direct\nlink into Google Trends."},"TrendsAutocompleteResponse":{"properties":{"query":{"type":"string","title":"Query"},"results":{"items":{"$ref":"#/components/schemas/TrendsAutocompleteItem"},"type":"array","title":"Results"}},"type":"object","required":["query"],"title":"TrendsAutocompleteResponse","description":"Response for GET /api/v1/trends/autocomplete."},"TrendsInterestResponse":{"properties":{"timeline":{"items":{"$ref":"#/components/schemas/TrendsTimelinePoint"},"type":"array","title":"Timeline"},"averages":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Averages"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsInterestResponse","description":"Response for GET /api/v1/trends/interest."},"TrendsRegionInterest":{"properties":{"region":{"type":"string","title":"Region"},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code"},"value":{"type":"integer","title":"Value","default":0},"max_value_index":{"type":"integer","title":"Max Value Index","default":0}},"type":"object","required":["region"],"title":"TrendsRegionInterest","description":"Interest for a specific region."},"TrendsRegionsResponse":{"properties":{"regions":{"items":{"$ref":"#/components/schemas/TrendsRegionInterest"},"type":"array","title":"Regions"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsRegionsResponse","description":"Response for GET /api/v1/trends/regions."},"TrendsRelatedItem":{"properties":{"title":{"type":"string","title":"Title"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"topic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic Id"},"topic_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic Type"}},"type":"object","required":["title"],"title":"TrendsRelatedItem","description":"A related topic or query."},"TrendsRelatedResponse":{"properties":{"rising_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Topics"},"top_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Topics"},"rising_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Queries"},"top_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Queries"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsRelatedResponse","description":"Response for GET /api/v1/trends/related."},"TrendsSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"data_type":{"type":"string","title":"Data Type"},"timeline":{"items":{"$ref":"#/components/schemas/TrendsTimelinePoint"},"type":"array","title":"Timeline"},"averages":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Averages"},"regions":{"items":{"$ref":"#/components/schemas/TrendsRegionInterest"},"type":"array","title":"Regions"},"top_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Topics"},"rising_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Topics"},"top_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Queries"},"rising_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Queries"}},"type":"object","required":["query","data_type"],"title":"TrendsSearchResponse","description":"Unified response for GET /api/v1/trends/search.\n\nA single endpoint that dispatches on ``data_type``\n(TIMESERIES, GEO_MAP, GEO_MAP_0, RELATED_TOPICS, RELATED_QUERIES).\nOnly the field set relevant to the requested ``data_type`` is\npopulated; others stay at their empty defaults."},"TrendsTimelinePoint":{"properties":{"date":{"type":"string","title":"Date"},"timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timestamp"},"values":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Values"}},"type":"object","required":["date"],"title":"TrendsTimelinePoint","description":"A single point in interest over time."},"TrendsTimelineValue":{"properties":{"query":{"type":"string","title":"Query"},"value":{"type":"integer","title":"Value"},"extracted_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extracted Value"}},"type":"object","required":["query","value"],"title":"TrendsTimelineValue","description":"A single value in a trends timeline point."},"TrendsTrendingArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["title"],"title":"TrendsTrendingArticle","description":"An article associated with a trending search."},"TrendsTrendingItem":{"properties":{"title":{"type":"string","title":"Title"},"traffic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traffic"},"articles":{"items":{"$ref":"#/components/schemas/TrendsTrendingArticle"},"type":"array","title":"Articles"}},"type":"object","required":["title"],"title":"TrendsTrendingItem","description":"A trending search item."},"TrendsTrendingResponse":{"properties":{"trending":{"items":{"$ref":"#/components/schemas/TrendsTrendingItem"},"type":"array","title":"Trending"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","title":"TrendsTrendingResponse","description":"Response for GET /api/v1/trends/trending."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","title":"VideoResult","description":"A single video search result."},"VideosSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/VideoResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"VideosSearchResponse","description":"Response for GET /api/v1/videos/search."},"AiTableRow":{"properties":{"cells":{"items":{"type":"string"},"type":"array","title":"Cells"}},"type":"object","title":"AiTableRow","description":"One row of a table text_block (ordered cell values)."}}}} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"ScrapeBadger Google Scraper","description":"Dedicated API for scraping Google products (SERP, Maps, News, Hotels, Trends, Jobs, Shopping, Patents, Scholar, Autocomplete, Images, Videos, Finance, AI Mode, Lens, Products).","version":"1.0.0"},"paths":{"/api/v1/search":{"get":{"tags":["Google Search"],"summary":"Google web search","description":"Search Google and get structured results.\n\nTwo response modes:\n\n- **full** (default, 2 credits): complete SERP with organic, ads,\n knowledge graph, People Also Ask, AI Overview, local pack, news,\n related searches, inline videos, etc. ~1.5-2s cold, ~1.5ms warm.\n- **fast** (1 credit, ~40% faster): lite endpoint (`gbv=1`) returning\n only organic results + related searches. Rich blocks (KG, local,\n AI Overview, news) are **not** returned — request ``mode=full`` for\n those. Auto-upgrades to full if ``ai_overview=true`` is set.\n\nFirst request in either mode triggers a browser warmup (~15s) to\nsolve SearchGuard. Subsequent requests reuse the sticky session.","operationId":"google_search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (supports Google operators like site:, inurl:, intitle:)","title":"Q"},"description":"Search query (supports Google operators like site:, inurl:, intitle:)"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code (e.g. us, gb, de, fr)","default":"us","title":"Gl"},"description":"Country code (e.g. us, gb, de, fr)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code (e.g. en, es, fr)","default":"en","title":"Hl"},"description":"Language code (e.g. en, es, fr)"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":10,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset (0, 10, 20...)","default":0,"title":"Start"},"description":"Pagination offset (0, 10, 20...)"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain (e.g. google.com, google.co.uk)","default":"google.com","title":"Domain"},"description":"Google domain (e.g. google.com, google.co.uk)"},{"name":"device","in":"query","required":false,"schema":{"type":"string","description":"desktop or mobile","default":"desktop","title":"Device"},"description":"desktop or mobile"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City-level geo-targeting (e.g. 'New York, USA')","title":"Location"},"description":"City-level geo-targeting (e.g. 'New York, USA')"},{"name":"lr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language restrict (e.g. lang_en)","title":"Lr"},"description":"Language restrict (e.g. lang_en)"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time-based search filter (e.g. qdr:d for past 24h)","title":"Tbs"},"description":"Time-based search filter (e.g. qdr:d for past 24h)"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search (active/off)","default":"off","title":"Safe"},"description":"Safe search (active/off)"},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Encoded location parameter (UULE)","title":"Uule"},"description":"Encoded location parameter (UULE)"},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1,"minimum":0},{"type":"null"}],"description":"Include omitted results (0=show all, 1=filter)","title":"Filter"},"description":"Include omitted results (0=show all, 1=filter)"},{"name":"nfpr","in":"query","required":false,"schema":{"type":"integer","maximum":1,"minimum":0,"description":"Disable auto-correction (1=exact match)","default":0,"title":"Nfpr"},"description":"Disable auto-correction (1=exact match)"},{"name":"cr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country restrict (e.g. countryUS|countryGB)","title":"Cr"},"description":"Country restrict (e.g. countryUS|countryGB)"},{"name":"ludocid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google My Business CID (place ID)","title":"Ludocid"},"description":"Google My Business CID (place ID)"},{"name":"lsig","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Knowledge Graph map view ID","title":"Lsig"},"description":"Knowledge Graph map view ID"},{"name":"kgmid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Knowledge Graph entity ID","title":"Kgmid"},"description":"Knowledge Graph entity ID"},{"name":"si","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cached search parameters","title":"Si"},"description":"Cached search parameters"},{"name":"ibp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Layout control (e.g. gwp;0,7)","title":"Ibp"},"description":"Layout control (e.g. gwp;0,7)"},{"name":"uds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google filter string","title":"Uds"},"description":"Google filter string"},{"name":"ai_overview","in":"query","required":false,"schema":{"type":"boolean","description":"When true, chase Google's deferred AI Overview page_token with a follow-up fetch and merge the result into ai_overview. Adds ~1s and 1 credit when the SERP actually defers the overview.","default":false,"title":"Ai Overview"},"description":"When true, chase Google's deferred AI Overview page_token with a follow-up fetch and merge the result into ai_overview. Adds ~1s and 1 credit when the SERP actually defers the overview."},{"name":"mode","in":"query","required":false,"schema":{"enum":["full","fast"],"type":"string","description":"Response mode. **full** (default): complete SERP with all blocks (organic, ads, knowledge graph, local pack, AI overview, news, related questions, etc). **fast**: lite endpoint via `gbv=1` that returns ONLY organic results + related searches in ~0.6-1s cold (vs 1.5-2s full). Use when you only need organic results and can skip rich features.","default":"full","title":"Mode"},"description":"Response mode. **full** (default): complete SERP with all blocks (organic, ads, knowledge graph, local pack, AI overview, news, related questions, etc). **fast**: lite endpoint via `gbv=1` that returns ONLY organic results + related searches in ~0.6-1s cold (vs 1.5-2s full). Use when you only need organic results and can skip rich features."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/search":{"get":{"tags":["Google Maps"],"summary":"Search Google Maps places","description":"Search Google Maps for places.\n\nReturns place names, ratings, addresses, phone numbers, coordinates,\nhours, and service options.","operationId":"maps_search_api_v1_maps_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (e.g. 'pizza in New York')","title":"Q"},"description":"Search query (e.g. 'pizza in New York')"},{"name":"ll","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"GPS coords @lat,lng,zoom","title":"Ll"},"description":"GPS coords @lat,lng,zoom"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset (increments of 20)","default":0,"title":"Start"},"description":"Pagination offset (increments of 20)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/place":{"get":{"tags":["Google Maps"],"summary":"Get place details","description":"Get detailed place information from Google Maps via the protobuf API.\n\nRequires either ``place_id`` (e.g. ``ChIJN1t_tDeuEmsRUsoyG83frY4``) or\n``data_id`` (e.g. ``0x89c259617ae5b78b:0xe919ce17bb09920e``). The\ndata_id is available in the ``data_id`` field of ``/maps/search``\nresults. Returns name, address, rating, review count, phone, website,\nGPS coordinates, categories, and up to 20 photo URLs.","operationId":"maps_place_api_v1_maps_place_get","parameters":[{"name":"place_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google place ID (ChIJ...)","title":"Place Id"},"description":"Google place ID (ChIJ...)"},{"name":"data_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPlaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/reviews":{"get":{"tags":["Google Maps"],"summary":"Get place reviews","description":"Get reviews for a Google Maps place via the protobuf API.\n\nThe ``data_id`` is the hex pair from ``/maps/search`` results\n(e.g. ``0x89c259617ae5b78b:0xe919ce17bb09920e``). Supports both\noffset-based and token-based pagination.","operationId":"maps_reviews_api_v1_maps_reviews_get","parameters":[{"name":"data_id","in":"query","required":true,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["qualityScore","newestFirst","ratingHigh","ratingLow"],"type":"string","description":"Sort order","default":"qualityScore","title":"Sort By"},"description":"Sort order"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token from previous response","title":"Next Page Token"},"description":"Pagination token from previous response"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Review offset (0-based)","default":0,"title":"Offset"},"description":"Review offset (0-based)"},{"name":"results","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Reviews per page","default":10,"title":"Results"},"description":"Reviews per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsReviewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/photos":{"get":{"tags":["Google Maps"],"summary":"Get place photos","description":"Get photos for a Google Maps place.\n\nPhotos are extracted from the ``/maps/preview/place`` response\n(field ``data[6][37]``). Returns up to 20 photo URLs with\nconfigurable width/height via the Google CDN pattern\n``lh3.googleusercontent.com/gps-cs-s/{id}=w{w}-h{h}-k-no``.","operationId":"maps_photos_api_v1_maps_photos_get","parameters":[{"name":"data_id","in":"query","required":true,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...)","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPhotosResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/maps/posts":{"get":{"tags":["Google Maps"],"summary":"Get business posts","description":"Get Google Business posts / updates for a Maps place.\n\n**Approach**: searches the Google SERP for the business by ``ludocid``\n(derived from the ``data_id``'s low hex part) and parses the knowledge\npanel's ``data-attrid=\"kc:/local:any posts\"`` and\n``kc:/local:merchant_description`` sections. This is the same data\nsurface and other SERP-based scrapers use.\n\nThe Maps protobuf endpoints (``localposts``, ``batchexecute Qt4aBe``)\nreturn empty for virtually all businesses even when they have posts\nin the knowledge panel — Google deprecated those endpoints in favor\nof the SERP knowledge panel.\n\nRequires ``data_id`` (``0x...:0x...``), available from ``/maps/search``\nresults.","operationId":"maps_posts_api_v1_maps_posts_get","parameters":[{"name":"data_id","in":"query","required":false,"schema":{"type":"string","description":"Google Maps data ID (0x...:0x...) — from /maps/search results","title":"Data Id"},"description":"Google Maps data ID (0x...:0x...) — from /maps/search results"},{"name":"place_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google place ID (ChIJ...)","title":"Place Id"},"description":"Google place ID (ChIJ...)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapsPostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/search":{"get":{"tags":["Google News"],"summary":"Search Google News","description":"Search Google News articles via RSS feed.","operationId":"search_news_api_v1_news_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum articles","default":10,"title":"Max Results"},"description":"Maximum articles"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/topics":{"get":{"tags":["Google News"],"summary":"News by topic","description":"Get Google News articles by topic category via RSS.","operationId":"news_by_topic_api_v1_news_topics_get","parameters":[{"name":"topic","in":"query","required":true,"schema":{"enum":["WORLD","BUSINESS","TECHNOLOGY","ENTERTAINMENT","SPORTS","SCIENCE","HEALTH"],"type":"string","description":"Topic name","title":"Topic"},"description":"Topic name"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsTopicsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/trending":{"get":{"tags":["Google News"],"summary":"Trending news","description":"Get trending Google News stories via RSS.","operationId":"trending_news_api_v1_news_trending_get","parameters":[{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Gl"},"description":"Country code"},{"name":"max_results","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Max Results"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hotels/search":{"get":{"tags":["Google Hotels"],"summary":"Search Google Hotels","description":"Search Google Hotels with dates and pricing.\n\nUses browser rendering to access Google Travel Hotels.","operationId":"hotels_search_api_v1_hotels_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Location or hotel name","title":"Q"},"description":"Location or hotel name"},{"name":"check_in","in":"query","required":true,"schema":{"type":"string","description":"Check-in date (YYYY-MM-DD)","title":"Check In"},"description":"Check-in date (YYYY-MM-DD)"},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","description":"Check-out date (YYYY-MM-DD)","title":"Check Out"},"description":"Check-out date (YYYY-MM-DD)"},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Number of adults","default":2,"title":"Adults"},"description":"Number of adults"},{"name":"children","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":0,"description":"Number of children","default":0,"title":"Children"},"description":"Number of children"},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency code","default":"USD","title":"Currency"},"description":"Currency code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: price_low, rating_high, most_reviewed","title":"Sort By"},"description":"Sort: price_low, rating_high, most_reviewed"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum price","title":"Min Price"},"description":"Minimum price"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum price","title":"Max Price"},"description":"Maximum price"},{"name":"hotel_class","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":5,"minimum":2},{"type":"null"}],"description":"Star rating","title":"Hotel Class"},"description":"Star rating"},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token","title":"Next Page Token"},"description":"Pagination token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotelsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hotels/details":{"get":{"tags":["Google Hotels"],"summary":"Hotel details","description":"Get detailed hotel information and pricing.","operationId":"hotel_details_api_v1_hotels_details_get","parameters":[{"name":"property_token","in":"query","required":true,"schema":{"type":"string","description":"Property token from search results","title":"Property Token"},"description":"Property token from search results"},{"name":"check_in","in":"query","required":true,"schema":{"type":"string","description":"Check-in date (YYYY-MM-DD)","title":"Check In"},"description":"Check-in date (YYYY-MM-DD)"},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","description":"Check-out date (YYYY-MM-DD)","title":"Check Out"},"description":"Check-out date (YYYY-MM-DD)"},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Adults"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","default":"USD","title":"Currency"}},{"name":"gl","in":"query","required":false,"schema":{"type":"string","default":"us","title":"Gl"}},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Hl"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotelDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/interest":{"get":{"tags":["Google Trends"],"summary":"Interest over time","description":"Get interest over time for search terms via Google Trends internal API.","operationId":"trends_interest_api_v1_trends_interest_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term(s), comma-separated (max 5)","title":"Q"},"description":"Search term(s), comma-separated (max 5)"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Geographic location (e.g. US, GB)","default":"","title":"Geo"},"description":"Geographic location (e.g. US, GB)"},{"name":"date","in":"query","required":false,"schema":{"type":"string","description":"Time range (e.g. 'now 1-H', 'today 12-m', 'all', or 'YYYY-MM-DD YYYY-MM-DD')","default":"today 12-m","title":"Date"},"description":"Time range (e.g. 'now 1-H', 'today 12-m', 'all', or 'YYYY-MM-DD YYYY-MM-DD')"},{"name":"category","in":"query","required":false,"schema":{"type":"integer","description":"Category filter (0 = all)","default":0,"title":"Category"},"description":"Category filter (0 = all)"},{"name":"gprop","in":"query","required":false,"schema":{"type":"string","description":"Property: web, images, news, froogle, youtube","default":"","title":"Gprop"},"description":"Property: web, images, news, froogle, youtube"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsInterestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/regions":{"get":{"tags":["Google Trends"],"summary":"Interest by region","description":"Get interest by region for a search term.\n\nGoogle's widget has a resolution hierarchy — you can't ask for\ncountry-level data inside a specific country. Passing\n``resolution=auto`` (the default) uses whatever resolution the\nwidget itself returned, which is always valid.","operationId":"trends_regions_api_v1_trends_regions_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term","title":"Q"},"description":"Search term"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Geographic location","default":"","title":"Geo"},"description":"Geographic location"},{"name":"date","in":"query","required":false,"schema":{"type":"string","default":"today 12-m","title":"Date"}},{"name":"resolution","in":"query","required":false,"schema":{"enum":["COUNTRY","REGION","DMA","CITY","auto"],"type":"string","description":"Region granularity. `auto` (default) uses Google's widget default, which is `COUNTRY` for worldwide queries and `REGION` (state/province) for single-country queries. Overriding to `COUNTRY` when `geo` is set returns HTTP 400 from Google — use `REGION`, `DMA`, or `CITY` in that case.","default":"auto","title":"Resolution"},"description":"Region granularity. `auto` (default) uses Google's widget default, which is `COUNTRY` for worldwide queries and `REGION` (state/province) for single-country queries. Overriding to `COUNTRY` when `geo` is set returns HTTP 400 from Google — use `REGION`, `DMA`, or `CITY` in that case."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsRegionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/related":{"get":{"tags":["Google Trends"],"summary":"Related topics & queries","description":"Get related topics and queries for a search term.","operationId":"trends_related_api_v1_trends_related_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term","title":"Q"},"description":"Search term"},{"name":"geo","in":"query","required":false,"schema":{"type":"string","default":"","title":"Geo"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","default":"today 12-m","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsRelatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/trending":{"get":{"tags":["Google Trends"],"summary":"Trending searches","description":"Get trending searches with related queries via Google's TrendsUi.\n\nPrimary path: ``POST /_/TrendsUi/data/batchexecute?rpcids=i0OFE``,\nGoogle's internal RPC backend for the ``/trending`` page. This\nendpoint is **not** protected by SearchGuard / BotGuard — no\ncookies or anti-abuse token required — and returns the trending\nlist **with related queries embedded per trend** (10-25 queries\neach), the same data that powers the trending UI's expanded view.\n\nFallback: ``GET /trending/rss?geo=US`` — also cookieless but\nreturns only title + approximate traffic, no related queries.\n\nVerified working 2026-05-08 (research from a parallel investigation\nconfirmed 30 rapid bursts from one IP all returned 200, payloads\n145 KB - 1 MB).","operationId":"trends_trending_api_v1_trends_trending_get","parameters":[{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"US","title":"Geo"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en-US","title":"Hl"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Hours-back window for the trending list. Google supports 24, 48, 168 (= 1 week).","default":24,"title":"Hours"},"description":"Hours-back window for the trending list. Google supports 24, 48, 168 (= 1 week)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/autocomplete":{"get":{"tags":["Google Trends"],"summary":"Trends topic autocomplete","description":"Return categorized topic entities from the Google Trends autocomplete API.\n\nUnlike Google Search autocomplete (which returns flat keyword suggestions),\nthis endpoint returns Knowledge Graph entities each tagged with a `type`\nand a machine identifier (`mid`) — the same data that powers the Trends\nUI's \"Search topic\" picker. Each entry includes a direct link into the\nTrends explore view for that topic.","operationId":"trends_autocomplete_api_v1_trends_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Query prefix to resolve into Trends topics","title":"Q"},"description":"Query prefix to resolve into Trends topics"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en-US","title":"Hl"},"description":"Language code"},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"Timezone offset in minutes (Google format)","default":"0","title":"Tz"},"description":"Timezone offset in minutes (Google format)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsAutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/search":{"get":{"tags":["Google Trends"],"summary":"Google Trends — unified search","description":"Unified Google Trends dispatcher. Pick the shape via `data_type`.","operationId":"trends_search_api_v1_trends_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search term(s). Up to 5 comma-separated terms for TIMESERIES / GEO_MAP; single term for GEO_MAP_0 / RELATED_TOPICS / RELATED_QUERIES. Also accepts a topic MID.","title":"Q"},"description":"Search term(s). Up to 5 comma-separated terms for TIMESERIES / GEO_MAP; single term for GEO_MAP_0 / RELATED_TOPICS / RELATED_QUERIES. Also accepts a topic MID."},{"name":"data_type","in":"query","required":false,"schema":{"enum":["TIMESERIES","GEO_MAP","GEO_MAP_0","RELATED_TOPICS","RELATED_QUERIES"],"type":"string","description":"Dispatch on: TIMESERIES (interest over time), GEO_MAP (compared breakdown, multi-query), GEO_MAP_0 (interest by region, single query), RELATED_TOPICS (top + rising topics), RELATED_QUERIES (top + rising queries).","default":"TIMESERIES","title":"Data Type"},"description":"Dispatch on: TIMESERIES (interest over time), GEO_MAP (compared breakdown, multi-query), GEO_MAP_0 (interest by region, single query), RELATED_TOPICS (top + rising topics), RELATED_QUERIES (top + rising queries)."},{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country / region code (e.g. US, GB, US-CA).","default":"","title":"Geo"},"description":"Country / region code (e.g. US, GB, US-CA)."},{"name":"date","in":"query","required":false,"schema":{"type":"string","description":"Time range.","default":"today 12-m","title":"Date"},"description":"Time range."},{"name":"cat","in":"query","required":false,"schema":{"type":"integer","description":"Category filter ID (0 = all).","default":0,"title":"Cat"},"description":"Category filter ID (0 = all)."},{"name":"gprop","in":"query","required":false,"schema":{"type":"string","description":"Property filter: \"\" (web), \"images\", \"news\", \"froogle\", \"youtube\".","default":"","title":"Gprop"},"description":"Property filter: \"\" (web), \"images\", \"news\", \"froogle\", \"youtube\"."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geo resolution for GEO_MAP / GEO_MAP_0: COUNTRY / REGION / DMA / CITY. Omit to use the widget's own default.","title":"Region"},"description":"Geo resolution for GEO_MAP / GEO_MAP_0: COUNTRY / REGION / DMA / CITY. Omit to use the widget's own default."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `hl`. Defaults to en-US.","title":"Language"},"description":"Alias for `hl`. Defaults to en-US."},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"Timezone offset in minutes.","default":"0","title":"Tz"},"description":"Timezone offset in minutes."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/trends/trending-now":{"get":{"tags":["Google Trends"],"summary":"Google Trends — current trending searches","description":"Current trending searches with the full Google Trends UI filters.\n\n``geo`` honored by the upstream feed. ``category`` is passed through\nas ``cat=``; when the feed ignores it we still return the\nbase result set so callers get *something* useful. ``status`` and\n``sort`` are applied client-side against the parsed result list.","operationId":"trends_trending_now_api_v1_trends_trending_now_get","parameters":[{"name":"geo","in":"query","required":false,"schema":{"type":"string","description":"Country code (e.g. ``US``, ``LT``, ``GB``).","default":"US","title":"Geo"},"description":"Country code (e.g. ``US``, ``LT``, ``GB``)."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Look-back window in hours. Google's UI supports 4, 24, 48, 168. Passed through to the upstream feed; the public RSS currently ignores this filter.","default":24,"title":"Hours"},"description":"Look-back window in hours. Google's UI supports 4, 24, 48, 168. Passed through to the upstream feed; the public RSS currently ignores this filter."},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Category filter. Accepts Google's letter codes (``b`` business, ``e`` entertainment, ``m`` health, ``t`` sci/tech, ``s`` sports, ``h`` top stories) or the friendly aliases (``business``, ``entertainment``, ``health``, ``sci_tech``/``technology``, ``sports``, ``top_stories``). ``all`` (default) returns every category.","default":"all","title":"Category"},"description":"Category filter. Accepts Google's letter codes (``b`` business, ``e`` entertainment, ``m`` health, ``t`` sci/tech, ``s`` sports, ``h`` top stories) or the friendly aliases (``business``, ``entertainment``, ``health``, ``sci_tech``/``technology``, ``sports``, ``top_stories``). ``all`` (default) returns every category."},{"name":"status","in":"query","required":false,"schema":{"enum":["all","active"],"type":"string","description":"Trend state. ``active`` keeps only entries with a non-zero search volume (still surging); ``all`` (default) returns every entry including ended ones.","default":"all","title":"Status"},"description":"Trend state. ``active`` keeps only entries with a non-zero search volume (still surging); ``all`` (default) returns every entry including ended ones."},{"name":"sort","in":"query","required":false,"schema":{"enum":["relevance","search_volume","title","recency"],"type":"string","description":"Sort order. ``relevance`` (default) keeps Google's ordering; ``search_volume`` orders by parsed traffic descending; ``title`` sorts alphabetically; ``recency`` falls back to relevance when the feed omits publication timestamps.","default":"relevance","title":"Sort"},"description":"Sort order. ``relevance`` (default) keeps Google's ordering; ``search_volume`` orders by parsed traffic descending; ``title`` sorts alphabetically; ``recency`` falls back to relevance when the feed omits publication timestamps."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en-US","title":"Hl"},"description":"Language code."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsTrendingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/search":{"get":{"tags":["Google Jobs"],"summary":"Search Google Jobs","description":"Search Google Jobs.\n\nTwo data sources are available via ``mode``:\n\n- ``mode=rpc`` (default) — Google's own Careers SPA RPC. Very fast\n (~300 ms), richly structured (title, apply URL, company,\n locations, responsibilities, qualifications, posted-at,\n experience levels). Scope limited to Google's openings.\n- ``mode=serp`` — public Google Jobs SERP (aggregator).","operationId":"jobs_search_api_v1_jobs_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Job title / keywords / combined query.","title":"Q"},"description":"Job title / keywords / combined query."},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City / state / region — concatenated with `q` before sending to Google.","title":"Location"},"description":"City / state / region — concatenated with `q` before sending to Google."},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code (ISO 3166 alpha-2).","default":"us","title":"Gl"},"description":"Country code (ISO 3166 alpha-2)."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `gl`; when present overrides it.","title":"Country"},"description":"Alias for `gl`; when present overrides it."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en","title":"Hl"},"description":"Language code."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for `hl`; when present overrides it.","title":"Language"},"description":"Alias for `hl`; when present overrides it."},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain for locale-specific results (`google.com`, `google.co.uk`, `google.co.in`, …).","default":"google.com","title":"Domain"},"description":"Google domain for locale-specific results (`google.com`, `google.co.uk`, `google.co.in`, …)."},{"name":"job_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["FULLTIME","PARTTIME","CONTRACTOR","INTERN"],"type":"string"},{"type":"null"}],"description":"Employment type — translated into a `chips` filter.","title":"Job Type"},"description":"Employment type — translated into a `chips` filter."},{"name":"date_posted","in":"query","required":false,"schema":{"anyOf":[{"enum":["today","3days","week","month"],"type":"string"},{"type":"null"}],"description":"Posted-date window — translated into a `chips` filter.","title":"Date Posted"},"description":"Posted-date window — translated into a `chips` filter."},{"name":"ltype","in":"query","required":false,"schema":{"anyOf":[{"enum":["remote","hybrid","onsite","work_from_home"],"type":"string"},{"type":"null"}],"description":"Work arrangement — maps onto Google's remote/hybrid/onsite chips.","title":"Ltype"},"description":"Work arrangement — maps onto Google's remote/hybrid/onsite chips."},{"name":"chips","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Raw Google chip-filter string (comma-separated). Merged with any structured filters (`job_type`, `date_posted`, `ltype`).","title":"Chips"},"description":"Raw Google chip-filter string (comma-separated). Merged with any structured filters (`job_type`, `date_posted`, `ltype`)."},{"name":"uds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque Google filter token harvested from a prior Jobs search URL.","title":"Uds"},"description":"Opaque Google filter token harvested from a prior Jobs search URL."},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google's UULE-encoded location (e.g. `w+CAIQIFJlbGF5IFN0YXRlcw==`).","title":"Uule"},"description":"Google's UULE-encoded location (e.g. `w+CAIQIFJlbGF5IFN0YXRlcw==`)."},{"name":"lrad","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search radius around the location (Google accepts a distance in miles).","title":"Lrad"},"description":"Search radius around the location (Google accepts a distance in miles)."},{"name":"next_page_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque token from the previous response's `pagination.next`.","title":"Next Page Token"},"description":"Opaque token from the previous response's `pagination.next`."},{"name":"mode","in":"query","required":false,"schema":{"enum":["rpc","serp"],"type":"string","description":"Data source. ``rpc`` (default, ~300 ms) replays Google's own ``r06xKb`` batchexecute RPC on the Google Careers portal — clean JSON, 20 roles per page, scope = Google's internal openings. ``serp`` uses the public Jobs search vertical (``udm=8``, SERP-embedded, 3rd-party aggregator) and costs more latency because Google gates it behind JS.","default":"rpc","title":"Mode"},"description":"Data source. ``rpc`` (default, ~300 ms) replays Google's own ``r06xKb`` batchexecute RPC on the Google Careers portal — clean JSON, 20 roles per page, scope = Google's internal openings. ``serp`` uses the public Jobs search vertical (``udm=8``, SERP-embedded, 3rd-party aggregator) and costs more latency because Google gates it behind JS."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/search":{"get":{"tags":["Google Shopping"],"summary":"Search Google Shopping","description":"Search Google Shopping for products.\n\nRequires browser rendering due to dynamic JS-loaded content.","operationId":"shopping_search_api_v1_shopping_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Product search query","title":"Q"},"description":"Product search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum price","title":"Min Price"},"description":"Minimum price"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum price","title":"Max Price"},"description":"Maximum price"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: price_low, price_high, rating, reviews","title":"Sort By"},"description":"Sort: price_low, price_high, rating, reviews"},{"name":"free_shipping","in":"query","required":false,"schema":{"type":"boolean","description":"Free shipping filter","default":false,"title":"Free Shipping"},"description":"Free shipping filter"},{"name":"on_sale","in":"query","required":false,"schema":{"type":"boolean","description":"On sale filter","default":false,"title":"On Sale"},"description":"On sale filter"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/product/click":{"get":{"tags":["Google Shopping"],"summary":"Resolve merchant URL for a Google Shopping product","description":"Resolve the real merchant URL for a product from Google Shopping.\n\nGoogle has removed direct merchant links from organic Shopping HTML,\nso the public /shopping/search response can only return the product\ntitle + price + source. This endpoint takes a product title (and\noptionally the source merchant) and uses Google's \"I'm Feeling Lucky\"\nredirect (`btnI=1`) to materialize the top merchant URL, mirroring\nthe per-product enrichment pattern exposes via\n`immersive product link`.\n\nWhen `source` is passed, the query is scoped with `site:{domain}`\nso the resolved URL lands on the exact merchant whose price was\nshown in the card (rather than a generic top organic match).\n\nTypical usage:\n 1. Call GET /shopping/search?q=laptop\n 2. Pick a product from the results\n 3. Call the product's click_link field to get the merchant URL\n\nCredits: 1 per call (one secondary scrape via curl_cffi).","operationId":"shopping_product_click_api_v1_shopping_product_click_get","parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string","description":"Exact product title from a search result","title":"Title"},"description":"Exact product title from a search result"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Merchant source name from the shopping card (e.g. 'Walmart', 'Best Buy'). Forces the resolved URL to that merchant via site: operator.","title":"Source"},"description":"Merchant source name from the shopping card (e.g. 'Walmart', 'Best Buy'). Forces the resolved URL to that merchant via site: operator."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Original search query (optional, improves disambiguation)","title":"Q"},"description":"Original search query (optional, improves disambiguation)"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stable product_id from the /shopping/search result","title":"Product Id"},"description":"Stable product_id from the /shopping/search result"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingClickResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/product":{"get":{"tags":["Google Shopping"],"summary":"Product details","description":"Get detailed product information with seller offers.","operationId":"shopping_product_api_v1_shopping_product_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID from search results","title":"Product Id"},"description":"Product ID from search results"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","default":"us","title":"Gl"}},{"name":"hl","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Hl"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/patents/search":{"get":{"tags":["Google Patents"],"summary":"Search Google Patents","description":"Search Google Patents using the XHR API.","operationId":"search_patents_api_v1_patents_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (supports Boolean logic)","title":"Q"},"description":"Search query (supports Boolean logic)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number","default":0,"title":"Page"},"description":"Page number"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":10,"title":"Num"},"description":"Results per page"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["new","old"],"type":"string"},{"type":"null"}],"description":"Sort order","title":"Sort"},"description":"Sort order"},{"name":"inventor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inventor name(s)","title":"Inventor"},"description":"Inventor name(s)"},{"name":"assignee","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assignee name(s)","title":"Assignee"},"description":"Assignee name(s)"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country code(s)","title":"Country"},"description":"Country code(s)"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"enum":["ENGLISH","GERMAN","CHINESE","FRENCH","JAPANESE","KOREAN","SPANISH"],"type":"string"},{"type":"null"}],"description":"Patent language","title":"Language"},"description":"Patent language"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["GRANT","APPLICATION"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"patent_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["PATENT","DESIGN"],"type":"string"},{"type":"null"}],"title":"Patent Type"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Before date (YYYYMMDD)","title":"Before"},"description":"Before date (YYYYMMDD)"},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"After date (YYYYMMDD)","title":"After"},"description":"After date (YYYYMMDD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/patents/detail":{"get":{"tags":["Google Patents"],"summary":"Get patent details","description":"Get detailed patent information using the XHR endpoint (returns HTML).","operationId":"get_patent_detail_api_v1_patents_detail_get","parameters":[{"name":"patent_id","in":"query","required":true,"schema":{"type":"string","description":"Patent/publication number (e.g. US10000000B2)","title":"Patent Id"},"description":"Patent/publication number (e.g. US10000000B2)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/search":{"get":{"tags":["Google Scholar"],"summary":"Search Google Scholar","description":"Search Google Scholar for scholarly articles using direct HTTP.","operationId":"search_scholar_api_v1_scholar_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query for scholarly articles","title":"Q"},"description":"Search query for scholarly articles"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"as_ylo","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Year from (e.g. 2020)","title":"As Ylo"},"description":"Year from (e.g. 2020)"},{"name":"as_yhi","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Year to (e.g. 2024)","title":"As Yhi"},"description":"Year to (e.g. 2024)"},{"name":"as_sdt","in":"query","required":false,"schema":{"type":"string","description":"Search type: 0=exclude patents, 7=include patents","default":"0","title":"As Sdt"},"description":"Search type: 0=exclude patents, 7=include patents"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based)","default":0,"title":"Page"},"description":"Page number (0-based)"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Results per page (max 20)","default":10,"title":"Num"},"description":"Results per page (max 20)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/profiles":{"get":{"tags":["Google Scholar"],"summary":"Search Google Scholar author profiles","description":"Search Google Scholar for author profiles by name.\n\nGoogle auth-gates the direct ``view_op=search_authors`` endpoint for\nunauthenticated clients, so this handler falls back to a regular\n``/scholar?q=`` search and harvests unique\n``/citations?user=`` links from each result's author byline\n(``gs_a`` div). The response schema is unchanged — each\n``ScholarProfile`` carries ``author_id``, ``name``, and ``link``.\nAffiliation, email domain, cited-by count, interests, and thumbnail\nare intentionally left ``None`` because a search page doesn't carry\nthat metadata; callers who want them should pipe each ``author_id``\nthrough ``/v1/google/scholar/author`` for the full profile.\n\n``after_author`` / ``before_author`` pagination tokens are accepted\nfor API compatibility but ignored, since the fallback uses the main\nScholar search (which paginates via ``page=N``) rather than the\ngated author-search view.","operationId":"scholar_profiles_api_v1_scholar_profiles_get","parameters":[{"name":"mauthors","in":"query","required":true,"schema":{"type":"string","description":"Author name query (e.g. 'Geoffrey Hinton')","title":"Mauthors"},"description":"Author name query (e.g. 'Geoffrey Hinton')"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"after_author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token for the next page","title":"After Author"},"description":"Pagination token for the next page"},{"name":"before_author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token for the previous page","title":"Before Author"},"description":"Pagination token for the previous page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarProfilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/author":{"get":{"tags":["Google Scholar"],"summary":"Get Google Scholar author profile","description":"Get detailed Google Scholar author profile including articles, stats, and co-authors.","operationId":"scholar_author_api_v1_scholar_author_get","parameters":[{"name":"author_id","in":"query","required":true,"schema":{"type":"string","description":"Scholar user ID (the `user` query parameter)","title":"Author Id"},"description":"Scholar user ID (the `user` query parameter)"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"cstart","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Articles pagination offset","default":0,"title":"Cstart"},"description":"Articles pagination offset"},{"name":"pagesize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Articles per page","default":20,"title":"Pagesize"},"description":"Articles per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarAuthorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/author/citation":{"get":{"tags":["Google Scholar"],"summary":"Get citation chart data for a Scholar author","description":"Return the citations-per-year chart for a Google Scholar author.","operationId":"scholar_author_citation_api_v1_scholar_author_citation_get","parameters":[{"name":"author_id","in":"query","required":true,"schema":{"type":"string","description":"Scholar user ID","title":"Author Id"},"description":"Scholar user ID"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarAuthorCitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scholar/cite":{"get":{"tags":["Google Scholar"],"summary":"Get citation formats for a Scholar paper","description":"Return MLA, APA, Chicago, Harvard, and Vancouver citation formats.\n\n**Currently returns HTTP 501.** Google's cite-dialog endpoint\n(``/scholar?q=info::scholar.google.com/&output=cite``)\nreturns ``HTTP 403 Forbidden`` for every unauthenticated client as of\nlate 2026 — the dialog is only served to browsers that have an\nactive Scholar JS session established via a prior `/scholar` page\nload. Working around that requires a stateful browser session which\nis not cost-effective for a single citation lookup.\n\n**Recommended workaround:** call ``/v1/google/scholar/search`` for\nthe paper and build a citation string client-side from the fields\nit already returns: ``title``, ``authors`` (list), ``publication_info``\n(which contains journal + year), and ``link``. That's enough to\nassemble MLA / APA / Chicago / Harvard / Vancouver formats without\nmaking a second HTTP hop.\n\nTracked in scrape-badger/scrapebadger#135 follow-up work; this\nendpoint will be re-enabled when we add a browser-session-backed\nfetch path.","operationId":"scholar_cite_api_v1_scholar_cite_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Cluster ID from a search result (e.g. '5Gohgn6QFikJ')","title":"Q"},"description":"Cluster ID from a search result (e.g. '5Gohgn6QFikJ')"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarCiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/autocomplete/":{"get":{"tags":["Google Autocomplete"],"summary":"Google search suggestions","description":"Get Google search autocomplete suggestions via the JSON API.\n\nReturns up to 10 search suggestions ordered by relevance.","operationId":"get_autocomplete_api_v1_autocomplete__get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query to get suggestions for","title":"Q"},"description":"Search query to get suggestions for"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/search":{"get":{"tags":["Google Images"],"summary":"Search Google Images","description":"Search Google Images for visual content.","operationId":"search_images_api_v1_images_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Image search query","title":"Q"},"description":"Image search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time/filter string (e.g. qdr:d)","title":"Tbs"},"description":"Time/filter string (e.g. qdr:d)"},{"name":"imgsz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image size: l=large, m=medium, i=icon, xXl, etc.","title":"Imgsz"},"description":"Image size: l=large, m=medium, i=icon, xXl, etc."},{"name":"imgcolor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image color: color, gray, transparent, red, orange, etc.","title":"Imgcolor"},"description":"Image color: color, gray, transparent, red, orange, etc."},{"name":"imgtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image type: face, photo, clipart, lineart, animated","title":"Imgtype"},"description":"Image type: face, photo, clipart, lineart, animated"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search: off, active","default":"off","title":"Safe"},"description":"Safe search: off, active"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based, each page = 20 results)","default":0,"title":"Page"},"description":"Page number (0-based, each page = 20 results)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagesSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/videos/search":{"get":{"tags":["Google Videos"],"summary":"Search Google Videos","description":"Search Google for video results.","operationId":"search_videos_api_v1_videos_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Video search query","title":"Q"},"description":"Video search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"tbs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time filter (e.g. qdr:d=past day, qdr:w=past week, qdr:m=past month)","title":"Tbs"},"description":"Time filter (e.g. qdr:d=past day, qdr:w=past week, qdr:m=past month)"},{"name":"safe","in":"query","required":false,"schema":{"type":"string","description":"Safe search: off, active","default":"off","title":"Safe"},"description":"Safe search: off, active"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (0-based, each page = 10 results)","default":0,"title":"Page"},"description":"Page number (0-based, each page = 10 results)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideosSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/quote":{"get":{"tags":["Google Finance"],"summary":"Get Google Finance stock quote","description":"Get a stock or index quote from Google Finance.","operationId":"get_finance_quote_api_v1_finance_quote_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Stock ticker and exchange (e.g. \"AAPL:NASDAQ\", \"GOOGL:NASDAQ\", \"BTC-USD\")","title":"Q"},"description":"Stock ticker and exchange (e.g. \"AAPL:NASDAQ\", \"GOOGL:NASDAQ\", \"BTC-USD\")"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinanceQuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-mode/search":{"get":{"tags":["Google AI Mode"],"summary":"Google AI Mode search","description":"Get AI-generated search results from Google AI Mode.\n\n**Currently returns HTTP 501.** As of 2026 Google has repurposed\nthe historical ``udm=50`` parameter — it now opens the Visual Search\nhistory prompt, not a dedicated AI Mode surface. There is no\nstandalone ``/search?udm=50`` URL that returns AI-only content\nanymore; AI Overview blocks are rendered inside regular SERPs\ninstead, gated on query + user + geolocation signals.\n\n**Recommended workaround:** call\n``/v1/google/search?q=&ai_overview=true``. The main SERP\nendpoint already parses the ``ai_overview`` block when Google\nincludes one in the response, and the ``ai_overview=true`` flag\nautomatically chases the deferred ``page_token`` follow-up fetch\nwhen Google serves the overview lazily. That's the exact data this\nendpoint was originally meant to return.\n\nThis route remains registered so the product catalog, docs, and\nSDKs don't break — it will be re-enabled if/when Google ships a\nstable dedicated AI Mode surface again.","operationId":"search_ai_mode_api_v1_ai_mode_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query for AI-generated response","title":"Q"},"description":"Search query for AI-generated response"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"include_html","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Include the raw answer_html body (can be 100s of KB). Set false for just text_blocks + markdown.","title":"Include Html"},"description":"Include the raw answer_html body (can be 100s of KB). Set false for just text_blocks + markdown."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiModeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lens/search":{"get":{"tags":["Google Lens"],"summary":"Google Lens visual search","description":"Search Google Lens by image URL for visually similar results.","operationId":"search_lens_api_v1_lens_search_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public URL of the image to search visually","title":"Url"},"description":"Public URL of the image to search visually"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/local/search":{"get":{"tags":["Google Local"],"summary":"Google Local Pack search","description":"Return Google Local Pack listings for a query.\n\nUnlike ``/v1/google/maps/search`` (which targets the Maps Protobuf API and\nis keyed by ``data_id``), this endpoint follows the Web SERP ``tbm=lcl``\nmode — the same data that populates the \"Places\" block inside regular\nsearch results. Use it when you care about ranking relative to a SERP\nquery (e.g. SEO/local-SEO research), not when you need full place\nmetadata.","operationId":"local_search_api_v1_local_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query (e.g. 'pizza in New York')","title":"Q"},"description":"Search query (e.g. 'pizza in New York')"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain","default":"google.com","title":"Domain"},"description":"Google domain"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City-level geo-targeting (e.g. 'New York, USA')","title":"Location"},"description":"City-level geo-targeting (e.g. 'New York, USA')"},{"name":"uule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"UULE encoded location","title":"Uule"},"description":"UULE encoded location"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":20,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLocalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/detail":{"get":{"tags":["Google Products"],"summary":"Google immersive product detail","description":"Get deep product details from Google's immersive product page.\n\nTwo-step fetch: render the Shopping SERP for ``q`` to extract\nsession-bound tokens, then call ``/async/oapv`` with them. Returns\n404 when the product isn't on the SERP — the caller's query has to\nsurface the tile because the tokens are session-scoped.\n\nResponse time: ~3 s warm (cached SERP), ~6 s cold (SERP + RPC).\nCredits: 5 per call (matches the Shopping product-detail cost).","operationId":"get_product_detail_api_v1_products_detail_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Google Shopping product identifier (``gpcid``). Returned as ``product_id``/``gpcid`` on ``/shopping/search`` tiles.","title":"Product Id"},"description":"Google Shopping product identifier (``gpcid``). Returned as ``product_id``/``gpcid`` on ``/shopping/search`` tiles."},{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Original search query that surfaced the product. Required by Google's ``/async/oapv`` RPC — the page-level ``ei``/``xsrf`` and per-tile ``oapvfc`` tokens are extracted from the SERP Google renders for this exact query, so the product must be discoverable via this query.","title":"Q"},"description":"Original search query that surfaced the product. Required by Google's ``/async/oapv`` RPC — the page-level ``ei``/``xsrf`` and per-tile ``oapvfc`` tokens are extracted from the SERP Google renders for this exact query, so the product must be discoverable via this query."},{"name":"gl","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country code (ISO 3166 alpha-2). Defaults to the country implied by ``domain`` (e.g. ``google.com.au`` → ``au``), falling back to ``us`` when domain doesn't carry a country hint.","title":"Gl"},"description":"Country code (ISO 3166 alpha-2). Defaults to the country implied by ``domain`` (e.g. ``google.com.au`` → ``au``), falling back to ``us`` when domain doesn't carry a country hint."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en","title":"Hl"},"description":"Language code."},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain (\"google.com\" / \"google.co.uk\" / …) — used to localise the SERP render that produces the session tokens.","default":"google.com","title":"Domain"},"description":"Google domain (\"google.com\" / \"google.co.uk\" / …) — used to localise the SERP render that produces the session tokens."},{"name":"include_offers","in":"query","required":false,"schema":{"type":"boolean","description":"When true, return the full merchant-offer list with deep product URLs for every merchant Google ships an offer-block for. Offers come from the primary oapv response (top ~5 panel merchants: DICK'S, Kohl's, Zappos, etc.) plus a parallel paginated fan-out of ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets sori=5..60 — which surfaces an additional ~50 sellers including GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club, etc. (+5 parallel RPCs, ~1 s wall-clock).","default":false,"title":"Include Offers"},"description":"When true, return the full merchant-offer list with deep product URLs for every merchant Google ships an offer-block for. Offers come from the primary oapv response (top ~5 panel merchants: DICK'S, Kohl's, Zappos, etc.) plus a parallel paginated fan-out of ``/async/oapv`` with ``async_context=MORE_STORES`` at offsets sori=5..60 — which surfaces an additional ~50 sellers including GOAT, eBay sub-sellers, Macy's, StockX, Poshmark, Flight Club, etc. (+5 parallel RPCs, ~1 s wall-clock)."},{"name":"include_variants","in":"query","required":false,"schema":{"type":"boolean","description":"When true, also fetch size/colour variants via ``/async/toy_v`` (+1 secondary RPC, ~1 s).","default":false,"title":"Include Variants"},"description":"When true, also fetch size/colour variants via ``/async/toy_v`` (+1 secondary RPC, ~1 s)."},{"name":"resolve_deep_urls","in":"query","required":false,"schema":{"type":"boolean","description":"When true (only meaningful with ``include_offers=true``), browser-render the Shopping SERP so additional merchant deep URLs surface from the rendered HTML. Best-effort: catalog-feed retailers (DSW / Famous Footwear / Shoe Carnival / Myer / rebel) get deep URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy, etc.) still get their homepage because their click-through URLs are signed by Google's aclk redirect and can't be reproduced server-side. Adds ~5–8 s latency.","default":false,"title":"Resolve Deep Urls"},"description":"When true (only meaningful with ``include_offers=true``), browser-render the Shopping SERP so additional merchant deep URLs surface from the rendered HTML. Best-effort: catalog-feed retailers (DSW / Famous Footwear / Shoe Carnival / Myer / rebel) get deep URLs; paid-Shopping-Ads merchants (Zappos, GOAT, Academy, etc.) still get their homepage because their click-through URLs are signed by Google's aclk redirect and can't be reproduced server-side. Adds ~5–8 s latency."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shorts/search":{"get":{"tags":["Google Shorts"],"summary":"Google Shorts search","description":"Return Google Shorts — short-form vertical videos surfaced in search.\n\nTriggers Google's Shorts mode via `udm=39` and parses out the\n`short_videos_results` carousel. Mostly returns YouTube Shorts but also\nincludes TikToks, Facebook Reels, and other short-form sources when\nGoogle surfaces them.","operationId":"shorts_search_api_v1_shorts_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code","default":"us","title":"Gl"},"description":"Country code"},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code","default":"en","title":"Hl"},"description":"Language code"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Google domain","default":"google.com","title":"Domain"},"description":"Google domain"},{"name":"num","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page","default":20,"title":"Num"},"description":"Results per page"},{"name":"start","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Start"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleShortsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flights/search":{"get":{"tags":["Google Flights"],"summary":"Google Flights search","description":"Search Google Flights.\n\nReturns ``best_flights`` (Google's top 4 picks) and ``other_flights``\n(the rest of the SSR-rendered result set), plus ``price_insights``\nwhen Google flags a typical-price range. Each offer carries a\n``booking_url`` deep link (built from the ``tfs`` token) that pre-selects\nthat flight, and the response carries a ``search_url`` for the whole\nsearch.\n\nNote: Google Flights renders a \"best picks\" preview in SSR (~6-8\nflights per direction for round-trips, 3-4 for one-way).","operationId":"flights_search_api_v1_flights_search_get","parameters":[{"name":"departure_id","in":"query","required":true,"schema":{"type":"string","description":"Departure IATA (e.g. `JFK`) or airport ID.","title":"Departure Id"},"description":"Departure IATA (e.g. `JFK`) or airport ID."},{"name":"arrival_id","in":"query","required":true,"schema":{"type":"string","description":"Arrival IATA (e.g. `LHR`) or airport ID.","title":"Arrival Id"},"description":"Arrival IATA (e.g. `LHR`) or airport ID."},{"name":"outbound_date","in":"query","required":true,"schema":{"type":"string","description":"Outbound date — `YYYY-MM-DD`.","title":"Outbound Date"},"description":"Outbound date — `YYYY-MM-DD`."},{"name":"return_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Return date (`YYYY-MM-DD`) — required for `trip_type=round_trip`.","title":"Return Date"},"description":"Return date (`YYYY-MM-DD`) — required for `trip_type=round_trip`."},{"name":"trip_type","in":"query","required":false,"schema":{"enum":["one_way","round_trip","multi_city"],"type":"string","description":"`round_trip` / `one_way` / `multi_city`.","default":"round_trip","title":"Trip Type"},"description":"`round_trip` / `one_way` / `multi_city`."},{"name":"adults","in":"query","required":false,"schema":{"type":"integer","maximum":9,"minimum":1,"description":"Adult passengers.","default":1,"title":"Adults"},"description":"Adult passengers."},{"name":"children","in":"query","required":false,"schema":{"type":"integer","maximum":8,"minimum":0,"description":"Children passengers.","default":0,"title":"Children"},"description":"Children passengers."},{"name":"infants_in_seat","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":0,"default":0,"title":"Infants In Seat"}},{"name":"infants_on_lap","in":"query","required":false,"schema":{"type":"integer","maximum":4,"minimum":0,"default":0,"title":"Infants On Lap"}},{"name":"travel_class","in":"query","required":false,"schema":{"enum":["economy","premium_economy","business","first"],"type":"string","description":"Cabin class.","default":"economy","title":"Travel Class"},"description":"Cabin class."},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"ISO-4217 currency code.","default":"USD","title":"Currency"},"description":"ISO-4217 currency code."},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code.","default":"us","title":"Gl"},"description":"Country code."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language code.","default":"en","title":"Hl"},"description":"Language code."},{"name":"stops","in":"query","required":false,"schema":{"enum":["any","nonstop","one_stop","two_stops"],"type":"string","description":"Max stops filter — applied client-side.","default":"any","title":"Stops"},"description":"Max stops filter — applied client-side."},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Max price filter — applied client-side.","title":"Max Price"},"description":"Max price filter — applied client-side."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleFlightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health":{"get":{"summary":"Api Health","description":"API health check.","operationId":"api_health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/flights/booking_options":{"get":{"tags":["Google Flights"],"summary":"Google Flights booking options for a selected itinerary","description":"Return the provider booking list (airline + OTAs) for a selected flight.\n\nThe provider list is rendered client-side, so this does a JS render of the\nGoogle Flights ``/booking`` page (slower/pricier than search). Each option\nhas the provider name and price; the actual per-provider booking links open\nfrom the returned ``booking_url`` (Google exposes them only as JS actions,\nnot stable URLs).\n\nReturns an empty ``booking_options`` for an incomplete round-trip selection\n(one that has not chosen a return leg) — follow that offer's ``booking_url``\nto pick a return first.","operationId":"flights_booking_options_api_v1_flights_booking_options_get","parameters":[{"name":"selection_token","in":"query","required":true,"schema":{"type":"string","description":"`selection_token` from a `/flights/search` offer (one-way or fully-selected itinerary).","title":"Selection Token"},"description":"`selection_token` from a `/flights/search` offer (one-way or fully-selected itinerary)."},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"ISO-4217 currency code.","default":"USD","title":"Currency"},"description":"ISO-4217 currency code."},{"name":"gl","in":"query","required":false,"schema":{"type":"string","description":"Country code.","default":"us","title":"Gl"},"description":"Country code."},{"name":"hl","in":"query","required":false,"schema":{"type":"string","description":"Language for the returned `booking_url`.","default":"en","title":"Hl"},"description":"Language for the returned `booking_url`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlightBookingOptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title","link"],"title":"AdResult","description":"A sponsored/ad result."},"AiModeResponse":{"properties":{"text_blocks":{"items":{"$ref":"#/components/schemas/AiTextBlock"},"type":"array","title":"Text Blocks"},"references":{"items":{"$ref":"#/components/schemas/AiReference"},"type":"array","title":"References"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Markdown","description":"Compact Markdown rendering of the whole answer."},"answer_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer Html","description":"Raw answer body HTML (script/style stripped). Omitted when include_html=false."}},"type":"object","required":["query"],"title":"AiModeResponse","description":"Response for GET /api/v1/ai-mode/search."},"AiOverview":{"properties":{"text_blocks":{"items":{"$ref":"#/components/schemas/AiOverviewTextBlock"},"type":"array","title":"Text Blocks"},"references":{"items":{"$ref":"#/components/schemas/AiOverviewReference"},"type":"array","title":"References"},"page_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Token","description":"Continuation token for the deferred AI Overview fetch. Non-null when Google embeds only a placeholder in the main SERP response."},"deferred":{"type":"boolean","title":"Deferred","description":"True when the AI Overview was present as a deferred block.","default":false}},"type":"object","title":"AiOverview","description":"Google AI Overview (AI-generated summary).\n\nGoogle increasingly serves the AI Overview as a **deferred** block — the\ninitial SERP HTML contains only a placeholder plus a `page_token` that\nthe client has to POST back to retrieve the actual content. When that\nhappens, the SERP parser populates `page_token` and leaves\n`text_blocks`/`references` empty. Callers of `/v1/google/search` can pass\n`ai_overview=true` to have the scraper chase the token automatically and\nmerge the result back into this object."},"AiOverviewListItem":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"snippet_links":{"items":{"$ref":"#/components/schemas/SnippetLink"},"type":"array","title":"Snippet Links"}},"type":"object","title":"AiOverviewListItem","description":"A list item within an AI Overview text block."},"AiOverviewReference":{"properties":{"index":{"type":"integer","title":"Index"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"}},"type":"object","required":["index","title","link"],"title":"AiOverviewReference","description":"A source reference in AI Overview."},"AiOverviewTextBlock":{"properties":{"type":{"type":"string","enum":["paragraph","heading","list","video","table"],"title":"Type"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"snippet_links":{"items":{"$ref":"#/components/schemas/SnippetLink"},"type":"array","title":"Snippet Links"},"list_items":{"items":{"$ref":"#/components/schemas/AiOverviewListItem"},"type":"array","title":"List Items"},"video":{"anyOf":[{"$ref":"#/components/schemas/AiOverviewVideo"},{"type":"null"}]},"video_links":{"items":{"$ref":"#/components/schemas/AiOverviewVideo"},"type":"array","title":"Video Links"}},"type":"object","required":["type"],"title":"AiOverviewTextBlock","description":"A typed content block within AI Overview."},"AiOverviewVideo":{"properties":{"link":{"type":"string","title":"Link"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["link"],"title":"AiOverviewVideo","description":"Video reference in AI Overview."},"AiReference":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"AiReference","description":"A reference cited in the AI response."},"AiTextBlock":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Level"},"header":{"items":{"type":"string"},"type":"array","title":"Header","description":"Header cells for a table block."},"rows":{"items":{"$ref":"#/components/schemas/AiTableRow"},"type":"array","title":"Rows","description":"Body rows for a table block."}},"type":"object","title":"AiTextBlock","description":"A block of the AI answer: paragraph | heading | list | table. A table block carries header + rows."},"AutocompleteResponse":{"properties":{"suggestions":{"items":{"$ref":"#/components/schemas/AutocompleteSuggestion"},"type":"array","title":"Suggestions"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"AutocompleteResponse","description":"Response for GET /api/v1/autocomplete/."},"AutocompleteSuggestion":{"properties":{"value":{"type":"string","title":"Value"},"relevance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Relevance"}},"type":"object","required":["value"],"title":"AutocompleteSuggestion","description":"A single autocomplete suggestion."},"CitationByYear":{"properties":{"year":{"type":"integer","title":"Year"},"citations":{"type":"integer","title":"Citations"}},"type":"object","required":["year","citations"],"title":"CitationByYear","description":"One point in the citations-per-year chart."},"FinanceQuoteResponse":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"stock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stock"},"exchange":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exchange"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"price_movement":{"anyOf":[{"$ref":"#/components/schemas/PriceMovement"},{"type":"null"}]},"stats":{"$ref":"#/components/schemas/FinanceStats"}},"type":"object","title":"FinanceQuoteResponse","description":"Response for GET /api/v1/finance/quote."},"FinanceStats":{"properties":{"prev_close":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prev Close"},"day_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Range"},"year_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Year Range"},"market_cap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Cap"},"pe_ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pe Ratio"}},"type":"object","title":"FinanceStats","description":"Key financial statistics."},"FlightAirport":{"properties":{"iata_code":{"type":"string","title":"Iata Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},"type":"object","required":["iata_code"],"title":"FlightAirport","description":"Airport metadata referenced in a search result."},"FlightLayover":{"properties":{"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airport"},"airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airport Name"},"overnight":{"type":"boolean","title":"Overnight","default":false}},"type":"object","title":"FlightLayover","description":"A layover between two legs in a multi-segment itinerary."},"FlightLeg":{"properties":{"departure_airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Airport","description":"IATA code"},"departure_airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Airport Name"},"departure_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Time","description":"ISO-8601 local time of departure"},"arrival_airport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Airport"},"arrival_airport_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Airport Name"},"arrival_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Arrival Time"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"airline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline"},"airline_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline Logo"},"flight_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flight Number"},"aircraft":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aircraft"},"travel_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Travel Class"},"legroom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legroom"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","title":"FlightLeg","description":"One segment of a flight itinerary (e.g. SFO → LHR on a connection)."},"FlightOffer":{"properties":{"legs":{"items":{"$ref":"#/components/schemas/FlightLeg"},"type":"array","title":"Legs"},"layovers":{"items":{"$ref":"#/components/schemas/FlightLayover"},"type":"array","title":"Layovers"},"total_duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Minutes"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"price_type":{"anyOf":[{"type":"string","enum":["base","total"]},{"type":"null"}],"title":"Price Type"},"booking_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Booking Token"},"booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Booking Url","description":"Deep link that pre-selects this exact flight on Google Flights. For one-way it opens the booking-options page (airline/OTA links); for round-trip it opens the return-flight selection for this outbound. Built from the `tfs` token, language-independent."},"selection_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selection Token","description":"Opaque `tfs` token for this selection. Pass to `GET /flights/booking_options` to retrieve the provider booking list (works for one-way / fully-selected itineraries)."},"departure_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Departure Token"},"carbon_emissions_grams":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carbon Emissions Grams"},"carbon_emissions_diff_typical":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Carbon Emissions Diff Typical","description":"Difference vs typical emissions for this route, in grams"},"airline_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Airline Logo"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","title":"FlightOffer","description":"A single end-to-end flight itinerary that appears in the results."},"FlightPriceInsights":{"properties":{"lowest_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lowest Price"},"price_level":{"anyOf":[{"type":"string","enum":["low","typical","high"]},{"type":"null"}],"title":"Price Level"},"typical_price_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Typical Price Range","description":"[min, max] typical price for this route"},"price_history":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Price History","description":"Historical price points as [[unix_timestamp, price], ...]"}},"type":"object","title":"FlightPriceInsights","description":"Typical price range insight for the searched route."},"GoogleFlightsResponse":{"properties":{"best_flights":{"items":{"$ref":"#/components/schemas/FlightOffer"},"type":"array","title":"Best Flights"},"other_flights":{"items":{"$ref":"#/components/schemas/FlightOffer"},"type":"array","title":"Other Flights"},"price_insights":{"anyOf":[{"$ref":"#/components/schemas/FlightPriceInsights"},{"type":"null"}]},"airports":{"items":{"$ref":"#/components/schemas/FlightAirport"},"type":"array","title":"Airports"},"departure_id":{"type":"string","title":"Departure Id"},"arrival_id":{"type":"string","title":"Arrival Id"},"outbound_date":{"type":"string","title":"Outbound Date"},"return_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Date"},"currency":{"type":"string","title":"Currency","default":"USD"},"trip_type":{"type":"string","enum":["one_way","round_trip","multi_city"],"title":"Trip Type","default":"round_trip"},"search_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Url","description":"Canonical Google Flights `tfs` URL for this search (in the requested language; market and prices follow `gl`/`currency`) — open to view and book the listed flights."}},"type":"object","required":["departure_id","arrival_id","outbound_date"],"title":"GoogleFlightsResponse","description":"Response for GET /api/v1/flights/search."},"GoogleLocalResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"local_results":{"items":{"$ref":"#/components/schemas/LocalResult"},"type":"array","title":"Local Results"}},"type":"object","required":["search_information"],"title":"GoogleLocalResponse","description":"Response for GET /api/v1/local/search."},"GoogleSearchResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"ai_overview":{"anyOf":[{"$ref":"#/components/schemas/AiOverview"},{"type":"null"}]},"organic_results":{"items":{"$ref":"#/components/schemas/OrganicResult"},"type":"array","title":"Organic Results"},"ads":{"items":{"$ref":"#/components/schemas/AdResult"},"type":"array","title":"Ads"},"knowledge_graph":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeGraph"},{"type":"null"}]},"local_results":{"items":{"$ref":"#/components/schemas/LocalResult"},"type":"array","title":"Local Results"},"related_questions":{"items":{"$ref":"#/components/schemas/RelatedQuestion"},"type":"array","title":"Related Questions"},"related_searches":{"items":{"$ref":"#/components/schemas/RelatedSearch"},"type":"array","title":"Related Searches"},"news_results":{"items":{"$ref":"#/components/schemas/NewsResult"},"type":"array","title":"News Results"},"inline_videos":{"items":{"$ref":"#/components/schemas/InlineVideo"},"type":"array","title":"Inline Videos"},"shopping_results":{"items":{"$ref":"#/components/schemas/ShoppingResult"},"type":"array","title":"Shopping Results"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["search_information","pagination"],"title":"GoogleSearchResponse","description":"Response for GET /api/v1/search."},"GoogleShortsResponse":{"properties":{"search_information":{"$ref":"#/components/schemas/SearchInformation"},"short_videos_results":{"items":{"$ref":"#/components/schemas/ShortVideoResult"},"type":"array","title":"Short Videos Results"}},"type":"object","required":["search_information"],"title":"GoogleShortsResponse","description":"Response for GET /api/v1/shorts/search."},"GpsCoordinates":{"properties":{"lat":{"type":"number","title":"Lat"},"lng":{"type":"number","title":"Lng"}},"type":"object","required":["lat","lng"],"title":"GpsCoordinates","description":"GPS coordinates."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HotelDetailResponse":{"properties":{"property":{"$ref":"#/components/schemas/HotelProperty"}},"type":"object","required":["property"],"title":"HotelDetailResponse","description":"Response for GET /api/v1/hotels/details."},"HotelNearbyPlace":{"properties":{"name":{"type":"string","title":"Name"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["name"],"title":"HotelNearbyPlace","description":"A place near the hotel."},"HotelPrice":{"properties":{"source":{"type":"string","title":"Source"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"cancellation_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Policy"}},"type":"object","required":["source"],"title":"HotelPrice","description":"A hotel price from a specific source."},"HotelProperty":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"hotel_class":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hotel Class"},"eco_certified":{"type":"boolean","title":"Eco Certified","default":false},"check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check In Time"},"check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Out Time"},"overall_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"rate_per_night":{"anyOf":[{"$ref":"#/components/schemas/HotelRate"},{"type":"null"}]},"total_rate":{"anyOf":[{"$ref":"#/components/schemas/HotelRate"},{"type":"null"}]},"prices":{"items":{"$ref":"#/components/schemas/HotelPrice"},"type":"array","title":"Prices"},"nearby_places":{"items":{"$ref":"#/components/schemas/HotelNearbyPlace"},"type":"array","title":"Nearby Places"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"property_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Token"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["name"],"title":"HotelProperty","description":"A hotel search result."},"HotelRate":{"properties":{"lowest":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lowest"},"extracted":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Extracted"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},"type":"object","title":"HotelRate","description":"Hotel rate information."},"HotelsSearchResponse":{"properties":{"properties":{"items":{"$ref":"#/components/schemas/HotelProperty"},"type":"array","title":"Properties"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"HotelsSearchResponse","description":"Response for GET /api/v1/hotels/search."},"ImageResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"original":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original"},"original_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Width"},"original_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Height"}},"type":"object","title":"ImageResult","description":"A single image search result."},"ImagesSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ImageResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"ImagesSearchResponse","description":"Response for GET /api/v1/images/search."},"InlineSitelink":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","title":"InlineSitelink","description":"An inline sitelink (e.g. Reddit post metadata)."},"InlineVideo":{"properties":{"title":{"type":"string","title":"Title"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"}},"type":"object","required":["title"],"title":"InlineVideo","description":"Inline video result."},"JobApplyOption":{"properties":{"source":{"type":"string","title":"Source"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"type":"string","title":"Link"}},"type":"object","required":["source","link"],"title":"JobApplyOption","description":"A job application link."},"JobFilter":{"properties":{"name":{"type":"string","title":"Name"},"options":{"items":{"$ref":"#/components/schemas/JobFilterOption"},"type":"array","title":"Options"}},"type":"object","required":["name"],"title":"JobFilter","description":"A filter option for job search."},"JobFilterOption":{"properties":{"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","required":["label"],"title":"JobFilterOption","description":"A single filter option value."},"JobHighlights":{"properties":{"qualifications":{"items":{"type":"string"},"type":"array","title":"Qualifications"},"responsibilities":{"items":{"type":"string"},"type":"array","title":"Responsibilities"},"benefits":{"items":{"type":"string"},"type":"array","title":"Benefits"}},"type":"object","title":"JobHighlights","description":"Structured job highlights."},"JobResult":{"properties":{"title":{"type":"string","title":"Title"},"company_name":{"type":"string","title":"Company Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"via":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via","description":"Source platform (\"Talent.com\", \"Built In NYC\", …) parsed from \"via X\"."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Canonical Google Jobs listing URL."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"salary":{"anyOf":[{"$ref":"#/components/schemas/JobSalary"},{"type":"null"}]},"job_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type"},"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type"},"work_from_home":{"type":"boolean","title":"Work From Home","default":false},"posted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted At"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"apply_options":{"items":{"$ref":"#/components/schemas/JobApplyOption"},"type":"array","title":"Apply Options"},"apply_links":{"items":{"type":"string"},"type":"array","title":"Apply Links","description":"Flat list of apply URLs for quick access."},"job_highlights":{"anyOf":[{"$ref":"#/components/schemas/JobHighlights"},{"type":"null"}]},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title","company_name"],"title":"JobResult","description":"A single job listing."},"JobSalary":{"properties":{"min":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},"type":"object","title":"JobSalary","description":"Job salary information."},"JobsSearchResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Jobs"},"jobs_results":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Jobs Results"},"filters":{"items":{"$ref":"#/components/schemas/JobFilter"},"type":"array","title":"Filters"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"JobsSearchResponse","description":"Response for GET /api/v1/jobs/search."},"KnowledgeGraph":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"attributes":{"additionalProperties":{"type":"string"},"type":"object","title":"Attributes"}},"type":"object","title":"KnowledgeGraph","description":"Knowledge Graph panel."},"LensResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","title":"LensResult","description":"A single visual search result."},"LensSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/LensResult"},"type":"array","title":"Results"},"image_url":{"type":"string","title":"Image Url"}},"type":"object","required":["image_url"],"title":"LensSearchResponse","description":"Response for GET /api/v1/lens/search."},"LocalResult":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]}},"type":"object","required":["title"],"title":"LocalResult","description":"Local pack result."},"MapsLocationDetails":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"}},"type":"object","title":"MapsLocationDetails","description":"Business identity shown alongside posts (matches shape)."},"MapsLocationInfo":{"properties":{"title":{"type":"string","title":"Title"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"}},"type":"object","required":["title"],"title":"MapsLocationInfo","description":"Location summary in review responses."},"MapsOwnerResponse":{"properties":{"text":{"type":"string","title":"Text"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","required":["text"],"title":"MapsOwnerResponse","description":"Business owner response to a review."},"MapsPhoto":{"properties":{"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"}},"type":"object","title":"MapsPhoto","description":"A place photo."},"MapsPhotoCategory":{"properties":{"name":{"type":"string","title":"Name"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"type":"object","required":["name"],"title":"MapsPhotoCategory","description":"A photo category."},"MapsPhotosResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/MapsPhotoCategory"},"type":"array","title":"Categories"},"photos":{"items":{"$ref":"#/components/schemas/MapsPhoto"},"type":"array","title":"Photos"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsPhotosResponse","description":"Response for GET /api/v1/maps/photos."},"MapsPlaceDetail":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"data_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Id"},"data_cid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cid"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Level"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"types":{"items":{"type":"string"},"type":"array","title":"Types"},"type_ids":{"items":{"type":"string"},"type":"array","title":"Type Ids"},"extensions":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Extensions"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"open_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Open State"},"hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hours"},"operating_hours":{"additionalProperties":{"type":"string"},"type":"object","title":"Operating Hours"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"Full-size image URL (same CDN as thumbnail but larger)"},"google_maps_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Maps Url"},"reviews_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews Link"},"photos_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photos Link"},"posts_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posts Link"},"service_options":{"anyOf":[{"$ref":"#/components/schemas/MapsServiceOptions"},{"type":"null"}]},"provider_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Id"},"rating_breakdown":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rating Breakdown"},"order_online_urls":{"items":{"type":"string"},"type":"array","title":"Order Online Urls"},"photos":{"items":{"type":"string"},"type":"array","title":"Photos"}},"type":"object","required":["title"],"title":"MapsPlaceDetail","description":"Detailed place information."},"MapsPlaceResponse":{"properties":{"place":{"$ref":"#/components/schemas/MapsPlaceDetail"}},"type":"object","required":["place"],"title":"MapsPlaceResponse","description":"Response for GET /api/v1/maps/place."},"MapsPlaceResult":{"properties":{"title":{"type":"string","title":"Title"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"data_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Id"},"data_cid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Cid"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Level"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"types":{"items":{"type":"string"},"type":"array","title":"Types"},"type_ids":{"items":{"type":"string"},"type":"array","title":"Type Ids"},"extensions":{"items":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"type":"array","title":"Extensions"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"gps_coordinates":{"anyOf":[{"$ref":"#/components/schemas/GpsCoordinates"},{"type":"null"}]},"open_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Open State"},"hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hours"},"operating_hours":{"additionalProperties":{"type":"string"},"type":"object","title":"Operating Hours"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image","description":"Full-size image URL (same CDN as thumbnail but larger)"},"google_maps_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Maps Url"},"reviews_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews Link"},"photos_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photos Link"},"posts_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posts Link"},"service_options":{"anyOf":[{"$ref":"#/components/schemas/MapsServiceOptions"},{"type":"null"}]}},"type":"object","required":["title"],"title":"MapsPlaceResult","description":"A place from Maps search results."},"MapsPost":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","title":"MapsPost","description":"A business post or update."},"MapsPostsResponse":{"properties":{"location_details":{"anyOf":[{"$ref":"#/components/schemas/MapsLocationDetails"},{"type":"null"}]},"post_data":{"items":{"$ref":"#/components/schemas/MapsPost"},"type":"array","title":"Post Data"},"has_updates":{"type":"boolean","title":"Has Updates","description":"True when the SERP knowledge panel shows an 'Updates from' section","default":false},"merchant_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Description","description":"The 'From the business' description text set by the business owner"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsPostsResponse","description":"Response for GET /api/v1/maps/posts."},"MapsReview":{"properties":{"rating":{"type":"integer","title":"Rating"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"iso_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iso Date"},"user":{"anyOf":[{"$ref":"#/components/schemas/MapsReviewUser"},{"type":"null"}]},"likes":{"type":"integer","title":"Likes","default":0},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"response_from_owner":{"anyOf":[{"$ref":"#/components/schemas/MapsOwnerResponse"},{"type":"null"}]}},"type":"object","required":["rating"],"title":"MapsReview","description":"A single place review."},"MapsReviewTopic":{"properties":{"keyword":{"type":"string","title":"Keyword"},"mentions":{"type":"integer","title":"Mentions","default":0},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},"type":"object","required":["keyword"],"title":"MapsReviewTopic","description":"A review topic/keyword."},"MapsReviewUser":{"properties":{"name":{"type":"string","title":"Name"},"contributor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contributor Id"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"local_guide":{"type":"boolean","title":"Local Guide","default":false},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"photos_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Photos Count"}},"type":"object","required":["name"],"title":"MapsReviewUser","description":"User who wrote a review."},"MapsReviewsResponse":{"properties":{"location":{"anyOf":[{"$ref":"#/components/schemas/MapsLocationInfo"},{"type":"null"}]},"topics":{"items":{"$ref":"#/components/schemas/MapsReviewTopic"},"type":"array","title":"Topics"},"reviews":{"items":{"$ref":"#/components/schemas/MapsReview"},"type":"array","title":"Reviews"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"MapsReviewsResponse","description":"Response for GET /api/v1/maps/reviews."},"MapsSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/MapsPlaceResult"},"type":"array","title":"Results"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["results","pagination"],"title":"MapsSearchResponse","description":"Response for GET /api/v1/maps/search."},"MapsServiceOptions":{"properties":{"dine_in":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dine In"},"takeout":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Takeout"},"delivery":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Delivery"},"curbside_pickup":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Curbside Pickup"}},"type":"object","title":"MapsServiceOptions","description":"Service options for a business."},"NewsArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"source":{"$ref":"#/components/schemas/NewsSource"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"related_stories":{"items":{"$ref":"#/components/schemas/NewsRelatedStory"},"type":"array","title":"Related Stories"}},"type":"object","required":["title","link","source"],"title":"NewsArticle","description":"A single news article."},"NewsRelatedStory":{"properties":{"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["title","link"],"title":"NewsRelatedStory","description":"A related story within a news cluster."},"NewsResult":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["title"],"title":"NewsResult","description":"Inline news/top stories result."},"NewsSearchResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles","query"],"title":"NewsSearchResponse","description":"Response for GET /api/v1/news/search."},"NewsSource":{"properties":{"name":{"type":"string","title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["name"],"title":"NewsSource","description":"News article source."},"NewsTopicsResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"topic":{"type":"string","title":"Topic"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles","topic"],"title":"NewsTopicsResponse","description":"Response for GET /api/v1/news/topics."},"NewsTrendingResponse":{"properties":{"articles":{"items":{"$ref":"#/components/schemas/NewsArticle"},"type":"array","title":"Articles"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","required":["articles"],"title":"NewsTrendingResponse","description":"Response for GET /api/v1/news/trending."},"OrganicResult":{"properties":{"position":{"type":"integer","title":"Position"},"title":{"type":"string","title":"Title"},"link":{"type":"string","title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"highlighted_keywords":{"items":{"type":"string"},"type":"array","title":"Highlighted Keywords"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"favicon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon"},"sitelinks":{"items":{"$ref":"#/components/schemas/Sitelink"},"type":"array","title":"Sitelinks"},"inline_sitelinks":{"items":{"$ref":"#/components/schemas/InlineSitelink"},"type":"array","title":"Inline Sitelinks"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"page_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Rank"}},"type":"object","required":["position","title","link"],"title":"OrganicResult","description":"A single organic search result."},"Pagination":{"properties":{"current":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Current","default":1},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"total_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Pages"},"page_no":{"additionalProperties":{"type":"string"},"type":"object","title":"Page No"}},"type":"object","title":"Pagination","description":"Pagination metadata."},"PatentCitation":{"properties":{"patent_id":{"type":"string","title":"Patent Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"}},"type":"object","required":["patent_id"],"title":"PatentCitation","description":"A patent citation reference."},"PatentDetail":{"properties":{"title":{"type":"string","title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"patent_id":{"type":"string","title":"Patent Id"},"publication_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Number"},"priority_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Date"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"},"grant_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grant Date"},"publication_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Date"},"inventor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inventor"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"figures":{"items":{"$ref":"#/components/schemas/PatentFigure"},"type":"array","title":"Figures"},"country_status":{"additionalProperties":{"type":"string"},"type":"object","title":"Country Status"},"abstract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstract"},"claims":{"items":{"type":"string"},"type":"array","title":"Claims"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"classifications":{"items":{"type":"string"},"type":"array","title":"Classifications"},"citations":{"items":{"$ref":"#/components/schemas/PatentCitation"},"type":"array","title":"Citations"},"application_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Number"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"}},"type":"object","required":["title","patent_id"],"title":"PatentDetail","description":"Detailed patent information from /xhr/result."},"PatentDetailResponse":{"properties":{"patent":{"$ref":"#/components/schemas/PatentDetail"}},"type":"object","required":["patent"],"title":"PatentDetailResponse","description":"Response for GET /api/v1/patents/detail."},"PatentFigure":{"properties":{"url":{"type":"string","title":"Url"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["url"],"title":"PatentFigure","description":"Patent figure/drawing."},"PatentResult":{"properties":{"title":{"type":"string","title":"Title"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"patent_id":{"type":"string","title":"Patent Id"},"publication_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Number"},"priority_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Date"},"filing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filing Date"},"grant_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grant Date"},"publication_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Date"},"inventor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inventor"},"assignee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"figures":{"items":{"$ref":"#/components/schemas/PatentFigure"},"type":"array","title":"Figures"},"country_status":{"additionalProperties":{"type":"string"},"type":"object","title":"Country Status"}},"type":"object","required":["title","patent_id"],"title":"PatentResult","description":"A single patent search result."},"PatentSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/PatentResult"},"type":"array","title":"Results"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"query":{"type":"string","title":"Query"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["results","query","pagination"],"title":"PatentSearchResponse","description":"Response for GET /api/v1/patents/search."},"PriceMovement":{"properties":{"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},"type":"object","title":"PriceMovement","description":"Price movement data."},"ProductDetailResponse":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Range"},"sellers":{"items":{"$ref":"#/components/schemas/ProductSeller"},"type":"array","title":"Sellers"},"specs":{"additionalProperties":{"type":"string"},"type":"object","title":"Specs"},"images":{"items":{"type":"string"},"type":"array","title":"Images"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"}},"type":"object","title":"ProductDetailResponse","description":"Response for GET /api/v1/products/detail."},"ProductSeller":{"properties":{"name":{"type":"string","title":"Name"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"shipping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping"}},"type":"object","required":["name"],"title":"ProductSeller","description":"A seller offering the product."},"RelatedQuestion":{"properties":{"question":{"type":"string","title":"Question"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"source_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Logo"}},"type":"object","required":["question"],"title":"RelatedQuestion","description":"People Also Ask question."},"RelatedSearch":{"properties":{"query":{"type":"string","title":"Query"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["query"],"title":"RelatedSearch","description":"Related search suggestion."},"ScholarAuthorArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"authors":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authors"},"publication":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication"},"cited_by_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By Count"},"cited_by_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cited By Link"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},"type":"object","required":["title"],"title":"ScholarAuthorArticle","description":"One article row from the author profile's publication list."},"ScholarAuthorCitationResponse":{"properties":{"author_id":{"type":"string","title":"Author Id"},"citations_by_year":{"items":{"$ref":"#/components/schemas/CitationByYear"},"type":"array","title":"Citations By Year"},"total_citations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Citations"}},"type":"object","required":["author_id"],"title":"ScholarAuthorCitationResponse","description":"Response for GET /api/v1/scholar/author/citation."},"ScholarAuthorInfo":{"properties":{"author_id":{"type":"string","title":"Author Id"},"name":{"type":"string","title":"Name"},"affiliations":{"items":{"type":"string"},"type":"array","title":"Affiliations"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"interests":{"items":{"type":"string"},"type":"array","title":"Interests"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"homepage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Homepage"}},"type":"object","required":["author_id","name"],"title":"ScholarAuthorInfo","description":"Header block of a Scholar author profile page."},"ScholarAuthorResponse":{"properties":{"author":{"$ref":"#/components/schemas/ScholarAuthorInfo"},"articles":{"items":{"$ref":"#/components/schemas/ScholarAuthorArticle"},"type":"array","title":"Articles"},"stats":{"anyOf":[{"$ref":"#/components/schemas/ScholarAuthorStats"},{"type":"null"}]},"co_authors":{"items":{"$ref":"#/components/schemas/ScholarCoAuthor"},"type":"array","title":"Co Authors"}},"type":"object","required":["author"],"title":"ScholarAuthorResponse","description":"Response for GET /api/v1/scholar/author."},"ScholarAuthorStats":{"properties":{"citations_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citations All"},"citations_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Citations Since Year"},"h_index_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"H Index All"},"h_index_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"H Index Since Year"},"i10_index_all":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"I10 Index All"},"i10_index_since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"I10 Index Since Year"},"since_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Since Year"}},"type":"object","title":"ScholarAuthorStats","description":"Right-rail citation stats table."},"ScholarCitationFormat":{"properties":{"style":{"type":"string","title":"Style"},"citation":{"type":"string","title":"Citation"}},"type":"object","required":["style","citation"],"title":"ScholarCitationFormat","description":"A single citation-style rendering (MLA, APA, Chicago, etc.)."},"ScholarCitationLink":{"properties":{"name":{"type":"string","title":"Name"},"link":{"type":"string","title":"Link"}},"type":"object","required":["name","link"],"title":"ScholarCitationLink","description":"Export link shown at the bottom of the cite dialog (BibTeX, RIS, ...)."},"ScholarCiteResponse":{"properties":{"citations":{"items":{"$ref":"#/components/schemas/ScholarCitationFormat"},"type":"array","title":"Citations"},"links":{"items":{"$ref":"#/components/schemas/ScholarCitationLink"},"type":"array","title":"Links"}},"type":"object","title":"ScholarCiteResponse","description":"Response for GET /api/v1/scholar/cite."},"ScholarCoAuthor":{"properties":{"author_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Id"},"name":{"type":"string","title":"Name"},"affiliation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affiliation"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["name"],"title":"ScholarCoAuthor","description":"Co-author card shown on the author profile page."},"ScholarProfile":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"author_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Id","description":"Google Scholar user ID (the `user` query parameter)"},"name":{"type":"string","title":"Name"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"affiliation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affiliation"},"email_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Domain"},"cited_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By"},"interests":{"items":{"type":"string"},"type":"array","title":"Interests"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["name"],"title":"ScholarProfile","description":"One author card from the Scholar profile search page."},"ScholarProfilesResponse":{"properties":{"profiles":{"items":{"$ref":"#/components/schemas/ScholarProfile"},"type":"array","title":"Profiles"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"before_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before Author","description":"Pagination token for the previous page"},"after_author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After Author","description":"Pagination token for the next page"}},"type":"object","required":["query"],"title":"ScholarProfilesResponse","description":"Response for GET /api/v1/scholar/profiles."},"ScholarResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"authors":{"items":{"type":"string"},"type":"array","title":"Authors"},"publication_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publication Info"},"cited_by_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cited By Count"},"cited_by_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cited By Link"},"related_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Link"},"versions_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Versions Count"},"pdf_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Link"}},"type":"object","required":["title"],"title":"ScholarResult","description":"A single scholarly article result."},"ScholarSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ScholarResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"}},"type":"object","required":["query"],"title":"ScholarSearchResponse","description":"Response for GET /api/v1/scholar/search."},"SearchInformation":{"properties":{"query_displayed":{"type":"string","title":"Query Displayed"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results"},"time_taken":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time Taken"},"organic_results_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organic Results State"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["query_displayed"],"title":"SearchInformation","description":"Metadata about the search query."},"ShoppingClickResponse":{"properties":{"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"title":{"type":"string","title":"Title"},"merchant_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Url"},"merchant_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Domain"},"source_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Query"}},"type":"object","required":["title"],"title":"ShoppingClickResponse","description":"Response for GET /api/v1/shopping/product/click.\n\nReturns the direct merchant URL for a given product title by using\nGoogle's \"I'm Feeling Lucky\" redirect. Mirrors \nimmersive product link pattern — an on-demand per-product\nenrichment that materializes the merchant link that Google strips from\norganic Shopping HTML."},"ShoppingFilter":{"properties":{"name":{"type":"string","title":"Name"},"options":{"items":{"$ref":"#/components/schemas/ShoppingFilterOption"},"type":"array","title":"Options"}},"type":"object","required":["name"],"title":"ShoppingFilter","description":"A shopping filter group."},"ShoppingFilterOption":{"properties":{"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"aria_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aria Label"}},"type":"object","required":["label"],"title":"ShoppingFilterOption","description":"A single filter option."},"ShoppingPrice":{"properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"extracted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extracted"}},"type":"object","title":"ShoppingPrice","description":"Product price."},"ShoppingProductDetail":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"price_range_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Range Low"},"price_range_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Range High"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"sellers":{"items":{"$ref":"#/components/schemas/ShoppingSeller"},"type":"array","title":"Sellers"},"specs":{"additionalProperties":{"type":"string"},"type":"object","title":"Specs"},"images":{"items":{"type":"string"},"type":"array","title":"Images"}},"type":"object","required":["title"],"title":"ShoppingProductDetail","description":"Detailed product information."},"ShoppingProductResponse":{"properties":{"product":{"$ref":"#/components/schemas/ShoppingProductDetail"}},"type":"object","required":["product"],"title":"ShoppingProductResponse","description":"Response for GET /api/v1/shopping/product."},"ShoppingProductResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"$ref":"#/components/schemas/ShoppingPrice"},{"type":"null"}]},"old_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Price"},"old_price_extracted":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Old Price Extracted"},"on_sale":{"type":"boolean","title":"On Sale","default":false},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviews"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"source_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Icon"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"click_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Click Link"},"page_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Token"},"delivery":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery"},"return_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Policy"},"extensions":{"items":{"type":"string"},"type":"array","title":"Extensions"}},"type":"object","required":["title"],"title":"ShoppingProductResult","description":"A single product from search results."},"ShoppingResult":{"properties":{"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews"}},"type":"object","required":["title"],"title":"ShoppingResult","description":"Inline shopping result."},"ShoppingSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ShoppingProductResult"},"type":"array","title":"Results"},"filters":{"items":{"$ref":"#/components/schemas/ShoppingFilter"},"type":"array","title":"Filters"},"ads":{"items":{"$ref":"#/components/schemas/ShoppingProductResult"},"type":"array","title":"Ads"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["pagination"],"title":"ShoppingSearchResponse","description":"Response for GET /api/v1/shopping/search."},"ShoppingSeller":{"properties":{"name":{"type":"string","title":"Name"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Price"},"shipping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping"},"tax":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax"},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"reviews_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviews Count"}},"type":"object","required":["name"],"title":"ShoppingSeller","description":"A seller offering the product."},"ShortVideoResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"video_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Id"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Host domain (e.g. 'youtube.com', 'tiktok.com')"},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account","description":"Channel / account name"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"views":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Views"},"published":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["title"],"title":"ShortVideoResult","description":"A single short-form video result surfaced in Google Shorts."},"Sitelink":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"}},"type":"object","required":["title"],"title":"Sitelink","description":"A sitelink within an organic result."},"SnippetLink":{"properties":{"link":{"type":"string","title":"Link"},"link_text":{"type":"string","title":"Link Text"}},"type":"object","required":["link","link_text"],"title":"SnippetLink","description":"Inline link within an AI Overview text block."},"TrendsAutocompleteItem":{"properties":{"title":{"type":"string","title":"Title"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"mid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mid","description":"Knowledge Graph machine ID (e.g. '/m/02vx4')"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"}},"type":"object","required":["title"],"title":"TrendsAutocompleteItem","description":"A categorized topic suggestion returned by the Trends autocomplete API.\n\nDistinct from Google Search autocomplete in that each entry is a\ncategorized entity with a Knowledge Graph `mid` identifier and a\nsemantic `type` (\"Topic\", \"Sports\", \"Career\", etc.) plus a direct\nlink into Google Trends."},"TrendsAutocompleteResponse":{"properties":{"query":{"type":"string","title":"Query"},"results":{"items":{"$ref":"#/components/schemas/TrendsAutocompleteItem"},"type":"array","title":"Results"}},"type":"object","required":["query"],"title":"TrendsAutocompleteResponse","description":"Response for GET /api/v1/trends/autocomplete."},"TrendsInterestResponse":{"properties":{"timeline":{"items":{"$ref":"#/components/schemas/TrendsTimelinePoint"},"type":"array","title":"Timeline"},"averages":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Averages"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsInterestResponse","description":"Response for GET /api/v1/trends/interest."},"TrendsRegionInterest":{"properties":{"region":{"type":"string","title":"Region"},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code"},"value":{"type":"integer","title":"Value","default":0},"max_value_index":{"type":"integer","title":"Max Value Index","default":0}},"type":"object","required":["region"],"title":"TrendsRegionInterest","description":"Interest for a specific region."},"TrendsRegionsResponse":{"properties":{"regions":{"items":{"$ref":"#/components/schemas/TrendsRegionInterest"},"type":"array","title":"Regions"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsRegionsResponse","description":"Response for GET /api/v1/trends/regions."},"TrendsRelatedItem":{"properties":{"title":{"type":"string","title":"Title"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"topic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic Id"},"topic_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic Type"}},"type":"object","required":["title"],"title":"TrendsRelatedItem","description":"A related topic or query."},"TrendsRelatedResponse":{"properties":{"rising_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Topics"},"top_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Topics"},"rising_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Queries"},"top_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Queries"},"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"TrendsRelatedResponse","description":"Response for GET /api/v1/trends/related."},"TrendsSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"data_type":{"type":"string","title":"Data Type"},"timeline":{"items":{"$ref":"#/components/schemas/TrendsTimelinePoint"},"type":"array","title":"Timeline"},"averages":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Averages"},"regions":{"items":{"$ref":"#/components/schemas/TrendsRegionInterest"},"type":"array","title":"Regions"},"top_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Topics"},"rising_topics":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Topics"},"top_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Top Queries"},"rising_queries":{"items":{"$ref":"#/components/schemas/TrendsRelatedItem"},"type":"array","title":"Rising Queries"}},"type":"object","required":["query","data_type"],"title":"TrendsSearchResponse","description":"Unified response for GET /api/v1/trends/search.\n\nA single endpoint that dispatches on ``data_type``\n(TIMESERIES, GEO_MAP, GEO_MAP_0, RELATED_TOPICS, RELATED_QUERIES).\nOnly the field set relevant to the requested ``data_type`` is\npopulated; others stay at their empty defaults."},"TrendsTimelinePoint":{"properties":{"date":{"type":"string","title":"Date"},"timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timestamp"},"values":{"items":{"$ref":"#/components/schemas/TrendsTimelineValue"},"type":"array","title":"Values"}},"type":"object","required":["date"],"title":"TrendsTimelinePoint","description":"A single point in interest over time."},"TrendsTimelineValue":{"properties":{"query":{"type":"string","title":"Query"},"value":{"type":"integer","title":"Value"},"extracted_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extracted Value"}},"type":"object","required":["query","value"],"title":"TrendsTimelineValue","description":"A single value in a trends timeline point."},"TrendsTrendingArticle":{"properties":{"title":{"type":"string","title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["title"],"title":"TrendsTrendingArticle","description":"An article associated with a trending search."},"TrendsTrendingItem":{"properties":{"title":{"type":"string","title":"Title"},"traffic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traffic"},"articles":{"items":{"$ref":"#/components/schemas/TrendsTrendingArticle"},"type":"array","title":"Articles"}},"type":"object","required":["title"],"title":"TrendsTrendingItem","description":"A trending search item."},"TrendsTrendingResponse":{"properties":{"trending":{"items":{"$ref":"#/components/schemas/TrendsTrendingItem"},"type":"array","title":"Trending"},"country":{"type":"string","title":"Country","default":"US"}},"type":"object","title":"TrendsTrendingResponse","description":"Response for GET /api/v1/trends/trending."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoResult":{"properties":{"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"displayed_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayed Link"},"thumbnail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},"type":"object","title":"VideoResult","description":"A single video search result."},"VideosSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/VideoResult"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"language":{"type":"string","title":"Language","default":"en"},"country":{"type":"string","title":"Country","default":"us"}},"type":"object","required":["query"],"title":"VideosSearchResponse","description":"Response for GET /api/v1/videos/search."},"AiTableRow":{"properties":{"cells":{"items":{"type":"string"},"type":"array","title":"Cells"}},"type":"object","title":"AiTableRow","description":"One row of a table text_block (ordered cell values)."},"BookingOption":{"properties":{"book_with":{"type":"string","title":"Book With","description":"Provider name, e.g. `LATAM`, `maxmilhas`."},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"type":{"anyOf":[{"type":"string","enum":["airline","agency"]},{"type":"null"}],"title":"Type","description":"`airline` for the carrier itself, else `agency`."}},"type":"object","required":["book_with"],"title":"BookingOption","description":"One provider (airline or OTA) that can book the selected itinerary."},"FlightBookingOptionsResponse":{"properties":{"booking_options":{"items":{"$ref":"#/components/schemas/BookingOption"},"type":"array","title":"Booking Options"},"booking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Booking Url","description":"Google Flights booking page for this selection (the actual per-provider booking links open from here)."},"currency":{"type":"string","title":"Currency","default":"USD"}},"type":"object","title":"FlightBookingOptionsResponse","description":"Response for GET /api/v1/flights/booking_options."}}}} \ No newline at end of file