{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "SearchAnalyticsQueryRequest",
  "type": "object",
  "description": "Request body for querying search analytics data. Defines the date range, dimensions, filters, and aggregation type for the query.",
  "properties": {
    "startDate": {
      "type": "string",
      "description": "Start date of the requested date range, in YYYY-MM-DD format. Must be less than or equal to the end date. Data is available starting from the date the site was added to Search Console."
    },
    "endDate": {
      "type": "string",
      "description": "End date of the requested date range, in YYYY-MM-DD format. Must be greater than or equal to the start date. There is a processing delay of approximately 2-3 days."
    },
    "dimensions": {
      "type": "array",
      "description": "Zero or more dimensions to group results by. Results are grouped in the order that dimensions are specified. Valid dimensions are date, query, page, country, device, and searchAppearance."
    },
    "type": {
      "type": "string",
      "description": "Filter results to the specified search type. Defaults to web."
    },
    "dimensionFilterGroups": {
      "type": "array",
      "description": "Zero or more groups of dimension filters. All filter groups are ANDed together. Within a group, filters are combined using the group type (AND by default)."
    },
    "aggregationType": {
      "type": "string",
      "description": "How data is aggregated. If auto, data is aggregated by property type. If byPage, all data is aggregated by page. If byProperty, all data is aggregated by property."
    },
    "rowLimit": {
      "type": "integer",
      "description": "Maximum number of rows to return. Valid range is 1 to 25000. Default is 1000."
    },
    "startRow": {
      "type": "integer",
      "description": "Zero-based index of the first row in the response. Must be a non-negative number. Default is 0."
    },
    "dataState": {
      "type": "string",
      "description": "The data state to filter on. If set to final, only finalized data is returned. If set to all, both finalized and fresh data are included."
    }
  }
}