{
  "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": {
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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=<letter>``; 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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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 HTTP fetch).",
        "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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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=<name>`` search and harvests unique\n``/citations?user=<id>`` 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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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:<cluster>: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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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=<query>&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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/lens/search": {
      "get": {
        "tags": [
          "Google Lens"
        ],
        "summary": "Google Lens visual search",
        "description": "Search Google Lens by image URL for visually similar results.\n\nAccepts Scrapingdog-parity ``country`` / ``language`` aliases on top\nof the native ``gl`` / ``hl``; the aliases take precedence when\nsupplied. Toggling ``product`` / ``visual_matches`` / ``exact_matches``\npasses Google's matching hints through to the upstream Lens page so\nGoogle biases the result mix appropriately.",
        "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": "query",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional text refinement — e.g. 'pizza' to focus Lens on food matches.",
              "title": "Query"
            },
            "description": "Optional text refinement — e.g. 'pizza' to focus Lens on food matches."
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO country code (alias for ``gl``).",
              "title": "Country"
            },
            "description": "ISO country code (alias for ``gl``)."
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Language code (alias for ``hl``).",
              "title": "Language"
            },
            "description": "Language code (alias for ``hl``)."
          },
          {
            "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": "product",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "When True, bias towards shoppable product matches.",
              "default": false,
              "title": "Product"
            },
            "description": "When True, bias towards shoppable product matches."
          },
          {
            "name": "visual_matches",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Include the visual-matches carousel (Scrapingdog parity).",
              "default": true,
              "title": "Visual Matches"
            },
            "description": "Include the visual-matches carousel (Scrapingdog parity)."
          },
          {
            "name": "exact_matches",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Restrict to exact-match results only.",
              "default": false,
              "title": "Exact Matches"
            },
            "description": "Restrict to exact-match results only."
          }
        ],
        "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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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"
                }
              }
            }
          }
        }
      }
    },
    "/v1/google/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\nFor round-trips, follow an outbound offer's ``departure_token`` back into\nthis endpoint to list the **return-leg** flights; each returned offer then\ncarries a fully-selected ``selection_token`` / ``booking_url`` for the\ncomplete itinerary.\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": "googleFlightsSearch",
        "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."
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "top",
                "price"
              ],
              "type": "string",
              "description": "`top` (default) returns Google's ~6-8 'best' picks — fast. `price` returns the full price-sorted inventory (every carrier, the cheap long-layover fares) plus Google's own price floor / typical range / history. `price` is slower (a heavier render) and falls back to the 'top' set under load. Round-trip initial search only.",
              "default": "top",
              "title": "Sort By"
            },
            "description": "`top` (default) returns Google's ~6-8 'best' picks — fast. `price` returns the full price-sorted inventory (every carrier, the cheap long-layover fares) plus Google's own price floor / typical range / history. `price` is slower (a heavier render) and falls back to the 'top' set under load. Round-trip initial search only."
          },
          {
            "name": "departure_token",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "A `departure_token` from a round-trip offer. When set, the search returns the **return-leg** flights for that selected outbound (pass the same `departure_id`/`arrival_id`/dates as the original search). Round-trip only.",
              "title": "Departure Token"
            },
            "description": "A `departure_token` from a round-trip offer. When set, the search returns the **return-leg** flights for that selected outbound (pass the same `departure_id`/`arrival_id`/dates as the original search). Round-trip only."
          }
        ],
        "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": {}
              }
            }
          }
        }
      }
    },
    "/v1/google/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": {}
              }
            }
          }
        }
      }
    },
    "/v1/google/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": "googleFlightsBookingOptions",
        "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",
            "description": "Flight segments. On a round-trip search these are the **outbound** segments only (Google Flights picks the return in a second step) — pass the offer's `departure_token` back to `/flights/search` to list the return-leg options."
          },
          "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",
            "description": "Price exactly as Google Flights displays it: the total for the **entire party** (all passengers), **including mandatory taxes and fees** (optional extras like bags/seats excluded). On a round-trip search this is the lowest complete round-trip total available with this outbound (paired with the cheapest compatible return); the `departure_token` follow-up returns the exact final total per return choice."
          },
          "currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency"
          },
          "price_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "base",
                  "total"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Type",
            "description": "`total` — `price` covers the full itinerary (both legs of a round trip) for all travelers combined."
          },
          "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",
            "description": "Round-trip outbound-selection token (same value as `selection_token`); pre-selects this outbound and advances to the return-flight picker. `None` for one-way searches."
          },
          "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"
          },
          "source_favicon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Favicon"
          },
          "thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail"
          },
          "original_thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Original Thumbnail"
          },
          "tag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tag"
          },
          "price": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProductPrice"
              },
              {
                "type": "null"
              }
            ]
          },
          "in_stock": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "In Stock"
          },
          "rating": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rating"
          },
          "reviews": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviews"
          }
        },
        "type": "object",
        "title": "LensResult",
        "description": "A single visual search result."
      },
      "LensSearchResponse": {
        "properties": {
          "lens_results": {
            "items": {
              "$ref": "#/components/schemas/LensResult"
            },
            "type": "array",
            "title": "Lens Results"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/LensResult"
            },
            "type": "array",
            "title": "Results"
          },
          "related_searches": {
            "items": {
              "$ref": "#/components/schemas/LensRelatedSearch"
            },
            "type": "array",
            "title": "Related Searches"
          },
          "image_url": {
            "type": "string",
            "title": "Image Url"
          }
        },
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "LensSearchResponse",
        "description": "Response for GET /api/v1/lens/search."
      },
      "ProductPrice": {
        "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": "ProductPrice",
        "description": "A price expressed both as the raw display string and a numeric value."
      },
      "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)."
      },
      "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."
      },
      "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."
      },
      "LensRelatedSearch": {
        "properties": {
          "title": {
            "type": "string",
            "title": "Title"
          },
          "link": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Link"
          },
          "thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail"
          }
        },
        "type": "object",
        "required": [
          "title"
        ],
        "title": "LensRelatedSearch",
        "description": "A related-searches chip from the Lens results page."
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key"
      }
    }
  },
  "servers": [
    {
      "url": "https://scrapebadger.com",
      "description": "Production"
    }
  ],
  "security": [
    {
      "apiKeyAuth": []
    }
  ]
}
