{
  "id": "analyticsdata:v1alpha",
  "resources": {
    "properties": {
      "methods": {
        "getPropertyQuotasSnapshot": {
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "id": "analyticsdata.properties.getPropertyQuotasSnapshot",
          "parameterOrder": [
            "name"
          ],
          "parameters": {
            "name": {
              "required": true,
              "type": "string",
              "location": "path",
              "description": "Required. Quotas from this property will be listed in the response. Format: `properties/{property}/propertyQuotasSnapshot`",
              "pattern": "^properties/[^/]+/propertyQuotasSnapshot$"
            }
          },
          "description": "Get all property quotas organized by quota category for a given property. This will charge 1 property quota from the category with the most quota.",
          "response": {
            "$ref": "PropertyQuotasSnapshot"
          },
          "path": "v1alpha/{+name}",
          "flatPath": "v1alpha/properties/{propertiesId}/propertyQuotasSnapshot",
          "httpMethod": "GET"
        },
        "runFunnelReport": {
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "parameters": {
            "property": {
              "pattern": "^properties/[^/]+$",
              "description": "Optional. A Google Analytics property identifier whose events are tracked. Specified in the URL path and not the body. To learn more, see [where to find your Property ID](https://developers.google.com/analytics/devguides/reporting/data/v1/property-id). Within a batch request, this property should either be unspecified or consistent with the batch-level property. Example: properties/1234",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "id": "analyticsdata.properties.runFunnelReport",
          "parameterOrder": [
            "property"
          ],
          "description": "Returns a customized funnel report of your Google Analytics event data. The data returned from the API is as a table with columns for the requested dimensions and metrics. Funnel exploration lets you visualize the steps your users take to complete a task and quickly see how well they are succeeding or failing at each step. For example, how do prospects become shoppers and then become buyers? How do one time buyers become repeat buyers? With this information, you can improve inefficient or abandoned customer journeys. To learn more, see [GA4 Funnel Explorations](https://support.google.com/analytics/answer/9327974). This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Data API Funnel Reporting Feedback](https://docs.google.com/forms/d/e/1FAIpQLSdwOlQDJAUoBiIgUZZ3S_Lwi8gr7Bb0k1jhvc-DEg7Rol3UjA/viewform).",
          "response": {
            "$ref": "RunFunnelReportResponse"
          },
          "path": "v1alpha/{+property}:runFunnelReport",
          "flatPath": "v1alpha/properties/{propertiesId}:runFunnelReport",
          "httpMethod": "POST",
          "request": {
            "$ref": "RunFunnelReportRequest"
          }
        }
      },
      "resources": {
        "audienceLists": {
          "methods": {
            "create": {
              "request": {
                "$ref": "AudienceList"
              },
              "httpMethod": "POST",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists",
              "path": "v1alpha/{+parent}/audienceLists",
              "response": {
                "$ref": "Operation"
              },
              "description": "Creates an audience list for later retrieval. This method quickly returns the audience list's resource name and initiates a long running asynchronous request to form an audience list. To list the users in an audience list, first create the audience list through this method and then send the audience resource name to the `QueryAudienceList` method. See [Creating an Audience List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) for an introduction to Audience Lists with examples. An audience list is a snapshot of the users currently in the audience at the time of audience list creation. Creating audience lists for one audience on different days will return different results as users enter and exit the audience. Audiences in Google Analytics 4 allow you to segment your users in the ways that are important to your business. To learn more, see https://support.google.com/analytics/answer/9267572. Audience lists contain the users in each audience. This method is available at beta stability at [audienceExports.create](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties.audienceExports/create). To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "parameters": {
                "parent": {
                  "required": true,
                  "type": "string",
                  "description": "Required. The parent resource where this audience list will be created. Format: `properties/{property}`",
                  "location": "path",
                  "pattern": "^properties/[^/]+$"
                }
              },
              "id": "analyticsdata.properties.audienceLists.create",
              "parameterOrder": [
                "parent"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ]
            },
            "query": {
              "response": {
                "$ref": "QueryAudienceListResponse"
              },
              "description": "Retrieves an audience list of users. After creating an audience, the users are not immediately available for listing. First, a request to `CreateAudienceList` is necessary to create an audience list of users, and then second, this method is used to retrieve the users in the audience list. See [Creating an Audience List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) for an introduction to Audience Lists with examples. Audiences in Google Analytics 4 allow you to segment your users in the ways that are important to your business. To learn more, see https://support.google.com/analytics/answer/9267572. This method is available at beta stability at [audienceExports.query](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties.audienceExports/query). To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "id": "analyticsdata.properties.audienceLists.query",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$",
                  "description": "Required. The name of the audience list to retrieve users from. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "request": {
                "$ref": "QueryAudienceListRequest"
              },
              "httpMethod": "POST",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}:query",
              "path": "v1alpha/{+name}:query"
            },
            "get": {
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}",
              "path": "v1alpha/{+name}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "required": true,
                  "type": "string",
                  "description": "Required. The audience list resource name. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "location": "path",
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$"
                }
              },
              "id": "analyticsdata.properties.audienceLists.get",
              "parameterOrder": [
                "name"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "response": {
                "$ref": "AudienceList"
              },
              "description": "Gets configuration metadata about a specific audience list. This method can be used to understand an audience list after it has been created. See [Creating an Audience List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) for an introduction to Audience Lists with examples. This method is available at beta stability at [audienceExports.get](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties.audienceExports/get). To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form."
            },
            "list": {
              "httpMethod": "GET",
              "path": "v1alpha/{+parent}/audienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists",
              "description": "Lists all audience lists for a property. This method can be used for you to find and reuse existing audience lists rather than creating unnecessary new audience lists. The same audience can have multiple audience lists that represent the list of users that were in an audience on different days. See [Creating an Audience List](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-basics) for an introduction to Audience Lists with examples. This method is available at beta stability at [audienceExports.list](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties.audienceExports/list). To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "response": {
                "$ref": "ListAudienceListsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "id": "analyticsdata.properties.audienceLists.list",
              "parameterOrder": [
                "parent"
              ],
              "parameters": {
                "pageToken": {
                  "location": "query",
                  "description": "Optional. A page token, received from a previous `ListAudienceLists` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListAudienceLists` must match the call that provided the page token.",
                  "type": "string"
                },
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "description": "Required. All audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "type": "integer",
                  "location": "query",
                  "description": "Optional. The maximum number of audience lists to return. The service may return fewer than this value. If unspecified, at most 200 audience lists will be returned. The maximum value is 1000 (higher values will be coerced to the maximum).",
                  "format": "int32"
                }
              }
            }
          }
        },
        "recurringAudienceLists": {
          "methods": {
            "list": {
              "description": "Lists all recurring audience lists for a property. This method can be used for you to find and reuse existing recurring audience lists rather than creating unnecessary new recurring audience lists. The same audience can have multiple recurring audience lists that represent different dimension combinations; for example, just the dimension `deviceId` or both the dimensions `deviceId` and `userId`. This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "response": {
                "$ref": "ListRecurringAudienceListsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "parameters": {
                "pageToken": {
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListRecurringAudienceLists` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRecurringAudienceLists` must match the call that provided the page token.",
                  "location": "query"
                },
                "parent": {
                  "required": true,
                  "type": "string",
                  "description": "Required. All recurring audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "location": "path",
                  "pattern": "^properties/[^/]+$"
                },
                "pageSize": {
                  "type": "integer",
                  "location": "query",
                  "description": "Optional. The maximum number of recurring audience lists to return. The service may return fewer than this value. If unspecified, at most 200 recurring audience lists will be returned. The maximum value is 1000 (higher values will be coerced to the maximum).",
                  "format": "int32"
                }
              },
              "id": "analyticsdata.properties.recurringAudienceLists.list",
              "parameterOrder": [
                "parent"
              ],
              "httpMethod": "GET",
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists"
            },
            "create": {
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists",
              "httpMethod": "POST",
              "request": {
                "$ref": "RecurringAudienceList"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "description": "Required. The parent resource where this recurring audience list will be created. Format: `properties/{property}`",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "id": "analyticsdata.properties.recurringAudienceLists.create",
              "parameterOrder": [
                "parent"
              ],
              "description": "Creates a recurring audience list. Recurring audience lists produces new audience lists each day. Audience lists are users in an audience at the time of the list's creation. A recurring audience list ensures that you have audience list based on the most recent data available for use each day. If you manually create audience list, you don't know when an audience list based on an additional day's data is available. This recurring audience list automates the creation of an audience list when an additional day's data is available. You will consume fewer quota tokens by using recurring audience list versus manually creating audience list at various times of day trying to guess when an additional day's data is ready. This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "response": {
                "$ref": "RecurringAudienceList"
              }
            },
            "get": {
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The recurring audience list resource name. Format: `properties/{property}/recurringAudienceLists/{recurring_audience_list}`",
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "pattern": "^properties/[^/]+/recurringAudienceLists/[^/]+$"
                }
              },
              "id": "analyticsdata.properties.recurringAudienceLists.get",
              "parameterOrder": [
                "name"
              ],
              "description": "Gets configuration metadata about a specific recurring audience list. This method can be used to understand a recurring audience list's state after it has been created. For example, a recurring audience list resource will generate audience list instances for each day, and this method can be used to get the resource name of the most recent audience list instance. This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "response": {
                "$ref": "RecurringAudienceList"
              },
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists/{recurringAudienceListsId}",
              "httpMethod": "GET"
            }
          }
        },
        "reportTasks": {
          "methods": {
            "create": {
              "id": "analyticsdata.properties.reportTasks.create",
              "parameterOrder": [
                "parent"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The parent resource where this report task will be created. Format: `properties/{propertyId}`",
                  "location": "path"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "response": {
                "$ref": "Operation"
              },
              "description": "Initiates the creation of a report task. This method quickly returns a report task and initiates a long running asynchronous request to form a customized report of your Google Analytics event data. A report task will be retained and available for querying for 72 hours after it has been created. A report task created by one user can be listed and queried by all users who have access to the property.",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks",
              "path": "v1alpha/{+parent}/reportTasks",
              "request": {
                "$ref": "ReportTask"
              },
              "httpMethod": "POST"
            },
            "query": {
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "id": "analyticsdata.properties.reportTasks.query",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. The report source name. Format: `properties/{property}/reportTasks/{report}`",
                  "location": "path"
                }
              },
              "description": "Retrieves a report task's content. After requesting the `CreateReportTask`, you are able to retrieve the report content once the report is ACTIVE. This method will return an error if the report task's state is not `ACTIVE`. A query response will return the tabular row & column values of the report.",
              "response": {
                "$ref": "QueryReportTaskResponse"
              },
              "path": "v1alpha/{+name}:query",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}:query",
              "httpMethod": "POST",
              "request": {
                "$ref": "QueryReportTaskRequest"
              }
            },
            "get": {
              "description": "Gets report metadata about a specific report task. After creating a report task, use this method to check its processing state or inspect its report definition.",
              "response": {
                "$ref": "ReportTask"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "id": "analyticsdata.properties.reportTasks.get",
              "parameterOrder": [
                "name"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The report task resource name. Format: `properties/{property}/reportTasks/{report_task}`",
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$"
                }
              },
              "httpMethod": "GET",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}"
            },
            "list": {
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "parameters": {
                "pageToken": {
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListReportTasks` call. Provide this to retrieve the subsequent page.",
                  "location": "query"
                },
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "required": true,
                  "type": "string",
                  "description": "Required. All report tasks for this property will be listed in the response. Format: `properties/{property}`",
                  "location": "path"
                },
                "pageSize": {
                  "location": "query",
                  "description": "Optional. The maximum number of report tasks to return.",
                  "format": "int32",
                  "type": "integer"
                }
              },
              "id": "analyticsdata.properties.reportTasks.list",
              "parameterOrder": [
                "parent"
              ],
              "description": "Lists all report tasks for a property.",
              "response": {
                "$ref": "ListReportTasksResponse"
              },
              "path": "v1alpha/{+parent}/reportTasks",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks",
              "httpMethod": "GET"
            }
          }
        }
      }
    }
  },
  "batchPath": "batch",
  "basePath": "",
  "version_module": true,
  "fullyEncodeReservedExpansion": true,
  "kind": "discovery#restDescription",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/analytics": {
          "description": "View and manage your Google Analytics data"
        },
        "https://www.googleapis.com/auth/analytics.readonly": {
          "description": "See and download your Google Analytics data"
        }
      }
    }
  },
  "servicePath": "",
  "mtlsRootUrl": "https://analyticsdata.mtls.googleapis.com/",
  "name": "analyticsdata",
  "title": "Google Analytics Data API",
  "version": "v1alpha",
  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/data/v1/",
  "ownerName": "Google",
  "protocol": "rest",
  "parameters": {
    "prettyPrint": {
      "type": "boolean",
      "default": "true",
      "location": "query",
      "description": "Returns response with indentations and line breaks."
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "location": "query",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ]
    },
    "quotaUser": {
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query",
      "type": "string"
    },
    "access_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth access token."
    },
    "upload_protocol": {
      "type": "string",
      "location": "query",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "key": {
      "type": "string",
      "location": "query",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "type": "string",
      "location": "query",
      "description": "V1 error format."
    },
    "oauth_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth 2.0 token for the current user."
    },
    "fields": {
      "location": "query",
      "description": "Selector specifying which fields to include in a partial response.",
      "type": "string"
    }
  },
  "ownerDomain": "google.com",
  "canonicalName": "AnalyticsData",
  "discoveryVersion": "v1",
  "revision": "20260408",
  "description": "Accesses report data in Google Analytics. Warning: Creating multiple Customer Applications, Accounts, or Projects to simulate or act as a single Customer Application, Account, or Project (respectively) or to circumvent Service-specific usage limits or quotas is a direct violation of Google Cloud Platform Terms of Service as well as Google APIs Terms of Service. These actions can result in immediate termination of your GCP project(s) without any warning. ",
  "baseUrl": "https://analyticsdata.googleapis.com/",
  "rootUrl": "https://analyticsdata.googleapis.com/",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "schemas": {
    "QueryReportTaskRequest": {
      "description": "A request to fetch the report content for a report task.",
      "properties": {
        "offset": {
          "type": "string",
          "description": "Optional. The row count of the start row in the report. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        },
        "limit": {
          "type": "string",
          "description": "Optional. The number of rows to return from the report. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. The number of rows available to a QueryReportTaskRequest is further limited by the limit of the associated ReportTask. A query can retrieve at most ReportTask.limit rows. For example, if the ReportTask has a limit of 1,000, then a QueryReportTask request with offset=900 and limit=500 will return at most 100 rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        }
      },
      "id": "QueryReportTaskRequest",
      "type": "object"
    },
    "Cohort": {
      "properties": {
        "dimension": {
          "type": "string",
          "description": "Dimension used by the cohort. Required and only supports `firstSessionDate`."
        },
        "dateRange": {
          "description": "The cohort selects users whose first touch date is between start date and end date defined in the `dateRange`. This `dateRange` does not specify the full date range of event data that is present in a cohort report. In a cohort report, this `dateRange` is extended by the granularity and offset present in the `cohortsRange`; event data for the extended reporting date range is present in a cohort report. In a cohort request, this `dateRange` is required and the `dateRanges` in the `RunReportRequest` or `RunPivotReportRequest` must be unspecified. This `dateRange` should generally be aligned with the cohort's granularity. If `CohortsRange` uses daily granularity, this `dateRange` can be a single day. If `CohortsRange` uses weekly granularity, this `dateRange` can be aligned to a week boundary, starting at Sunday and ending Saturday. If `CohortsRange` uses monthly granularity, this `dateRange` can be aligned to a month, starting at the first and ending on the last day of the month.",
          "$ref": "DateRange"
        },
        "name": {
          "type": "string",
          "description": "Assigns a name to this cohort. The dimension `cohort` is valued to this name in a report response. If set, cannot begin with `cohort_` or `RESERVED_`. If not set, cohorts are named by their zero based index `cohort_0`, `cohort_1`, etc."
        }
      },
      "id": "Cohort",
      "type": "object",
      "description": "Defines a cohort selection criteria. A cohort is a group of users who share a common characteristic. For example, users with the same `firstSessionDate` belong to the same cohort."
    },
    "AudienceListMetadata": {
      "id": "AudienceListMetadata",
      "type": "object",
      "properties": {},
      "description": "This metadata is currently blank."
    },
    "ReportMetadata": {
      "description": "The report metadata for a specific report task.",
      "id": "ReportMetadata",
      "type": "object",
      "properties": {
        "creationQuotaTokensCharged": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The total quota tokens charged during creation of the report. Because this token count is based on activity from the `CREATING` state, this tokens charge will be fixed once a report task enters the `ACTIVE` or `FAILED` state.",
          "format": "int32"
        },
        "totalRowCount": {
          "description": "Output only. The total number of rows in Google Analytics storage. If you want to query additional data rows beyond the current report, they can initiate a new report task based on the `total_row_count`. The `task_row_count` represents the number of rows specifically pertaining to the current report, whereas `total_row_count` encompasses the total count of rows across all data retrieved from Google Analytics storage. For example, suppose the current report's `task_row_count` is 20, displaying the data from the first 20 rows. Simultaneously, the `total_row_count` is 30, indicating the presence of data for all 30 rows. The `task_row_count` can be utilizated to paginate through the initial 20 rows. To expand the report and include data from all 30 rows, a new report task can be created using the total_row_count to access the full set of 30 rows' worth of data.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "state": {
          "enumDescriptions": [
            "Unspecified state will never be used.",
            "The report is currently creating and will be available in the future. Creating occurs immediately after the CreateReport call.",
            "The report is fully created and ready for querying.",
            "The report failed to be created."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "CREATING",
            "ACTIVE",
            "FAILED"
          ],
          "description": "Output only. The current state for this report task.",
          "type": "string",
          "readOnly": true
        },
        "errorMessage": {
          "description": "Output only. Error message is populated if a report task fails during creation.",
          "readOnly": true,
          "type": "string"
        },
        "taskRowCount": {
          "description": "Output only. The total number of rows in the report result. This field will be populated when the state is active. You can utilize `task_row_count` for pagination within the confines of their existing report.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "beginCreatingTime": {
          "description": "Output only. The time when `CreateReportTask` was called and the report began the `CREATING` state.",
          "format": "google-datetime",
          "type": "string",
          "readOnly": true
        }
      }
    },
    "SegmentFilter": {
      "description": "An expression to filter dimension or metric values.",
      "id": "SegmentFilter",
      "type": "object",
      "properties": {
        "filterScoping": {
          "description": "Specifies the scope for the filter.",
          "$ref": "SegmentFilterScoping"
        },
        "fieldName": {
          "description": "The dimension name or metric name.",
          "type": "string"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        }
      }
    },
    "SegmentFilterExpression": {
      "description": "Expresses combinations of segment filters.",
      "properties": {
        "orGroup": {
          "description": "The SegmentFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "SegmentFilterExpressionList"
        },
        "andGroup": {
          "description": "The SegmentFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "SegmentFilterExpressionList"
        },
        "segmentFilter": {
          "description": "A primitive segment filter.",
          "$ref": "SegmentFilter"
        },
        "segmentEventFilter": {
          "description": "Creates a filter that matches events of a single event name. If a parameter filter expression is specified, only the subset of events that match both the single event name and the parameter filter expressions match this event filter.",
          "$ref": "SegmentEventFilter"
        },
        "notExpression": {
          "description": "The SegmentFilterExpression is NOT of `notExpression`.",
          "$ref": "SegmentFilterExpression"
        }
      },
      "id": "SegmentFilterExpression",
      "type": "object"
    },
    "SamplingMetadata": {
      "description": "If funnel report results are [sampled](https://support.google.com/analytics/answer/13331292), this metadata describes what percentage of events were used in this funnel report for a date range. Sampling is the practice of analyzing a subset of all data in order to uncover the meaningful information in the larger data set.",
      "properties": {
        "samplesReadCount": {
          "type": "string",
          "description": "The total number of events read in this sampled report for a date range. This is the size of the subset this property's data that was analyzed in this funnel report.",
          "format": "int64"
        },
        "samplingSpaceSize": {
          "type": "string",
          "description": "The total number of events present in this property's data that could have been analyzed in this funnel report for a date range. Sampling uncovers the meaningful information about the larger data set, and this is the size of the larger data set. To calculate the percentage of available data that was used in this funnel report, compute `samplesReadCount/samplingSpaceSize`.",
          "format": "int64"
        }
      },
      "id": "SamplingMetadata",
      "type": "object"
    },
    "Row": {
      "description": "Report data for each row. For example if RunReportRequest contains: ```none \"dimensions\": [ { \"name\": \"eventName\" }, { \"name\": \"countryId\" } ], \"metrics\": [ { \"name\": \"eventCount\" } ] ``` One row with 'in_app_purchase' as the eventName, 'JP' as the countryId, and 15 as the eventCount, would be: ```none \"dimensionValues\": [ { \"value\": \"in_app_purchase\" }, { \"value\": \"JP\" } ], \"metricValues\": [ { \"value\": \"15\" } ] ```",
      "id": "Row",
      "type": "object",
      "properties": {
        "dimensionValues": {
          "description": "List of requested dimension values. In a PivotReport, dimension_values are only listed for dimensions included in a pivot.",
          "type": "array",
          "items": {
            "$ref": "DimensionValue"
          }
        },
        "metricValues": {
          "type": "array",
          "items": {
            "$ref": "MetricValue"
          },
          "description": "List of requested visible metric values."
        }
      }
    },
    "DimensionValue": {
      "description": "The value of a dimension.",
      "id": "DimensionValue",
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "description": "Value as a string if the dimension type is a string."
        }
      }
    },
    "Operation": {
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "id": "Operation",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "Status"
        },
        "response": {
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
        },
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        },
        "metadata": {
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "type": "object",
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."
        }
      }
    },
    "FunnelEventFilter": {
      "description": "Creates a filter that matches events of a single event name. If a parameter filter expression is specified, only the subset of events that match both the single event name and the parameter filter expressions match this event filter.",
      "properties": {
        "eventName": {
          "description": "This filter matches events of this single event name. Event name is required.",
          "type": "string"
        },
        "funnelParameterFilterExpression": {
          "description": "If specified, this filter matches events that match both the single event name and the parameter filter expressions. Inside the parameter filter expression, only parameter filters are available.",
          "$ref": "FunnelParameterFilterExpression"
        }
      },
      "id": "FunnelEventFilter",
      "type": "object"
    },
    "EmptyFilter": {
      "description": "Filter for empty values.",
      "id": "EmptyFilter",
      "type": "object",
      "properties": {}
    },
    "ListRecurringAudienceListsResponse": {
      "id": "ListRecurringAudienceListsResponse",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "recurringAudienceLists": {
          "description": "Each recurring audience list for a property.",
          "type": "array",
          "items": {
            "$ref": "RecurringAudienceList"
          }
        }
      },
      "description": "A list of all recurring audience lists for a property."
    },
    "FilterExpression": {
      "description": "To express dimension or metric filters. The fields in the same FilterExpression need to be either all dimensions or all metrics.",
      "properties": {
        "orGroup": {
          "description": "The FilterExpressions in or_group have an OR relationship.",
          "$ref": "FilterExpressionList"
        },
        "filter": {
          "description": "A primitive filter. In the same FilterExpression, all of the filter's field names need to be either all dimensions or all metrics.",
          "$ref": "Filter"
        },
        "andGroup": {
          "description": "The FilterExpressions in and_group have an AND relationship.",
          "$ref": "FilterExpressionList"
        },
        "notExpression": {
          "description": "The FilterExpression is NOT of not_expression.",
          "$ref": "FilterExpression"
        }
      },
      "id": "FilterExpression",
      "type": "object"
    },
    "QueryAudienceListRequest": {
      "description": "A request to list users in an audience list.",
      "properties": {
        "limit": {
          "type": "string",
          "description": "Optional. The number of rows to return. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        },
        "offset": {
          "description": "Optional. The row count of the start row. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64",
          "type": "string"
        }
      },
      "id": "QueryAudienceListRequest",
      "type": "object"
    },
    "RunFunnelReportRequest": {
      "description": "The request for a funnel report.",
      "id": "RunFunnelReportRequest",
      "type": "object",
      "properties": {
        "funnelNextAction": {
          "description": "Optional. If specified, next action adds a dimension to the funnel visualization sub report response. This next action dimension expands each funnel step to the unique values of the next action. For example a next action of the `eventName` dimension will create rows for several events (for example `session_start` & `click`) and the total. Next action only supports `eventName` and most Page / Screen dimensions like `pageTitle` and `pagePath`.",
          "$ref": "FunnelNextAction"
        },
        "segments": {
          "type": "array",
          "items": {
            "$ref": "Segment"
          },
          "description": "Optional. The configurations of segments. Segments are subsets of a property's data. In a funnel report with segments, the funnel is evaluated in each segment. Each segment specified in this request produces a separate row in the response; in the response, each segment identified by its name. The segments parameter is optional. Requests are limited to 4 segments."
        },
        "returnPropertyQuota": {
          "type": "boolean",
          "description": "Optional. Toggles whether to return the current state of this Analytics Property's quota. Quota is returned in [PropertyQuota](#PropertyQuota)."
        },
        "funnelBreakdown": {
          "description": "Optional. If specified, this breakdown adds a dimension to the funnel table sub report response. This breakdown dimension expands each funnel step to the unique values of the breakdown dimension. For example, a breakdown by the `deviceCategory` dimension will create rows for `mobile`, `tablet`, `desktop`, and the total.",
          "$ref": "FunnelBreakdown"
        },
        "funnel": {
          "description": "Optional. The configuration of this request's funnel. This funnel configuration is required.",
          "$ref": "Funnel"
        },
        "limit": {
          "description": "Optional. The number of rows to return. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`.",
          "format": "int64",
          "type": "string"
        },
        "funnelVisualizationType": {
          "type": "string",
          "enum": [
            "FUNNEL_VISUALIZATION_TYPE_UNSPECIFIED",
            "STANDARD_FUNNEL",
            "TRENDED_FUNNEL"
          ],
          "description": "Optional. The funnel visualization type controls the dimensions present in the funnel visualization sub report response. If not specified, `STANDARD_FUNNEL` is used.",
          "enumDescriptions": [
            "Unspecified type.",
            "A standard (stepped) funnel. The funnel visualization sub report in the response will not contain date.",
            "A trended (line chart) funnel. The funnel visualization sub report in the response will contain the date dimension."
          ]
        },
        "dimensionFilter": {
          "description": "Optional. Dimension filters allow you to ask for only specific dimension values in the report. To learn more, see [Creating a Report: Dimension Filters](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#dimension_filters) for examples. Metrics cannot be used in this filter.",
          "$ref": "FilterExpression"
        },
        "dateRanges": {
          "description": "Optional. Date ranges of data to read. If multiple date ranges are requested, each response row will contain a zero based date range index. If two date ranges overlap, the event data for the overlapping days is included in the response rows for both date ranges.",
          "type": "array",
          "items": {
            "$ref": "DateRange"
          }
        }
      }
    },
    "Dimension": {
      "description": "Dimensions are attributes of your data. For example, the dimension city indicates the city from which an event originates. Dimension values in report responses are strings; for example, the city could be \"Paris\" or \"New York\".",
      "properties": {
        "name": {
          "description": "The name of the dimension. See the [API Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions) for the list of dimension names supported by core reporting methods such as `runReport` and `batchRunReports`. See [Realtime Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/realtime-api-schema#dimensions) for the list of dimension names supported by the `runRealtimeReport` method. See [Funnel Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/exploration-api-schema#dimensions) for the list of dimension names supported by the `runFunnelReport` method. If `dimensionExpression` is specified, `name` can be any string that you would like within the allowed character set. For example if a `dimensionExpression` concatenates `country` and `city`, you could call that dimension `countryAndCity`. Dimension names that you choose must match the regular expression `^[a-zA-Z0-9_]$`. Dimensions are referenced by `name` in `dimensionFilter`, `orderBys`, `dimensionExpression`, and `pivots`.",
          "type": "string"
        },
        "dimensionExpression": {
          "description": "One dimension can be the result of an expression of multiple dimensions. For example, dimension \"country, city\": concatenate(country, \", \", city).",
          "$ref": "DimensionExpression"
        }
      },
      "id": "Dimension",
      "type": "object"
    },
    "QuotaStatus": {
      "properties": {
        "consumed": {
          "type": "integer",
          "description": "Quota consumed by this request.",
          "format": "int32"
        },
        "remaining": {
          "type": "integer",
          "description": "Quota remaining after this request.",
          "format": "int32"
        }
      },
      "id": "QuotaStatus",
      "type": "object",
      "description": "Current state for a particular quota group."
    },
    "QueryReportTaskResponse": {
      "properties": {
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "totals": {
          "description": "If requested, the totaled values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "dimensionHeaders": {
          "description": "Describes dimension columns. The number of DimensionHeaders and ordering of DimensionHeaders matches the dimensions present in rows.",
          "type": "array",
          "items": {
            "$ref": "DimensionHeader"
          }
        },
        "metadata": {
          "description": "Metadata for the report.",
          "$ref": "ResponseMetaData"
        },
        "metricHeaders": {
          "description": "Describes metric columns. The number of MetricHeaders and ordering of MetricHeaders matches the metrics present in rows.",
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          }
        },
        "maximums": {
          "type": "array",
          "items": {
            "$ref": "Row"
          },
          "description": "If requested, the maximum values of metrics."
        },
        "minimums": {
          "type": "array",
          "items": {
            "$ref": "Row"
          },
          "description": "If requested, the minimum values of metrics."
        },
        "rowCount": {
          "type": "integer",
          "description": "The total number of rows in the query result.",
          "format": "int32"
        }
      },
      "id": "QueryReportTaskResponse",
      "type": "object",
      "description": "The report content corresponding to a report task."
    },
    "SegmentFilterExpressionList": {
      "description": "A list of segment filter expressions.",
      "id": "SegmentFilterExpressionList",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "The list of segment filter expressions",
          "type": "array",
          "items": {
            "$ref": "SegmentFilterExpression"
          }
        }
      }
    },
    "SegmentEventFilter": {
      "description": "Creates a filter that matches events of a single event name. If a parameter filter expression is specified, only the subset of events that match both the single event name and the parameter filter expressions match this event filter.",
      "properties": {
        "eventName": {
          "description": "This filter matches events of this single event name. Event name is required.",
          "type": "string"
        },
        "segmentParameterFilterExpression": {
          "description": "If specified, this filter matches events that match both the single event name and the parameter filter expressions. Inside the parameter filter expression, only parameter filters are available.",
          "$ref": "SegmentParameterFilterExpression"
        }
      },
      "id": "SegmentEventFilter",
      "type": "object"
    },
    "OrderBy": {
      "description": "Order bys define how rows will be sorted in the response. For example, ordering rows by descending event count is one ordering, and ordering rows by the event name string is a different ordering.",
      "id": "OrderBy",
      "type": "object",
      "properties": {
        "metric": {
          "description": "Sorts results by a metric's values.",
          "$ref": "MetricOrderBy"
        },
        "desc": {
          "description": "If true, sorts by descending order.",
          "type": "boolean"
        },
        "dimension": {
          "description": "Sorts results by a dimension's values.",
          "$ref": "DimensionOrderBy"
        }
      }
    },
    "FunnelParameterFilter": {
      "description": "An expression to filter parameter values in a funnel.",
      "id": "FunnelParameterFilter",
      "type": "object",
      "properties": {
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "eventParameterName": {
          "description": "This filter will be evaluated on the specified event parameter. Event parameters are logged as parameters of the event. Event parameters include fields like \"firebase_screen\" & \"currency\". Event parameters can only be used in segments & funnels and can only be used in a descendent filter from an EventFilter. In a descendent filter from an EventFilter either event or item parameters should be used.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "itemParameterName": {
          "type": "string",
          "description": "This filter will be evaluated on the specified item parameter. Item parameters are logged as parameters in the item array. Item parameters include fields like \"item_name\" & \"item_category\". Item parameters can only be used in segments & funnels and can only be used in a descendent filter from an EventFilter. In a descendent filter from an EventFilter either event or item parameters should be used. Item parameters are only available in ecommerce events. To learn more about ecommerce events, see the [Measure ecommerce] (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) guide."
        }
      }
    },
    "MetricOrderBy": {
      "description": "Sorts by metric values.",
      "properties": {
        "metricName": {
          "description": "A metric name in the request to order by.",
          "type": "string"
        }
      },
      "id": "MetricOrderBy",
      "type": "object"
    },
    "CaseExpression": {
      "id": "CaseExpression",
      "type": "object",
      "properties": {
        "dimensionName": {
          "description": "Name of a dimension. The name must refer back to a name in dimensions field of the request.",
          "type": "string"
        }
      },
      "description": "Used to convert a dimension value to a single case."
    },
    "SchemaRestrictionResponse": {
      "id": "SchemaRestrictionResponse",
      "type": "object",
      "properties": {
        "activeMetricRestrictions": {
          "description": "All restrictions actively enforced in creating the report. For example, `purchaseRevenue` always has the restriction type `REVENUE_DATA`. However, this active response restriction is only populated if the user's custom role disallows access to `REVENUE_DATA`.",
          "type": "array",
          "items": {
            "$ref": "ActiveMetricRestriction"
          }
        }
      },
      "description": "The schema restrictions actively enforced in creating this report. To learn more, see [Access and data-restriction management](https://support.google.com/analytics/answer/10851388)."
    },
    "SessionSegment": {
      "properties": {
        "sessionInclusionCriteria": {
          "description": "Defines which sessions are included in this segment. Optional.",
          "$ref": "SessionSegmentCriteria"
        },
        "exclusion": {
          "description": "Defines which sessions are excluded in this segment. Optional.",
          "$ref": "SessionSegmentExclusion"
        }
      },
      "id": "SessionSegment",
      "type": "object",
      "description": "Session segments are subsets of the sessions that occurred on your site or app: for example, all the sessions that originated from a particular advertising campaign."
    },
    "UserSegment": {
      "description": "User segments are subsets of users who engaged with your site or app. For example, users who have previously purchased; users who added items to their shopping carts, but didn’t complete a purchase.",
      "id": "UserSegment",
      "type": "object",
      "properties": {
        "exclusion": {
          "description": "Defines which users are excluded in this segment. Optional.",
          "$ref": "UserSegmentExclusion"
        },
        "userInclusionCriteria": {
          "description": "Defines which users are included in this segment. Optional.",
          "$ref": "UserSegmentCriteria"
        }
      }
    },
    "MetricHeader": {
      "id": "MetricHeader",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The metric's name."
        },
        "type": {
          "description": "The metric's data type.",
          "enumDescriptions": [
            "Unspecified type.",
            "Integer type.",
            "Floating point type.",
            "A duration of seconds; a special floating point type.",
            "A duration in milliseconds; a special floating point type.",
            "A duration in minutes; a special floating point type.",
            "A duration in hours; a special floating point type.",
            "A custom metric of standard type; a special floating point type.",
            "An amount of money; a special floating point type.",
            "A length in feet; a special floating point type.",
            "A length in miles; a special floating point type.",
            "A length in meters; a special floating point type.",
            "A length in kilometers; a special floating point type."
          ],
          "type": "string",
          "enum": [
            "METRIC_TYPE_UNSPECIFIED",
            "TYPE_INTEGER",
            "TYPE_FLOAT",
            "TYPE_SECONDS",
            "TYPE_MILLISECONDS",
            "TYPE_MINUTES",
            "TYPE_HOURS",
            "TYPE_STANDARD",
            "TYPE_CURRENCY",
            "TYPE_FEET",
            "TYPE_MILES",
            "TYPE_METERS",
            "TYPE_KILOMETERS"
          ]
        }
      },
      "description": "Describes a metric column in the report. Visible metrics requested in a report produce column entries within rows and MetricHeaders. However, metrics used exclusively within filters or expressions do not produce columns in a report; correspondingly, those metrics do not produce headers."
    },
    "NumericValue": {
      "id": "NumericValue",
      "type": "object",
      "properties": {
        "int64Value": {
          "description": "Integer value",
          "format": "int64",
          "type": "string"
        },
        "doubleValue": {
          "description": "Double value",
          "format": "double",
          "type": "number"
        }
      },
      "description": "To represent a number."
    },
    "Funnel": {
      "id": "Funnel",
      "type": "object",
      "properties": {
        "isOpenFunnel": {
          "type": "boolean",
          "description": "In an open funnel, users can enter the funnel in any step, and in a closed funnel, users must enter the funnel in the first step. Optional. If unspecified, a closed funnel is used."
        },
        "steps": {
          "type": "array",
          "items": {
            "$ref": "FunnelStep"
          },
          "description": "The sequential steps of this funnel."
        }
      },
      "description": "Configures the funnel in a funnel report request. A funnel reports on users as they pass through a sequence of steps. Funnel exploration lets you visualize the steps your users take to complete a task and quickly see how well they are succeeding or failing at each step. For example, how do prospects become shoppers and then become buyers? How do one time buyers become repeat buyers? With this information, you can improve inefficient or abandoned customer journeys."
    },
    "SessionSegmentConditionGroup": {
      "description": "Conditions tell Analytics what data to include in or exclude from the segment.",
      "properties": {
        "conditionScoping": {
          "description": "Data is included or excluded from the segment based on if it matches the condition group. This scoping defines how many events the `segmentFilterExpression` is evaluated on before the condition group is determined to be matched or not. For example if `conditionScoping = SESSION_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all events in a session, and then, the condition group is determined to be matched or not for this session. For example if `conditionScoping = SESSION_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a single event, and then, the condition group is determined to be matched or not for this session. Optional. If unspecified, a `conditionScoping` of `WITHIN_SAME_SESSION` is used.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the session matches the criteria.",
            "If the criteria is satisfied within one session, the session matches the criteria."
          ],
          "type": "string",
          "enum": [
            "SESSION_CRITERIA_SCOPING_UNSPECIFIED",
            "SESSION_CRITERIA_WITHIN_SAME_EVENT",
            "SESSION_CRITERIA_WITHIN_SAME_SESSION"
          ]
        },
        "segmentFilterExpression": {
          "description": "Data is included or excluded from the segment based on if it matches this expression. Expressions express criteria on dimension, metrics, and/or parameters.",
          "$ref": "SegmentFilterExpression"
        }
      },
      "id": "SessionSegmentConditionGroup",
      "type": "object"
    },
    "ReportDefinition": {
      "description": "The definition of how a report should be run.",
      "id": "ReportDefinition",
      "type": "object",
      "properties": {
        "metricFilter": {
          "description": "Optional. The filter clause of metrics. Applied after aggregating the report's rows, similar to SQL having-clause. Dimensions cannot be used in this filter.",
          "$ref": "FilterExpression"
        },
        "orderBys": {
          "type": "array",
          "items": {
            "$ref": "OrderBy"
          },
          "description": "Optional. Specifies how rows are ordered in the response."
        },
        "samplingLevel": {
          "type": "string",
          "enum": [
            "SAMPLING_LEVEL_UNSPECIFIED",
            "LOW",
            "MEDIUM",
            "UNSAMPLED"
          ],
          "description": "Optional. The report's sampling level.",
          "enumDescriptions": [
            "Unspecified type.",
            "Applies a sampling level of 10 million to standard properties and 100 million to Google Analytics 360 properties.",
            "Exclusive to Google Analytics 360 properties with a sampling level of 1 billion.",
            "Exclusive to Google Analytics 360 properties. Unsampled explorations are more accurate and can reveal insights that aren't visible in standard explorations. To learn more, see https://support.google.com/analytics/answer/10896953."
          ]
        },
        "dimensionFilter": {
          "description": "Optional. Dimension filters let you ask for only specific dimension values in the report. To learn more, see [Fundamentals of Dimension Filters](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#dimension_filters) for examples. Metrics cannot be used in this filter.",
          "$ref": "FilterExpression"
        },
        "keepEmptyRows": {
          "description": "Optional. If false or unspecified, each row with all metrics equal to 0 will not be returned. If true, these rows will be returned if they are not separately removed by a filter. Regardless of this `keep_empty_rows` setting, only data recorded by the Google Analytics property can be displayed in a report. For example if a property never logs a `purchase` event, then a query for the `eventName` dimension and `eventCount` metric will not have a row containing eventName: \"purchase\" and eventCount: 0.",
          "type": "boolean"
        },
        "currencyCode": {
          "type": "string",
          "description": "Optional. A currency code in ISO4217 format, such as \"AED\", \"USD\", \"JPY\". If the field is empty, the report uses the property's default currency."
        },
        "offset": {
          "type": "string",
          "description": "Optional. The row count of the start row from Google Analytics Storage. The first row is counted as row 0. When creating a report task, the `offset` and `limit` parameters define the subset of data rows from Google Analytics storage to be included in the generated report. For example, if there are a total of 300,000 rows in Google Analytics storage, the initial report task may have the first 10,000 rows with a limit of 10,000 and an offset of 0. Subsequently, another report task could cover the next 10,000 rows with a limit of 10,000 and an offset of 10,000.",
          "format": "int64"
        },
        "metrics": {
          "type": "array",
          "items": {
            "$ref": "Metric"
          },
          "description": "Optional. The metrics requested and displayed."
        },
        "cohortSpec": {
          "description": "Optional. Cohort group associated with this request. If there is a cohort group in the request the 'cohort' dimension must be present.",
          "$ref": "CohortSpec"
        },
        "dimensions": {
          "type": "array",
          "items": {
            "$ref": "Dimension"
          },
          "description": "Optional. The dimensions requested and displayed."
        },
        "dateRanges": {
          "description": "Optional. Date ranges of data to read. If multiple date ranges are requested, each response row will contain a zero based date range index. If two date ranges overlap, the event data for the overlapping days is included in the response rows for both date ranges. In a cohort request, this `dateRanges` must be unspecified.",
          "type": "array",
          "items": {
            "$ref": "DateRange"
          }
        },
        "limit": {
          "type": "string",
          "description": "Optional. The number of rows to return in the Report. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. For instance, there are fewer than 300 possible values for the dimension `country`, so when reporting on only `country`, you can't get more than 300 rows, even if you set `limit` to a higher value.",
          "format": "int64"
        },
        "metricAggregations": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "METRIC_AGGREGATION_UNSPECIFIED",
              "TOTAL",
              "MINIMUM",
              "MAXIMUM",
              "COUNT"
            ],
            "enumDescriptions": [
              "Unspecified operator.",
              "SUM operator.",
              "Minimum operator.",
              "Maximum operator.",
              "Count operator."
            ]
          },
          "description": "Optional. Aggregation of metrics. Aggregated metric values will be shown in rows where the dimension_values are set to \"RESERVED_(MetricAggregation)\"."
        }
      }
    },
    "SegmentParameterFilter": {
      "description": "An expression to filter parameter values in a segment.",
      "properties": {
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "eventParameterName": {
          "type": "string",
          "description": "This filter will be evaluated on the specified event parameter. Event parameters are logged as parameters of the event. Event parameters include fields like \"firebase_screen\" & \"currency\". Event parameters can only be used in segments & funnels and can only be used in a descendent filter from an EventFilter. In a descendent filter from an EventFilter either event or item parameters should be used."
        },
        "filterScoping": {
          "description": "Specifies the scope for the filter.",
          "$ref": "SegmentParameterFilterScoping"
        },
        "itemParameterName": {
          "type": "string",
          "description": "This filter will be evaluated on the specified item parameter. Item parameters are logged as parameters in the item array. Item parameters include fields like \"item_name\" & \"item_category\". Item parameters can only be used in segments & funnels and can only be used in a descendent filter from an EventFilter. In a descendent filter from an EventFilter either event or item parameters should be used. Item parameters are only available in ecommerce events. To learn more about ecommerce events, see the [Measure ecommerce] (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) guide."
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        }
      },
      "id": "SegmentParameterFilter",
      "type": "object"
    },
    "DimensionOrderBy": {
      "description": "Sorts by dimension values.",
      "id": "DimensionOrderBy",
      "type": "object",
      "properties": {
        "dimensionName": {
          "description": "A dimension name in the request to order by.",
          "type": "string"
        },
        "orderType": {
          "description": "Controls the rule for dimension value ordering.",
          "enumDescriptions": [
            "Unspecified.",
            "Alphanumeric sort by Unicode code point. For example, \"2\" \u003c \"A\" \u003c \"X\" \u003c \"b\" \u003c \"z\".",
            "Case insensitive alphanumeric sort by lower case Unicode code point. For example, \"2\" \u003c \"A\" \u003c \"b\" \u003c \"X\" \u003c \"z\".",
            "Dimension values are converted to numbers before sorting. For example in NUMERIC sort, \"25\" \u003c \"100\", and in `ALPHANUMERIC` sort, \"100\" \u003c \"25\". Non-numeric dimension values all have equal ordering value below all numeric values."
          ],
          "type": "string",
          "enum": [
            "ORDER_TYPE_UNSPECIFIED",
            "ALPHANUMERIC",
            "CASE_INSENSITIVE_ALPHANUMERIC",
            "NUMERIC"
          ]
        }
      }
    },
    "NumericFilter": {
      "description": "Filters for numeric or date values.",
      "id": "NumericFilter",
      "type": "object",
      "properties": {
        "value": {
          "description": "A numeric value or a date value.",
          "$ref": "NumericValue"
        },
        "operation": {
          "description": "The operation type for this filter.",
          "enumDescriptions": [
            "Unspecified.",
            "Equal",
            "Less than",
            "Less than or equal",
            "Greater than",
            "Greater than or equal"
          ],
          "type": "string",
          "enum": [
            "OPERATION_UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ]
        }
      }
    },
    "Status": {
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "properties": {
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        },
        "details": {
          "type": "array",
          "items": {
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            },
            "type": "object"
          },
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
        },
        "code": {
          "type": "integer",
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "format": "int32"
        }
      },
      "id": "Status",
      "type": "object"
    },
    "CohortsRange": {
      "description": "Configures the extended reporting date range for a cohort report. Specifies an offset duration to follow the cohorts over.",
      "properties": {
        "granularity": {
          "type": "string",
          "enum": [
            "GRANULARITY_UNSPECIFIED",
            "DAILY",
            "WEEKLY",
            "MONTHLY"
          ],
          "description": "Required. The granularity used to interpret the `startOffset` and `endOffset` for the extended reporting date range for a cohort report.",
          "enumDescriptions": [
            "Should never be specified.",
            "Daily granularity. Commonly used if the cohort's `dateRange` is a single day and the request contains `cohortNthDay`.",
            "Weekly granularity. Commonly used if the cohort's `dateRange` is a week in duration (starting on Sunday and ending on Saturday) and the request contains `cohortNthWeek`.",
            "Monthly granularity. Commonly used if the cohort's `dateRange` is a month in duration and the request contains `cohortNthMonth`."
          ]
        },
        "endOffset": {
          "description": "Required. `endOffset` specifies the end date of the extended reporting date range for a cohort report. `endOffset` can be any positive integer but is commonly set to 5 to 10 so that reports contain data on the cohort for the next several granularity time periods. If `granularity` is `DAILY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset` days. If `granularity` is `WEEKLY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset * 7` days. If `granularity` is `MONTHLY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset * 30` days.",
          "format": "int32",
          "type": "integer"
        },
        "startOffset": {
          "description": "`startOffset` specifies the start date of the extended reporting date range for a cohort report. `startOffset` is commonly set to 0 so that reports contain data from the acquisition of the cohort forward. If `granularity` is `DAILY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset` days. If `granularity` is `WEEKLY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset * 7` days. If `granularity` is `MONTHLY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset * 30` days.",
          "format": "int32",
          "type": "integer"
        }
      },
      "id": "CohortsRange",
      "type": "object"
    },
    "StringFilter": {
      "description": "The filter for string",
      "properties": {
        "matchType": {
          "description": "The match type for this filter.",
          "enumDescriptions": [
            "Unspecified",
            "Exact match of the string value.",
            "Begins with the string value.",
            "Ends with the string value.",
            "Contains the string value.",
            "Full match for the regular expression with the string value.",
            "Partial match for the regular expression with the string value."
          ],
          "type": "string",
          "enum": [
            "MATCH_TYPE_UNSPECIFIED",
            "EXACT",
            "BEGINS_WITH",
            "ENDS_WITH",
            "CONTAINS",
            "FULL_REGEXP",
            "PARTIAL_REGEXP"
          ]
        },
        "value": {
          "type": "string",
          "description": "The string value used for the matching."
        },
        "caseSensitive": {
          "type": "boolean",
          "description": "If true, the string value is case sensitive."
        }
      },
      "id": "StringFilter",
      "type": "object"
    },
    "SessionSegmentCriteria": {
      "description": "A session matches a criteria if the session's events meet the conditions in the criteria.",
      "id": "SessionSegmentCriteria",
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "type": "array",
          "items": {
            "$ref": "SessionSegmentConditionGroup"
          },
          "description": "A session matches this criteria if the session matches each of these `andConditionGroups`."
        }
      }
    },
    "EventSegment": {
      "properties": {
        "eventInclusionCriteria": {
          "description": "Defines which events are included in this segment. Optional.",
          "$ref": "EventSegmentCriteria"
        },
        "exclusion": {
          "description": "Defines which events are excluded in this segment. Optional.",
          "$ref": "EventSegmentExclusion"
        }
      },
      "id": "EventSegment",
      "type": "object",
      "description": "Event segments are subsets of events that were triggered on your site or app. for example, all purchase events made in a particular location; app_exception events that occurred on a specific operating system."
    },
    "FunnelFieldFilter": {
      "description": "An expression to filter dimension or metric values.",
      "id": "FunnelFieldFilter",
      "type": "object",
      "properties": {
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "fieldName": {
          "type": "string",
          "description": "The dimension name or metric name."
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        }
      }
    },
    "UserSegmentCriteria": {
      "id": "UserSegmentCriteria",
      "type": "object",
      "properties": {
        "andSequenceGroups": {
          "type": "array",
          "items": {
            "$ref": "UserSegmentSequenceGroup"
          },
          "description": "A user matches this criteria if the user matches each of these `andSequenceGroups` and each of the `andConditionGroups`. `andSequenceGroups` may be empty if `andConditionGroups` are specified."
        },
        "andConditionGroups": {
          "type": "array",
          "items": {
            "$ref": "UserSegmentConditionGroup"
          },
          "description": "A user matches this criteria if the user matches each of these `andConditionGroups` and each of the `andSequenceGroups`. `andConditionGroups` may be empty if `andSequenceGroups` are specified."
        }
      },
      "description": "A user matches a criteria if the user's events meet the conditions in the criteria."
    },
    "FunnelResponseMetadata": {
      "id": "FunnelResponseMetadata",
      "type": "object",
      "properties": {
        "samplingMetadatas": {
          "description": "If funnel report results are [sampled](https://support.google.com/analytics/answer/13331292), this describes what percentage of events were used in this funnel report. One `samplingMetadatas` is populated for each date range. Each `samplingMetadatas` corresponds to a date range in order that date ranges were specified in the request. However if the results are not sampled, this field will not be defined.",
          "type": "array",
          "items": {
            "$ref": "SamplingMetadata"
          }
        }
      },
      "description": "The funnel report's response metadata carries additional information about the funnel report."
    },
    "SegmentFilterScoping": {
      "id": "SegmentFilterScoping",
      "type": "object",
      "properties": {
        "atAnyPointInTime": {
          "type": "boolean",
          "description": "If `atAnyPointInTime` is true, this filter evaluates to true for all events if it evaluates to true for any event in the date range of the request. This `atAnyPointInTime` parameter does not extend the date range of events in the report. If `atAnyPointInTime` is true, only events within the report's date range are considered when evaluating this filter. This `atAnyPointInTime` is only able to be specified if the criteria scoping is `ACROSS_ALL_SESSIONS` and is not able to be specified in sequences. If the criteria scoping is `ACROSS_ALL_SESSIONS`, `atAnyPointInTime` = false is used if unspecified."
        }
      },
      "description": "Scopings specify how the dimensions & metrics of multiple events should be considered when evaluating a segment filter."
    },
    "UserSegmentSequenceGroup": {
      "id": "UserSegmentSequenceGroup",
      "type": "object",
      "properties": {
        "sequenceScoping": {
          "type": "string",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ],
          "description": "All sequence steps must be satisfied in the scoping for the user to match the sequence. For example if `sequenceScoping = USER_CRITERIA_WITHIN_SAME_SESSION`, all sequence steps must complete within one session for the user to match the sequence. `sequenceScoping = USER_CRITERIA_WITHIN_SAME_EVENT` is not supported. Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is used.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the user matches the criteria.",
            "If the criteria is satisfied within one session, the user matches the criteria.",
            "If the criteria is satisfied by any events for the user, the user matches the criteria."
          ]
        },
        "userSequenceSteps": {
          "description": "An ordered sequence of condition steps. A user's events must complete each step in order for the user to match the `UserSegmentSequenceGroup`.",
          "type": "array",
          "items": {
            "$ref": "UserSequenceStep"
          }
        },
        "sequenceMaximumDuration": {
          "type": "string",
          "description": "Defines the time period in which the whole sequence must occur; for example, 30 Minutes. `sequenceMaximumDuration` is inclusive of the endpoint at the microsecond granularity. For example a sequence with a maximum duration of 5 seconds can be completed at 4.9 or 5.0 seconds, but not 5 seconds and 1 microsecond. `sequenceMaximumDuration` is optional, and if unspecified, sequences can be completed in any time duration.",
          "format": "google-duration"
        }
      },
      "description": "Define conditions that must occur in a specific order for the user to be a member of the segment."
    },
    "EventSegmentCriteria": {
      "description": "An event matches a criteria if the event meet the conditions in the criteria.",
      "id": "EventSegmentCriteria",
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "description": "An event matches this criteria if the event matches each of these `andConditionGroups`.",
          "type": "array",
          "items": {
            "$ref": "EventSegmentConditionGroup"
          }
        }
      }
    },
    "PropertyQuotasSnapshot": {
      "description": "Current state of all Property Quotas organized by quota category.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Identifier. The property quota snapshot resource name."
        },
        "corePropertyQuota": {
          "description": "Property Quota for core property tokens",
          "$ref": "PropertyQuota"
        },
        "realtimePropertyQuota": {
          "description": "Property Quota for realtime property tokens",
          "$ref": "PropertyQuota"
        },
        "funnelPropertyQuota": {
          "description": "Property Quota for funnel property tokens",
          "$ref": "PropertyQuota"
        }
      },
      "id": "PropertyQuotasSnapshot",
      "type": "object"
    },
    "Segment": {
      "properties": {
        "name": {
          "type": "string",
          "description": "The name for this segment. If unspecified, segments are named \"Segment\". This name defines string value returned by the `segment` dimension. The `segment` dimension prefixes segment names by the 1-based index number of the segment in the request (for example \"1. Segment\", \"2. Segment\", etc.)."
        },
        "userSegment": {
          "description": "User segments are subsets of users who engaged with your site or app.",
          "$ref": "UserSegment"
        },
        "eventSegment": {
          "description": "Event segments are subsets of events that were triggered on your site or app.",
          "$ref": "EventSegment"
        },
        "sessionSegment": {
          "description": "Session segments are subsets of the sessions that occurred on your site or app.",
          "$ref": "SessionSegment"
        }
      },
      "id": "Segment",
      "type": "object",
      "description": "A segment is a subset of your Analytics data. For example, of your entire set of users, one segment might be users from a particular country or city. Another segment might be users who purchase a particular line of products or who visit a specific part of your site or trigger certain events in your app. To learn more, see [Segment Builder](https://support.google.com/analytics/answer/9304353)."
    },
    "AudienceDimension": {
      "id": "AudienceDimension",
      "type": "object",
      "properties": {
        "dimensionName": {
          "description": "Optional. The API name of the dimension. See the [API Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/audience-list-api-schema#dimensions) for the list of dimension names.",
          "type": "string"
        }
      },
      "description": "An audience dimension is a user attribute. Specific user attributed are requested and then later returned in the `QueryAudienceListResponse`."
    },
    "InListFilter": {
      "description": "The result needs to be in a list of string values.",
      "properties": {
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The list of string values. Must be non-empty."
        },
        "caseSensitive": {
          "description": "If true, the string value is case sensitive.",
          "type": "boolean"
        }
      },
      "id": "InListFilter",
      "type": "object"
    },
    "FunnelNextAction": {
      "properties": {
        "nextActionDimension": {
          "description": "The dimension column added to the funnel visualization sub report response. The next action dimension returns the next dimension value of this dimension after the user has attained the `i`th funnel step. `nextActionDimension` currently only supports `eventName` and most Page / Screen dimensions like `pageTitle` and `pagePath`. `nextActionDimension` cannot be a dimension expression.",
          "$ref": "Dimension"
        },
        "limit": {
          "description": "The maximum number of distinct values of the breakdown dimension to return in the response. A `limit` of `5` is used if limit is not specified. Limit must exceed zero and cannot exceed 5.",
          "format": "int64",
          "type": "string"
        }
      },
      "id": "FunnelNextAction",
      "type": "object",
      "description": "Next actions state the value for a dimension after the user has achieved a step but before the same user has achieved the next step. For example if the `nextActionDimension` is `eventName`, then `nextActionDimension` in the `i`th funnel step row will return first event after the event that qualified the user into the `i`th funnel step but before the user achieved the `i+1`th funnel step."
    },
    "FunnelSubReport": {
      "id": "FunnelSubReport",
      "type": "object",
      "properties": {
        "metadata": {
          "description": "Metadata for the funnel report.",
          "$ref": "FunnelResponseMetadata"
        },
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "dimensionHeaders": {
          "description": "Describes dimension columns. Funnel reports always include the funnel step dimension in sub report responses. Additional dimensions like breakdowns, dates, and next actions may be present in the response if requested.",
          "type": "array",
          "items": {
            "$ref": "DimensionHeader"
          }
        },
        "metricHeaders": {
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          },
          "description": "Describes metric columns. Funnel reports always include active users in sub report responses. The funnel table includes additional metrics like completion rate, abandonments, and abandonments rate."
        }
      },
      "description": "Funnel sub reports contain the dimension and metric data values. For example, 12 users reached the second step of the funnel."
    },
    "CohortSpec": {
      "description": "The specification of cohorts for a cohort report. Cohort reports create a time series of user retention for the cohort. For example, you could select the cohort of users that were acquired in the first week of September and follow that cohort for the next six weeks. Selecting the users acquired in the first week of September cohort is specified in the `cohort` object. Following that cohort for the next six weeks is specified in the `cohortsRange` object. For examples, see [Cohort Report Examples](https://developers.google.com/analytics/devguides/reporting/data/v1/advanced#cohort_report_examples). The report response could show a weekly time series where say your app has retained 60% of this cohort after three weeks and 25% of this cohort after six weeks. These two percentages can be calculated by the metric `cohortActiveUsers/cohortTotalUsers` and will be separate rows in the report.",
      "id": "CohortSpec",
      "type": "object",
      "properties": {
        "cohorts": {
          "type": "array",
          "items": {
            "$ref": "Cohort"
          },
          "description": "Defines the selection criteria to group users into cohorts. Most cohort reports define only a single cohort. If multiple cohorts are specified, each cohort can be recognized in the report by their name."
        },
        "cohortsRange": {
          "description": "Cohort reports follow cohorts over an extended reporting date range. This range specifies an offset duration to follow the cohorts over.",
          "$ref": "CohortsRange"
        },
        "cohortReportSettings": {
          "description": "Optional settings for a cohort report.",
          "$ref": "CohortReportSettings"
        }
      }
    },
    "AudienceList": {
      "description": "An audience list is a list of users in an audience at the time of the list's creation. One audience may have multiple audience lists created for different days.",
      "id": "AudienceList",
      "type": "object",
      "properties": {
        "percentageCompleted": {
          "readOnly": true,
          "type": "number",
          "description": "Output only. The percentage completed for this audience export ranging between 0 to 100.",
          "format": "double"
        },
        "rowCount": {
          "description": "Output only. The total number of rows in the AudienceList result.",
          "format": "int32",
          "type": "integer",
          "readOnly": true
        },
        "audience": {
          "description": "Required. The audience resource name. This resource name identifies the audience being listed and is shared between the Analytics Data & Admin APIs. Format: `properties/{property}/audiences/{audience}`",
          "type": "string"
        },
        "audienceDisplayName": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\"."
        },
        "beginCreatingTime": {
          "description": "Output only. The time when CreateAudienceList was called and the AudienceList began the `CREATING` state.",
          "format": "google-datetime",
          "type": "string",
          "readOnly": true
        },
        "name": {
          "description": "Output only. Identifier. The audience list resource name assigned during creation. This resource name identifies this `AudienceList`. Format: `properties/{property}/audienceLists/{audience_list}`",
          "type": "string",
          "readOnly": true
        },
        "webhookNotification": {
          "description": "Optional. Configures webhook notifications to be sent from the Google Analytics Data API to your webhook server. Use of webhooks is optional. If unused, you'll need to poll this API to determine when an audience list is ready to be used. Webhooks allow a notification to be sent to your servers & avoid the need for polling. Either one or two POST requests will be sent to the webhook. The first POST request will be sent immediately showing the newly created audience list in its CREATING state. The second POST request will be sent after the audience list completes creation (either the ACTIVE or FAILED state). If identical audience lists are requested in quick succession, the second & subsequent audience lists can be served from cache. In that case, the audience list create method can return an audience list is already ACTIVE. In this scenario, only one POST request will be sent to the webhook.",
          "$ref": "WebhookNotification"
        },
        "recurringAudienceList": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The recurring audience list that created this audience list. Recurring audience lists create audience lists daily. If audience lists are created directly, they will have no associated recurring audience list, and this field will be blank."
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the query response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        },
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "CREATING",
            "ACTIVE",
            "FAILED"
          ],
          "enumDescriptions": [
            "Unspecified state will never be used.",
            "The AudienceList is currently creating and will be available in the future. Creating occurs immediately after the CreateAudienceList call.",
            "The AudienceList is fully created and ready for querying. An AudienceList is updated to active asynchronously from a request; this occurs some time (for example 15 minutes) after the initial create call.",
            "The AudienceList failed to be created. It is possible that re-requesting this audience list will succeed."
          ],
          "type": "string",
          "readOnly": true,
          "description": "Output only. The current state for this AudienceList."
        },
        "errorMessage": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Error message is populated when an audience list fails during creation. A common reason for such a failure is quota exhaustion."
        },
        "creationQuotaTokensCharged": {
          "description": "Output only. The total quota tokens charged during creation of the AudienceList. Because this token count is based on activity from the `CREATING` state, this tokens charged will be fixed once an AudienceList enters the `ACTIVE` or `FAILED` states.",
          "format": "int32",
          "type": "integer",
          "readOnly": true
        }
      }
    },
    "SegmentParameterFilterScoping": {
      "description": "Scopings specify how multiple events should be considered when evaluating a segment parameter filter.",
      "id": "SegmentParameterFilterScoping",
      "type": "object",
      "properties": {
        "inAnyNDayPeriod": {
          "description": "Accumulates the parameter over the specified period of days before applying the filter. Only supported if criteria scoping is `ACROSS_ALL_SESSIONS` or `WITHIN_SAME_SESSION`. Only supported if the parameter is `event_count`. For example if `inAnyNDayPeriod` is 3, the event_name is \"purchase\", the event parameter is \"event_count\", and the Filter's criteria is greater than 5, this filter will accumulate the event count of purchase events over every 3 consecutive day period in the report's date range; a user will pass this Filter's criteria to be included in this segment if their count of purchase events exceeds 5 in any 3 consecutive day period. For example, the periods 2021-11-01 to 2021-11-03, 2021-11-02 to 2021-11-04, 2021-11-03 to 2021-11-05, and etc. will be considered. The date range is not extended for the purpose of having a full N day window near the start of the date range. For example if a report is for 2021-11-01 to 2021-11-10 and `inAnyNDayPeriod` = 3, the first two day period will be effectively shortened because no event data outside the report's date range will be read. For example, the first four periods will effectively be: 2021-11-01 to 2021-11-01, 2021-11-01 to 2021-11-02, 2021-11-01 to 2021-11-03, and 2021-11-02 to 2021-11-04. `inAnyNDayPeriod` is optional. If not specified, the `segmentParameterFilter` is applied to each event individually.",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "SegmentParameterFilterExpression": {
      "description": "Expresses combinations of segment filter on parameters.",
      "properties": {
        "orGroup": {
          "description": "The SegmentParameterFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "SegmentParameterFilterExpressionList"
        },
        "segmentParameterFilter": {
          "description": "A primitive segment parameter filter.",
          "$ref": "SegmentParameterFilter"
        },
        "andGroup": {
          "description": "The SegmentParameterFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "SegmentParameterFilterExpressionList"
        },
        "notExpression": {
          "description": "The SegmentParameterFilterExpression is NOT of `notExpression`.",
          "$ref": "SegmentParameterFilterExpression"
        }
      },
      "id": "SegmentParameterFilterExpression",
      "type": "object"
    },
    "MetricValue": {
      "properties": {
        "value": {
          "type": "string",
          "description": "Measurement value. See MetricHeader for type."
        }
      },
      "id": "MetricValue",
      "type": "object",
      "description": "The value of a metric."
    },
    "ResponseMetaData": {
      "description": "Response's metadata carrying additional information about the report content.",
      "properties": {
        "dataLossFromOtherRow": {
          "description": "If true, indicates some buckets of dimension combinations are rolled into \"(other)\" row. This can happen for high cardinality reports. The metadata parameter dataLossFromOtherRow is populated based on the aggregated data table used in the report. The parameter will be accurately populated regardless of the filters and limits in the report. For example, the (other) row could be dropped from the report because the request contains a filter on sessionSource = google. This parameter will still be populated if data loss from other row was present in the input aggregate data used to generate this report. To learn more, see [About the (other) row and data sampling](https://support.google.com/analytics/answer/13208658#reports).",
          "type": "boolean"
        },
        "emptyReason": {
          "type": "string",
          "description": "If empty reason is specified, the report is empty for this reason."
        },
        "subjectToThresholding": {
          "type": "boolean",
          "description": "If `subjectToThresholding` is true, this report is subject to thresholding and only returns data that meets the minimum aggregation thresholds. It is possible for a request to be subject to thresholding thresholding and no data is absent from the report, and this happens when all data is above the thresholds. To learn more, see [Data thresholds](https://support.google.com/analytics/answer/9383630) and [About Demographics and Interests](https://support.google.com/analytics/answer/2799357)."
        },
        "schemaRestrictionResponse": {
          "description": "Describes the schema restrictions actively enforced in creating this report. To learn more, see [Access and data-restriction management](https://support.google.com/analytics/answer/10851388).",
          "$ref": "SchemaRestrictionResponse"
        },
        "currencyCode": {
          "description": "The currency code used in this report. Intended to be used in formatting currency metrics like `purchaseRevenue` for visualization. If currency_code was specified in the request, this response parameter will echo the request parameter; otherwise, this response parameter is the property's current currency_code. Currency codes are string encodings of currency types from the ISO 4217 standard (https://en.wikipedia.org/wiki/ISO_4217); for example \"USD\", \"EUR\", \"JPY\". To learn more, see https://support.google.com/analytics/answer/9796179.",
          "type": "string"
        },
        "samplingMetadatas": {
          "description": "If this report results is [sampled](https://support.google.com/analytics/answer/13331292), this describes the percentage of events used in this report. One `samplingMetadatas` is populated for each date range. Each `samplingMetadatas` corresponds to a date range in order that date ranges were specified in the request. However if the results are not sampled, this field will not be defined.",
          "type": "array",
          "items": {
            "$ref": "SamplingMetadata"
          }
        },
        "timeZone": {
          "description": "The property's current timezone. Intended to be used to interpret time-based dimensions like `hour` and `minute`. Formatted as strings from the IANA Time Zone database (https://www.iana.org/time-zones); for example \"America/New_York\" or \"Asia/Tokyo\".",
          "type": "string"
        }
      },
      "id": "ResponseMetaData",
      "type": "object"
    },
    "FunnelParameterFilterExpressionList": {
      "description": "A list of funnel parameter filter expressions.",
      "id": "FunnelParameterFilterExpressionList",
      "type": "object",
      "properties": {
        "expressions": {
          "type": "array",
          "items": {
            "$ref": "FunnelParameterFilterExpression"
          },
          "description": "The list of funnel parameter filter expressions."
        }
      }
    },
    "EventSegmentConditionGroup": {
      "id": "EventSegmentConditionGroup",
      "type": "object",
      "properties": {
        "conditionScoping": {
          "type": "string",
          "enum": [
            "EVENT_CRITERIA_SCOPING_UNSPECIFIED",
            "EVENT_CRITERIA_WITHIN_SAME_EVENT"
          ],
          "description": "`conditionScoping` should always be `EVENT_CRITERIA_WITHIN_SAME_EVENT`. Optional. If unspecified, a `conditionScoping` of `EVENT_CRITERIA_WITHIN_SAME_EVENT` is used.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the event matches the criteria."
          ]
        },
        "segmentFilterExpression": {
          "description": "Data is included or excluded from the segment based on if it matches this expression. Expressions express criteria on dimension, metrics, and/or parameters.",
          "$ref": "SegmentFilterExpression"
        }
      },
      "description": "Conditions tell Analytics what data to include in or exclude from the segment."
    },
    "ListReportTasksResponse": {
      "description": "A list of all report tasks for a property.",
      "id": "ListReportTasksResponse",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "reportTasks": {
          "description": "Each report task for a property.",
          "type": "array",
          "items": {
            "$ref": "ReportTask"
          }
        }
      }
    },
    "DateRange": {
      "id": "DateRange",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also accepted, and in that case, the date is inferred based on the property's reporting time zone.",
          "type": "string"
        },
        "name": {
          "description": "Assigns a name to this date range. The dimension `dateRange` is valued to this name in a report response. If set, cannot begin with `date_range_` or `RESERVED_`. If not set, date ranges are named by their zero based index in the request: `date_range_0`, `date_range_1`, etc.",
          "type": "string"
        },
        "endDate": {
          "description": "The inclusive end date for the query in the format `YYYY-MM-DD`. Cannot be before `start_date`. The format `NdaysAgo`, `yesterday`, or `today` is also accepted, and in that case, the date is inferred based on the property's reporting time zone.",
          "type": "string"
        }
      },
      "description": "A contiguous set of days: `startDate`, `startDate + 1`, ..., `endDate`. Requests are allowed up to 4 date ranges."
    },
    "FunnelBreakdown": {
      "properties": {
        "breakdownDimension": {
          "description": "The dimension column added to the funnel table sub report response. The breakdown dimension breaks down each funnel step. A valid `breakdownDimension` is required if `funnelBreakdown` is specified.",
          "$ref": "Dimension"
        },
        "limit": {
          "type": "string",
          "description": "The maximum number of distinct values of the breakdown dimension to return in the response. A `limit` of `5` is used if limit is not specified. Limit must exceed zero and cannot exceed 15.",
          "format": "int64"
        }
      },
      "id": "FunnelBreakdown",
      "type": "object",
      "description": "Breakdowns add a dimension to the funnel table sub report response."
    },
    "WebhookNotification": {
      "description": "Configures a long-running operation resource to send a webhook notification from the Google Analytics Data API to your webhook server when the resource updates. Notification configurations contain private values & are only visible to your GCP project. Different GCP projects may attach different webhook notifications to the same long-running operation resource.",
      "id": "WebhookNotification",
      "type": "object",
      "properties": {
        "uri": {
          "description": "Optional. The web address that will receive the webhook notification. This address will receive POST requests as the state of the long running operation resource changes. The POST request will contain both a JSON version of the long running operation resource in the body and a `sentTimestamp` field. The sent timestamp will specify the unix microseconds since the epoch that the request was sent; this lets you identify replayed notifications. An example URI is `https://us-central1-example-project-id.cloudfunctions.net/example-function-1`. The URI must use HTTPS and point to a site with a valid SSL certificate on the web server. The URI must have a maximum string length of 128 characters & use only the allowlisted characters from [RFC 1738](https://www.rfc-editor.org/rfc/rfc1738). When your webhook server receives a notification, it is expected to reply with an HTTP response status code of 200 within 5 seconds. A URI is required to use webhook notifications. Requests to this webhook server will contain an ID token authenticating the service account `google-analytics-audience-export@system.gserviceaccount.com`. To learn more about ID tokens, see https://cloud.google.com/docs/authentication/token-types#id. For Google Cloud Functions, this lets you configure your function to require authentication. In Cloud IAM, you will need to grant the service account permissions to the Cloud Run Invoker (`roles/run.invoker`) & Cloud Functions Invoker (`roles/cloudfunctions.invoker`) roles for the webhook post request to pass Google Cloud Functions authentication. This API can send webhook notifications to arbitrary URIs; for webhook servers other than Google Cloud Functions, this ID token in the authorization bearer header should be ignored if it is not needed.",
          "type": "string"
        },
        "channelToken": {
          "type": "string",
          "description": "Optional. The channel token is an arbitrary string value and must have a maximum string length of 64 characters. Channel tokens allow you to verify the source of a webhook notification. This guards against the message being spoofed. The channel token will be specified in the `X-Goog-Channel-Token` HTTP header of the webhook POST request. A channel token is not required to use webhook notifications."
        }
      }
    },
    "Metric": {
      "id": "Metric",
      "type": "object",
      "properties": {
        "invisible": {
          "type": "boolean",
          "description": "Indicates if a metric is invisible in the report response. If a metric is invisible, the metric will not produce a column in the response, but can be used in `metricFilter`, `orderBys`, or a metric `expression`."
        },
        "name": {
          "type": "string",
          "description": "The name of the metric. See the [API Metrics](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#metrics) for the list of metric names supported by core reporting methods such as `runReport` and `batchRunReports`. See [Realtime Metrics](https://developers.google.com/analytics/devguides/reporting/data/v1/realtime-api-schema#metrics) for the list of metric names supported by the `runRealtimeReport` method. See [Funnel Metrics](https://developers.google.com/analytics/devguides/reporting/data/v1/exploration-api-schema#metrics) for the list of metric names supported by the `runFunnelReport` method. If `expression` is specified, `name` can be any string that you would like within the allowed character set. For example if `expression` is `screenPageViews/sessions`, you could call that metric's name = `viewsPerSession`. Metric names that you choose must match the regular expression `^[a-zA-Z0-9_]$`. Metrics are referenced by `name` in `metricFilter`, `orderBys`, and metric `expression`."
        },
        "expression": {
          "description": "A mathematical expression for derived metrics. For example, the metric Event count per user is `eventCount/totalUsers`.",
          "type": "string"
        }
      },
      "description": "The quantitative measurements of a report. For example, the metric `eventCount` is the total number of events. Requests are allowed up to 10 metrics."
    },
    "UserSegmentExclusion": {
      "description": "Specifies which users are excluded in this segment.",
      "id": "UserSegmentExclusion",
      "type": "object",
      "properties": {
        "userExclusionCriteria": {
          "description": "If a user meets this condition, the user is excluded from membership in the segment for the `userExclusionDuration`.",
          "$ref": "UserSegmentCriteria"
        },
        "userExclusionDuration": {
          "type": "string",
          "enum": [
            "USER_EXCLUSION_DURATION_UNSPECIFIED",
            "USER_EXCLUSION_TEMPORARY",
            "USER_EXCLUSION_PERMANENT"
          ],
          "description": "Specifies how long an exclusion will last if a user matches the `userExclusionCriteria`. Optional. If unspecified, `userExclusionDuration` of `USER_EXCLUSION_TEMPORARY` is used.",
          "enumDescriptions": [
            "Unspecified exclusion duration. Do not specify.",
            "Temporarily exclude users from the segment during periods when the user meets the `userExclusionCriteria` condition.",
            "Permanently exclude users from the segment if the user ever meets the `userExclusionCriteria` condition."
          ]
        }
      }
    },
    "FunnelStep": {
      "id": "FunnelStep",
      "type": "object",
      "properties": {
        "filterExpression": {
          "description": "The condition that your users must meet to be included in this step of the funnel journey.",
          "$ref": "FunnelFilterExpression"
        },
        "name": {
          "type": "string",
          "description": "The distinctive name for this step. If unspecified, steps will be named by a 1 based indexed name (for example \"0. \", \"1. \", etc.). This name defines string value returned by the `funnelStepName` dimension. For example, specifying `name = Purchase` in the request's third funnel step will produce `3. Purchase` in the funnel report response."
        },
        "isDirectlyFollowedBy": {
          "type": "boolean",
          "description": "If true, this step must directly follow the previous step. If false, there can be events between the previous step and this step. If unspecified, `isDirectlyFollowedBy` is treated as false."
        },
        "withinDurationFromPriorStep": {
          "type": "string",
          "description": "If specified, this step must complete within this duration of the completion of the prior step. `withinDurationFromPriorStep` is inclusive of the endpoint at the microsecond granularity. For example a duration of 5 seconds can be completed at 4.9 or 5.0 seconds, but not 5 seconds and 1 microsecond. `withinDurationFromPriorStep` is optional, and if unspecified, steps may be separated by any time duration.",
          "format": "google-duration"
        }
      },
      "description": "Steps define the user journey you want to measure. Steps contain one or more conditions that your users must meet to be included in that step of the funnel journey."
    },
    "ListAudienceListsResponse": {
      "id": "ListAudienceListsResponse",
      "type": "object",
      "properties": {
        "audienceLists": {
          "description": "Each audience list for a property.",
          "type": "array",
          "items": {
            "$ref": "AudienceList"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
        }
      },
      "description": "A list of all audience lists for a property."
    },
    "ActiveMetricRestriction": {
      "id": "ActiveMetricRestriction",
      "type": "object",
      "properties": {
        "metricName": {
          "type": "string",
          "description": "The name of the restricted metric."
        },
        "restrictedMetricTypes": {
          "type": "array",
          "items": {
            "enumDescriptions": [
              "Unspecified type.",
              "Cost metrics such as `adCost`.",
              "Revenue metrics such as `purchaseRevenue`."
            ],
            "type": "string",
            "enum": [
              "RESTRICTED_METRIC_TYPE_UNSPECIFIED",
              "COST_DATA",
              "REVENUE_DATA"
            ]
          },
          "description": "The reason for this metric's restriction."
        }
      },
      "description": "A metric actively restricted in creating the report."
    },
    "SegmentParameterFilterExpressionList": {
      "description": "A list of segment parameter filter expressions.",
      "properties": {
        "expressions": {
          "description": "The list of segment parameter filter expressions.",
          "type": "array",
          "items": {
            "$ref": "SegmentParameterFilterExpression"
          }
        }
      },
      "id": "SegmentParameterFilterExpressionList",
      "type": "object"
    },
    "QueryAudienceListResponse": {
      "description": "A list of users in an audience list.",
      "id": "QueryAudienceListResponse",
      "type": "object",
      "properties": {
        "audienceList": {
          "description": "Configuration data about AudienceList being queried. Returned to help interpret the audience rows in this response. For example, the dimensions in this AudienceList correspond to the columns in the AudienceRows.",
          "$ref": "AudienceList"
        },
        "rowCount": {
          "type": "integer",
          "description": "The total number of rows in the AudienceList result. `rowCount` is independent of the number of rows returned in the response, the `limit` request parameter, and the `offset` request parameter. For example if a query returns 175 rows and includes `limit` of 50 in the API request, the response will contain `rowCount` of 175 but only 50 rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int32"
        },
        "audienceRows": {
          "description": "Rows for each user in an audience list. The number of rows in this response will be less than or equal to request's page size.",
          "type": "array",
          "items": {
            "$ref": "AudienceRow"
          }
        }
      }
    },
    "ReportTask": {
      "description": "A specific report task configuration.",
      "properties": {
        "reportDefinition": {
          "description": "Optional. A report definition to fetch report data, which describes the structure of a report. It typically includes the fields that will be included in the report and the criteria that will be used to filter the data.",
          "$ref": "ReportDefinition"
        },
        "name": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Identifier. The report task resource name assigned during creation. Format: \"properties/{property}/reportTasks/{report_task}\""
        },
        "reportMetadata": {
          "readOnly": true,
          "description": "Output only. The report metadata for a specific report task, which provides information about a report. It typically includes the following information: the resource name of the report, the state of the report, the timestamp the report was created, etc,",
          "$ref": "ReportMetadata"
        }
      },
      "id": "ReportTask",
      "type": "object"
    },
    "Filter": {
      "description": "An expression to filter dimension or metric values.",
      "id": "Filter",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name. Must be a name defined in dimensions or metrics.",
          "type": "string"
        },
        "emptyFilter": {
          "description": "A filter for empty values such as \"(not set)\" and \"\" values.",
          "$ref": "EmptyFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        }
      }
    },
    "AudienceRow": {
      "description": "Dimension value attributes for the audience user row.",
      "id": "AudienceRow",
      "type": "object",
      "properties": {
        "dimensionValues": {
          "type": "array",
          "items": {
            "$ref": "AudienceDimensionValue"
          },
          "description": "Each dimension value attribute for an audience user. One dimension value will be added for each dimension column requested."
        }
      }
    },
    "BetweenFilter": {
      "id": "BetweenFilter",
      "type": "object",
      "properties": {
        "fromValue": {
          "description": "Begins with this number.",
          "$ref": "NumericValue"
        },
        "toValue": {
          "description": "Ends with this number.",
          "$ref": "NumericValue"
        }
      },
      "description": "To express that the result needs to be between two numbers (inclusive)."
    },
    "ConcatenateExpression": {
      "properties": {
        "delimiter": {
          "type": "string",
          "description": "The delimiter placed between dimension names. Delimiters are often single characters such as \"|\" or \",\" but can be longer strings. If a dimension value contains the delimiter, both will be present in response with no distinction. For example if dimension 1 value = \"US,FR\", dimension 2 value = \"JP\", and delimiter = \",\", then the response will contain \"US,FR,JP\"."
        },
        "dimensionNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Names of dimensions. The names must refer back to names in the dimensions field of the request."
        }
      },
      "id": "ConcatenateExpression",
      "type": "object",
      "description": "Used to combine dimension values to a single dimension."
    },
    "FunnelFilterExpression": {
      "properties": {
        "notExpression": {
          "description": "The FunnelFilterExpression is NOT of `notExpression`.",
          "$ref": "FunnelFilterExpression"
        },
        "funnelEventFilter": {
          "description": "Creates a filter that matches events of a single event name. If a parameter filter expression is specified, only the subset of events that match both the single event name and the parameter filter expressions match this event filter.",
          "$ref": "FunnelEventFilter"
        },
        "funnelFieldFilter": {
          "description": "A funnel filter for a dimension or metric.",
          "$ref": "FunnelFieldFilter"
        },
        "andGroup": {
          "description": "The FunnelFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "FunnelFilterExpressionList"
        },
        "orGroup": {
          "description": "The FunnelFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "FunnelFilterExpressionList"
        }
      },
      "id": "FunnelFilterExpression",
      "type": "object",
      "description": "Expresses combinations of funnel filters."
    },
    "FunnelFilterExpressionList": {
      "description": "A list of funnel filter expressions.",
      "properties": {
        "expressions": {
          "description": "The list of funnel filter expressions.",
          "type": "array",
          "items": {
            "$ref": "FunnelFilterExpression"
          }
        }
      },
      "id": "FunnelFilterExpressionList",
      "type": "object"
    },
    "DimensionHeader": {
      "properties": {
        "name": {
          "type": "string",
          "description": "The dimension's name."
        }
      },
      "id": "DimensionHeader",
      "type": "object",
      "description": "Describes a dimension column in the report. Dimensions requested in a report produce column entries within rows and DimensionHeaders. However, dimensions used exclusively within filters or expressions do not produce columns in a report; correspondingly, those dimensions do not produce headers."
    },
    "DimensionExpression": {
      "id": "DimensionExpression",
      "type": "object",
      "properties": {
        "concatenate": {
          "description": "Used to combine dimension values to a single dimension. For example, dimension \"country, city\": concatenate(country, \", \", city).",
          "$ref": "ConcatenateExpression"
        },
        "lowerCase": {
          "description": "Used to convert a dimension value to lower case.",
          "$ref": "CaseExpression"
        },
        "upperCase": {
          "description": "Used to convert a dimension value to upper case.",
          "$ref": "CaseExpression"
        }
      },
      "description": "Used to express a dimension which is the result of a formula of multiple dimensions. Example usages: 1) lower_case(dimension) 2) concatenate(dimension1, symbol, dimension2)."
    },
    "UserSequenceStep": {
      "properties": {
        "isDirectlyFollowedBy": {
          "description": "If true, the event satisfying this step must be the very next event after the event satifying the last step. If false, this step indirectly follows the prior step; for example, there may be events between the prior step and this step. `isDirectlyFollowedBy` must be false for the first step.",
          "type": "boolean"
        },
        "stepScoping": {
          "description": "This sequence step must be satisfied in the scoping for the user to match the sequence. For example if `sequenceScoping = WITHIN_SAME_SESSION`, this sequence steps must complete within one session for the user to match the sequence. `stepScoping = ACROSS_ALL_SESSIONS` is only allowed if the `sequenceScoping = ACROSS_ALL_SESSIONS`. Optional. If unspecified, `stepScoping` uses the same `UserCriteriaScoping` as the `sequenceScoping`.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the user matches the criteria.",
            "If the criteria is satisfied within one session, the user matches the criteria.",
            "If the criteria is satisfied by any events for the user, the user matches the criteria."
          ],
          "type": "string",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ]
        },
        "segmentFilterExpression": {
          "description": "A user matches this sequence step if their events match this expression. Expressions express criteria on dimension, metrics, and/or parameters.",
          "$ref": "SegmentFilterExpression"
        }
      },
      "id": "UserSequenceStep",
      "type": "object",
      "description": "A condition that must occur in the specified step order for this user to match the sequence."
    },
    "RecurringAudienceList": {
      "description": "A recurring audience list produces new audience lists each day. Audience lists are users in an audience at the time of the list's creation. A recurring audience list ensures that you have audience list based on the most recent data available for use each day.",
      "properties": {
        "name": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Identifier. The recurring audience list resource name assigned during creation. This resource name identifies this `RecurringAudienceList`. Format: `properties/{property}/recurringAudienceLists/{recurring_audience_list}`"
        },
        "audienceLists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "readOnly": true,
          "description": "Output only. Audience list resource names for audience list instances created for this recurring audience list. One audience list is created for each day, and the audience list will be listed here. This list is ordered with the most recently created audience list first."
        },
        "audience": {
          "type": "string",
          "description": "Required. The audience resource name. This resource name identifies the audience being listed and is shared between the Analytics Data & Admin APIs. Format: `properties/{property}/audiences/{audience}`"
        },
        "audienceDisplayName": {
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\".",
          "type": "string",
          "readOnly": true
        },
        "webhookNotification": {
          "description": "Optional. Configures webhook notifications to be sent from the Google Analytics Data API to your webhook server. Use of webhooks is optional. If unused, you'll need to poll this API to determine when a recurring audience list creates new audience lists. Webhooks allow a notification to be sent to your servers & avoid the need for polling. Two POST requests will be sent each time a recurring audience list creates an audience list. This happens once per day until a recurring audience list reaches 0 active days remaining. The first request will be sent showing a newly created audience list in its CREATING state. The second request will be sent after the audience list completes creation (either the ACTIVE or FAILED state).",
          "$ref": "WebhookNotification"
        },
        "activeDaysRemaining": {
          "type": "integer",
          "description": "Optional. The number of remaining days that a recurring audience export will produce an audience list instance. This counter decreases by one each day, and when it reaches zero, no new audience lists will be created. Recurring audience list request for Analytics 360 properties default to 180 days and have a maximum of 365 days. Requests for standard Analytics properties default to 14 days and have a maximum of 30 days. The minimum value allowed during creation is 1. Requests above their respective maximum will be coerced to their maximum.",
          "format": "int32"
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the audience list response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        }
      },
      "id": "RecurringAudienceList",
      "type": "object"
    },
    "FilterExpressionList": {
      "properties": {
        "expressions": {
          "type": "array",
          "items": {
            "$ref": "FilterExpression"
          },
          "description": "A list of filter expressions."
        }
      },
      "id": "FilterExpressionList",
      "type": "object",
      "description": "A list of filter expressions."
    },
    "PropertyQuota": {
      "description": "Current state of all quotas for this Analytics Property. If any quota for a property is exhausted, all requests to that property will return Resource Exhausted errors.",
      "properties": {
        "tokensPerDay": {
          "description": "Standard Analytics Properties can use up to 200,000 tokens per day; Analytics 360 Properties can use 2,000,000 tokens per day. Most requests consume fewer than 10 tokens.",
          "$ref": "QuotaStatus"
        },
        "potentiallyThresholdedRequestsPerHour": {
          "description": "Analytics Properties can send up to 120 requests with potentially thresholded dimensions per hour. In a batch request, each report request is individually counted for this quota if the request contains potentially thresholded dimensions.",
          "$ref": "QuotaStatus"
        },
        "concurrentRequests": {
          "description": "Standard Analytics Properties can send up to 10 concurrent requests; Analytics 360 Properties can use up to 50 concurrent requests.",
          "$ref": "QuotaStatus"
        },
        "tokensPerProjectPerHour": {
          "description": "Analytics Properties can use up to 35% of their tokens per project per hour. This amounts to standard Analytics Properties can use up to 14,000 tokens per project per hour, and Analytics 360 Properties can use 140,000 tokens per project per hour. An API request consumes a single number of tokens, and that number is deducted from all of the hourly, daily, and per project hourly quotas.",
          "$ref": "QuotaStatus"
        },
        "tokensPerHour": {
          "description": "Standard Analytics Properties can use up to 40,000 tokens per hour; Analytics 360 Properties can use 400,000 tokens per hour. An API request consumes a single number of tokens, and that number is deducted from all of the hourly, daily, and per project hourly quotas.",
          "$ref": "QuotaStatus"
        },
        "serverErrorsPerProjectPerHour": {
          "description": "Standard Analytics Properties and cloud project pairs can have up to 10 server errors per hour; Analytics 360 Properties and cloud project pairs can have up to 50 server errors per hour.",
          "$ref": "QuotaStatus"
        }
      },
      "id": "PropertyQuota",
      "type": "object"
    },
    "FunnelParameterFilterExpression": {
      "properties": {
        "andGroup": {
          "description": "The FunnelParameterFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "FunnelParameterFilterExpressionList"
        },
        "notExpression": {
          "description": "The FunnelParameterFilterExpression is NOT of `notExpression`.",
          "$ref": "FunnelParameterFilterExpression"
        },
        "funnelParameterFilter": {
          "description": "A primitive funnel parameter filter.",
          "$ref": "FunnelParameterFilter"
        },
        "orGroup": {
          "description": "The FunnelParameterFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "FunnelParameterFilterExpressionList"
        }
      },
      "id": "FunnelParameterFilterExpression",
      "type": "object",
      "description": "Expresses combinations of funnel filters on parameters."
    },
    "AudienceDimensionValue": {
      "id": "AudienceDimensionValue",
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "description": "Value as a string if the dimension type is a string."
        }
      },
      "description": "The value of a dimension."
    },
    "UserSegmentConditionGroup": {
      "properties": {
        "conditionScoping": {
          "description": "Data is included or excluded from the segment based on if it matches the condition group. This scoping defines how many events the `segmentFilterExpression` is evaluated on before the condition group is determined to be matched or not. For example if `conditionScoping = USER_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all events in a session, and then, the condition group is determined to be matched or not for this user. For example if `conditionScoping = USER_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a single event, and then, the condition group is determined to be matched or not for this user. Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is used.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the user matches the criteria.",
            "If the criteria is satisfied within one session, the user matches the criteria.",
            "If the criteria is satisfied by any events for the user, the user matches the criteria."
          ],
          "type": "string",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ]
        },
        "segmentFilterExpression": {
          "description": "Data is included or excluded from the segment based on if it matches this expression. Expressions express criteria on dimension, metrics, and/or parameters.",
          "$ref": "SegmentFilterExpression"
        }
      },
      "id": "UserSegmentConditionGroup",
      "type": "object",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment."
    },
    "RunFunnelReportResponse": {
      "description": "The funnel report response contains two sub reports. The two sub reports are different combinations of dimensions and metrics.",
      "properties": {
        "kind": {
          "type": "string",
          "description": "Identifies what kind of resource this message is. This `kind` is always the fixed string \"analyticsData#runFunnelReport\". Useful to distinguish between response types in JSON."
        },
        "funnelTable": {
          "description": "The funnel table is a report with the funnel step, segment, breakdown dimension, active users, completion rate, abandonments, and abandonments rate. The segment dimension is only present in this response if a segment was requested. The breakdown dimension is only present in this response if it was requested.",
          "$ref": "FunnelSubReport"
        },
        "funnelVisualization": {
          "description": "The funnel visualization is a report with the funnel step, segment, date, next action dimension, and active users. The segment dimension is only present in this response if a segment was requested. The date dimension is only present in this response if it was requested through the `TRENDED_FUNNEL` funnel type. The next action dimension is only present in the response if it was requested.",
          "$ref": "FunnelSubReport"
        },
        "propertyQuota": {
          "description": "This Analytics Property's quota state including this request.",
          "$ref": "PropertyQuota"
        }
      },
      "id": "RunFunnelReportResponse",
      "type": "object"
    },
    "SessionSegmentExclusion": {
      "id": "SessionSegmentExclusion",
      "type": "object",
      "properties": {
        "sessionExclusionDuration": {
          "description": "Specifies how long an exclusion will last if a session matches the `sessionExclusionCriteria`. Optional. If unspecified, a `sessionExclusionDuration` of `SESSION_EXCLUSION_TEMPORARY` is used.",
          "enumDescriptions": [
            "Unspecified exclusion duration. Do not specify.",
            "Temporarily exclude sessions from the segment during periods when the session meets the `sessionExclusionCriteria` condition.",
            "Permanently exclude sessions from the segment if the session ever meets the `sessionExclusionCriteria` condition."
          ],
          "type": "string",
          "enum": [
            "SESSION_EXCLUSION_DURATION_UNSPECIFIED",
            "SESSION_EXCLUSION_TEMPORARY",
            "SESSION_EXCLUSION_PERMANENT"
          ]
        },
        "sessionExclusionCriteria": {
          "description": "If a session meets this condition, the session is excluded from membership in the segment for the `sessionExclusionDuration`.",
          "$ref": "SessionSegmentCriteria"
        }
      },
      "description": "Specifies which sessions are excluded in this segment."
    },
    "EventSegmentExclusion": {
      "description": "Specifies which events are excluded in this segment.",
      "properties": {
        "eventExclusionCriteria": {
          "description": "If an event meets this condition, the event is excluded from membership in the segment for the `eventExclusionDuration`.",
          "$ref": "EventSegmentCriteria"
        },
        "eventExclusionDuration": {
          "description": "`eventExclusionDuration` should always be `PERMANENTLY_EXCLUDE`. Optional. If unspecified, an `eventExclusionDuration` of `EVENT_EXCLUSION_PERMANENT` is used.",
          "enumDescriptions": [
            "Unspecified exclusion duration. Do not specify.",
            "Permanently exclude events from the segment if the event ever meets the `eventExclusionCriteria` condition."
          ],
          "type": "string",
          "enum": [
            "EVENT_EXCLUSION_DURATION_UNSPECIFIED",
            "EVENT_EXCLUSION_PERMANENT"
          ]
        }
      },
      "id": "EventSegmentExclusion",
      "type": "object"
    },
    "CohortReportSettings": {
      "description": "Optional settings of a cohort report.",
      "properties": {
        "accumulate": {
          "description": "If true, accumulates the result from first touch day to the end day. Not supported in `RunReportRequest`.",
          "type": "boolean"
        }
      },
      "id": "CohortReportSettings",
      "type": "object"
    }
  }
}
