{
  "name": "analyticsdata",
  "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"
        }
      }
    }
  },
  "resources": {
    "properties": {
      "methods": {
        "runFunnelReport": {
          "id": "analyticsdata.properties.runFunnelReport",
          "path": "v1alpha/{+property}:runFunnelReport",
          "flatPath": "v1alpha/properties/{propertiesId}:runFunnelReport",
          "httpMethod": "POST",
          "parameters": {
            "property": {
              "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",
              "pattern": "^properties/[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "property"
          ],
          "request": {
            "$ref": "RunFunnelReportRequest"
          },
          "response": {
            "$ref": "RunFunnelReportResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "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)."
        },
        "getPropertyQuotasSnapshot": {
          "id": "analyticsdata.properties.getPropertyQuotasSnapshot",
          "path": "v1alpha/{+name}",
          "flatPath": "v1alpha/properties/{propertiesId}/propertyQuotasSnapshot",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "Required. Quotas from this property will be listed in the response. Format: `properties/{property}/propertyQuotasSnapshot`",
              "pattern": "^properties/[^/]+/propertyQuotasSnapshot$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "PropertyQuotasSnapshot"
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "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."
        },
        "runReport": {
          "id": "analyticsdata.properties.runReport",
          "path": "v1alpha/{+property}:runReport",
          "flatPath": "v1alpha/properties/{propertiesId}:runReport",
          "httpMethod": "POST",
          "parameters": {
            "property": {
              "description": "Required. 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",
              "pattern": "^properties/[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "property"
          ],
          "request": {
            "$ref": "RunReportRequest"
          },
          "response": {
            "$ref": "RunReportResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "description": "Returns a customized report of your Google Analytics event data. Reports contain statistics derived from data collected by the Google Analytics tracking code. The data returned from the API is as a table with columns for the requested dimensions and metrics. Metrics are individual measurements of user activity on your property, such as active users or event count. Dimensions break down metrics across some common criteria, such as country or event name."
        },
        "getMetadata": {
          "id": "analyticsdata.properties.getMetadata",
          "path": "v1alpha/{+name}",
          "flatPath": "v1alpha/properties/{propertiesId}/metadata",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "Required. The resource name of the metadata to retrieve. This name field is specified in the URL path and not URL parameters. Property is a numeric Google Analytics property identifier. To learn more, see [where to find your Property ID](https://developers.google.com/analytics/devguides/reporting/data/v1/property-id). Example: properties/1234/metadata Set the Property ID to 0 for dimensions and metrics common to all properties. In this special mode, this method will not return custom dimensions and metrics.",
              "pattern": "^properties/[^/]+/metadata$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "Metadata"
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "description": "Returns metadata for dimensions and metrics available in reporting methods. Used to explore the dimensions and metrics. In this method, a Google Analytics property identifier is specified in the request, and the metadata response includes Custom dimensions and metrics as well as Universal metadata. For example if a custom metric with parameter name `levels_unlocked` is registered to a property, the Metadata response will contain `customEvent:levels_unlocked`. Universal metadata are dimensions and metrics applicable to any property such as `country` and `totalUsers`."
        }
      },
      "resources": {
        "audienceLists": {
          "methods": {
            "create": {
              "id": "analyticsdata.properties.audienceLists.create",
              "path": "v1alpha/{+parent}/audienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "Required. The parent resource where this audience list will be created. Format: `properties/{property}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "AudienceList"
              },
              "response": {
                "$ref": "Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "query": {
              "id": "analyticsdata.properties.audienceLists.query",
              "path": "v1alpha/{+name}:query",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}:query",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "Required. The name of the audience list to retrieve users from. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "QueryAudienceListRequest"
              },
              "response": {
                "$ref": "QueryAudienceListResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "get": {
              "id": "analyticsdata.properties.audienceLists.get",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The audience list resource name. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "AudienceList"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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": {
              "id": "analyticsdata.properties.audienceLists.list",
              "path": "v1alpha/{+parent}/audienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "Required. All audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "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).",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "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.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListAudienceListsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            }
          }
        },
        "recurringAudienceLists": {
          "methods": {
            "create": {
              "id": "analyticsdata.properties.recurringAudienceLists.create",
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "Required. The parent resource where this recurring audience list will be created. Format: `properties/{property}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "RecurringAudienceList"
              },
              "response": {
                "$ref": "RecurringAudienceList"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "get": {
              "id": "analyticsdata.properties.recurringAudienceLists.get",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists/{recurringAudienceListsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The recurring audience list resource name. Format: `properties/{property}/recurringAudienceLists/{recurring_audience_list}`",
                  "pattern": "^properties/[^/]+/recurringAudienceLists/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "RecurringAudienceList"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "list": {
              "id": "analyticsdata.properties.recurringAudienceLists.list",
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "Required. All recurring audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "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).",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "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",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListRecurringAudienceListsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            }
          }
        },
        "reportTasks": {
          "methods": {
            "create": {
              "id": "analyticsdata.properties.reportTasks.create",
              "path": "v1alpha/{+parent}/reportTasks",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "Required. The parent resource where this report task will be created. Format: `properties/{propertyId}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "ReportTask"
              },
              "response": {
                "$ref": "Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "query": {
              "id": "analyticsdata.properties.reportTasks.query",
              "path": "v1alpha/{+name}:query",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}:query",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "Required. The report source name. Format: `properties/{property}/reportTasks/{report}`",
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "QueryReportTaskRequest"
              },
              "response": {
                "$ref": "QueryReportTaskResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "get": {
              "id": "analyticsdata.properties.reportTasks.get",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The report task resource name. Format: `properties/{property}/reportTasks/{report_task}`",
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "ReportTask"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "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."
            },
            "list": {
              "id": "analyticsdata.properties.reportTasks.list",
              "path": "v1alpha/{+parent}/reportTasks",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "Required. All report tasks for this property will be listed in the response. Format: `properties/{property}`",
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "description": "Optional. The maximum number of report tasks to return.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "Optional. A page token, received from a previous `ListReportTasks` call. Provide this to retrieve the subsequent page.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListReportTasksResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "description": "Lists all report tasks for a property."
            }
          }
        }
      }
    }
  },
  "version_module": true,
  "basePath": "",
  "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. ",
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "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"
      ],
      "location": "query"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "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.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "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"
    },
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "baseUrl": "https://analyticsdata.googleapis.com/",
  "rootUrl": "https://analyticsdata.googleapis.com/",
  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/data/v1/",
  "id": "analyticsdata:v1alpha",
  "mtlsRootUrl": "https://analyticsdata.mtls.googleapis.com/",
  "servicePath": "",
  "ownerName": "Google",
  "discoveryVersion": "v1",
  "protocol": "rest",
  "fullyEncodeReservedExpansion": true,
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "version": "v1alpha",
  "revision": "20260511",
  "ownerDomain": "google.com",
  "schemas": {
    "RunFunnelReportRequest": {
      "id": "RunFunnelReportRequest",
      "description": "The request for a funnel report.",
      "type": "object",
      "properties": {
        "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"
          }
        },
        "funnel": {
          "description": "Optional. The configuration of this request's funnel. This funnel configuration is required.",
          "$ref": "Funnel"
        },
        "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"
        },
        "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"
        },
        "funnelVisualizationType": {
          "description": "Optional. The funnel visualization type controls the dimensions present in the funnel visualization sub report response. If not specified, `STANDARD_FUNNEL` is used.",
          "type": "string",
          "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."
          ],
          "enum": [
            "FUNNEL_VISUALIZATION_TYPE_UNSPECIFIED",
            "STANDARD_FUNNEL",
            "TRENDED_FUNNEL"
          ]
        },
        "segments": {
          "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.",
          "type": "array",
          "items": {
            "$ref": "Segment"
          }
        },
        "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`.",
          "type": "string",
          "format": "int64"
        },
        "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"
        },
        "returnPropertyQuota": {
          "description": "Optional. Toggles whether to return the current state of this Analytics Property's quota. Quota is returned in [PropertyQuota](#PropertyQuota).",
          "type": "boolean"
        }
      }
    },
    "DateRange": {
      "id": "DateRange",
      "description": "A contiguous set of days: `startDate`, `startDate + 1`, ..., `endDate`. Requests are allowed up to 4 date ranges.",
      "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"
        },
        "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"
        },
        "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"
        }
      }
    },
    "Funnel": {
      "id": "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.",
      "type": "object",
      "properties": {
        "isOpenFunnel": {
          "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.",
          "type": "boolean"
        },
        "steps": {
          "description": "The sequential steps of this funnel.",
          "type": "array",
          "items": {
            "$ref": "FunnelStep"
          }
        }
      }
    },
    "FunnelStep": {
      "id": "FunnelStep",
      "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.",
      "type": "object",
      "properties": {
        "name": {
          "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.",
          "type": "string"
        },
        "isDirectlyFollowedBy": {
          "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.",
          "type": "boolean"
        },
        "withinDurationFromPriorStep": {
          "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.",
          "type": "string",
          "format": "google-duration"
        },
        "filterExpression": {
          "description": "The condition that your users must meet to be included in this step of the funnel journey.",
          "$ref": "FunnelFilterExpression"
        }
      }
    },
    "FunnelFilterExpression": {
      "id": "FunnelFilterExpression",
      "description": "Expresses combinations of funnel filters.",
      "type": "object",
      "properties": {
        "andGroup": {
          "description": "The FunnelFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "FunnelFilterExpressionList"
        },
        "orGroup": {
          "description": "The FunnelFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "FunnelFilterExpressionList"
        },
        "notExpression": {
          "description": "The FunnelFilterExpression is NOT of `notExpression`.",
          "$ref": "FunnelFilterExpression"
        },
        "funnelFieldFilter": {
          "description": "A funnel filter for a dimension or metric.",
          "$ref": "FunnelFieldFilter"
        },
        "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"
        }
      }
    },
    "FunnelFilterExpressionList": {
      "id": "FunnelFilterExpressionList",
      "description": "A list of funnel filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "The list of funnel filter expressions.",
          "type": "array",
          "items": {
            "$ref": "FunnelFilterExpression"
          }
        }
      }
    },
    "FunnelFieldFilter": {
      "id": "FunnelFieldFilter",
      "description": "An expression to filter dimension or metric values.",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        }
      }
    },
    "StringFilter": {
      "id": "StringFilter",
      "description": "The filter for string",
      "type": "object",
      "properties": {
        "matchType": {
          "description": "The match type for this filter.",
          "type": "string",
          "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."
          ],
          "enum": [
            "MATCH_TYPE_UNSPECIFIED",
            "EXACT",
            "BEGINS_WITH",
            "ENDS_WITH",
            "CONTAINS",
            "FULL_REGEXP",
            "PARTIAL_REGEXP"
          ]
        },
        "value": {
          "description": "The string value used for the matching.",
          "type": "string"
        },
        "caseSensitive": {
          "description": "If true, the string value is case sensitive.",
          "type": "boolean"
        }
      }
    },
    "InListFilter": {
      "id": "InListFilter",
      "description": "The result needs to be in a list of string values.",
      "type": "object",
      "properties": {
        "values": {
          "description": "The list of string values. Must be non-empty.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "caseSensitive": {
          "description": "If true, the string value is case sensitive.",
          "type": "boolean"
        }
      }
    },
    "NumericFilter": {
      "id": "NumericFilter",
      "description": "Filters for numeric or date values.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "The operation type for this filter.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified.",
            "Equal",
            "Less than",
            "Less than or equal",
            "Greater than",
            "Greater than or equal"
          ],
          "enum": [
            "OPERATION_UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ]
        },
        "value": {
          "description": "A numeric value or a date value.",
          "$ref": "NumericValue"
        }
      }
    },
    "NumericValue": {
      "id": "NumericValue",
      "description": "To represent a number.",
      "type": "object",
      "properties": {
        "int64Value": {
          "description": "Integer value",
          "type": "string",
          "format": "int64"
        },
        "doubleValue": {
          "description": "Double value",
          "type": "number",
          "format": "double"
        }
      }
    },
    "BetweenFilter": {
      "id": "BetweenFilter",
      "description": "To express that the result needs to be between two numbers (inclusive).",
      "type": "object",
      "properties": {
        "fromValue": {
          "description": "Begins with this number.",
          "$ref": "NumericValue"
        },
        "toValue": {
          "description": "Ends with this number.",
          "$ref": "NumericValue"
        }
      }
    },
    "FunnelEventFilter": {
      "id": "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.",
      "type": "object",
      "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"
        }
      }
    },
    "FunnelParameterFilterExpression": {
      "id": "FunnelParameterFilterExpression",
      "description": "Expresses combinations of funnel filters on parameters.",
      "type": "object",
      "properties": {
        "andGroup": {
          "description": "The FunnelParameterFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "FunnelParameterFilterExpressionList"
        },
        "orGroup": {
          "description": "The FunnelParameterFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "FunnelParameterFilterExpressionList"
        },
        "notExpression": {
          "description": "The FunnelParameterFilterExpression is NOT of `notExpression`.",
          "$ref": "FunnelParameterFilterExpression"
        },
        "funnelParameterFilter": {
          "description": "A primitive funnel parameter filter.",
          "$ref": "FunnelParameterFilter"
        }
      }
    },
    "FunnelParameterFilterExpressionList": {
      "id": "FunnelParameterFilterExpressionList",
      "description": "A list of funnel parameter filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "The list of funnel parameter filter expressions.",
          "type": "array",
          "items": {
            "$ref": "FunnelParameterFilterExpression"
          }
        }
      }
    },
    "FunnelParameterFilter": {
      "id": "FunnelParameterFilter",
      "description": "An expression to filter parameter values in a funnel.",
      "type": "object",
      "properties": {
        "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"
        },
        "itemParameterName": {
          "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.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        }
      }
    },
    "FunnelBreakdown": {
      "id": "FunnelBreakdown",
      "description": "Breakdowns add a dimension to the funnel table sub report response.",
      "type": "object",
      "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": {
          "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.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "Dimension": {
      "id": "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\".",
      "type": "object",
      "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"
        }
      }
    },
    "DimensionExpression": {
      "id": "DimensionExpression",
      "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).",
      "type": "object",
      "properties": {
        "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"
        },
        "concatenate": {
          "description": "Used to combine dimension values to a single dimension. For example, dimension \"country, city\": concatenate(country, \", \", city).",
          "$ref": "ConcatenateExpression"
        }
      }
    },
    "CaseExpression": {
      "id": "CaseExpression",
      "description": "Used to convert a dimension value to a single case.",
      "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"
        }
      }
    },
    "ConcatenateExpression": {
      "id": "ConcatenateExpression",
      "description": "Used to combine dimension values to a single dimension.",
      "type": "object",
      "properties": {
        "dimensionNames": {
          "description": "Names of dimensions. The names must refer back to names in the dimensions field of the request.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "delimiter": {
          "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\".",
          "type": "string"
        }
      }
    },
    "FunnelNextAction": {
      "id": "FunnelNextAction",
      "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.",
      "type": "object",
      "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.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "Segment": {
      "id": "Segment",
      "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).",
      "type": "object",
      "properties": {
        "name": {
          "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.).",
          "type": "string"
        },
        "userSegment": {
          "description": "User segments are subsets of users who engaged with your site or app.",
          "$ref": "UserSegment"
        },
        "sessionSegment": {
          "description": "Session segments are subsets of the sessions that occurred on your site or app.",
          "$ref": "SessionSegment"
        },
        "eventSegment": {
          "description": "Event segments are subsets of events that were triggered on your site or app.",
          "$ref": "EventSegment"
        }
      }
    },
    "UserSegment": {
      "id": "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.",
      "type": "object",
      "properties": {
        "userInclusionCriteria": {
          "description": "Defines which users are included in this segment. Optional.",
          "$ref": "UserSegmentCriteria"
        },
        "exclusion": {
          "description": "Defines which users are excluded in this segment. Optional.",
          "$ref": "UserSegmentExclusion"
        }
      }
    },
    "UserSegmentCriteria": {
      "id": "UserSegmentCriteria",
      "description": "A user matches a criteria if the user's events meet the conditions in the criteria.",
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "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.",
          "type": "array",
          "items": {
            "$ref": "UserSegmentConditionGroup"
          }
        },
        "andSequenceGroups": {
          "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.",
          "type": "array",
          "items": {
            "$ref": "UserSegmentSequenceGroup"
          }
        }
      }
    },
    "UserSegmentConditionGroup": {
      "id": "UserSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment.",
      "type": "object",
      "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.",
          "type": "string",
          "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."
          ],
          "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"
        }
      }
    },
    "SegmentFilterExpression": {
      "id": "SegmentFilterExpression",
      "description": "Expresses combinations of segment filters.",
      "type": "object",
      "properties": {
        "andGroup": {
          "description": "The SegmentFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "SegmentFilterExpressionList"
        },
        "orGroup": {
          "description": "The SegmentFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "SegmentFilterExpressionList"
        },
        "notExpression": {
          "description": "The SegmentFilterExpression is NOT of `notExpression`.",
          "$ref": "SegmentFilterExpression"
        },
        "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"
        }
      }
    },
    "SegmentFilterExpressionList": {
      "id": "SegmentFilterExpressionList",
      "description": "A list of segment filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "The list of segment filter expressions",
          "type": "array",
          "items": {
            "$ref": "SegmentFilterExpression"
          }
        }
      }
    },
    "SegmentFilter": {
      "id": "SegmentFilter",
      "description": "An expression to filter dimension or metric values.",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "filterScoping": {
          "description": "Specifies the scope for the filter.",
          "$ref": "SegmentFilterScoping"
        }
      }
    },
    "SegmentFilterScoping": {
      "id": "SegmentFilterScoping",
      "description": "Scopings specify how the dimensions & metrics of multiple events should be considered when evaluating a segment filter.",
      "type": "object",
      "properties": {
        "atAnyPointInTime": {
          "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.",
          "type": "boolean"
        }
      }
    },
    "SegmentEventFilter": {
      "id": "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.",
      "type": "object",
      "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"
        }
      }
    },
    "SegmentParameterFilterExpression": {
      "id": "SegmentParameterFilterExpression",
      "description": "Expresses combinations of segment filter on parameters.",
      "type": "object",
      "properties": {
        "andGroup": {
          "description": "The SegmentParameterFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "SegmentParameterFilterExpressionList"
        },
        "orGroup": {
          "description": "The SegmentParameterFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "SegmentParameterFilterExpressionList"
        },
        "notExpression": {
          "description": "The SegmentParameterFilterExpression is NOT of `notExpression`.",
          "$ref": "SegmentParameterFilterExpression"
        },
        "segmentParameterFilter": {
          "description": "A primitive segment parameter filter.",
          "$ref": "SegmentParameterFilter"
        }
      }
    },
    "SegmentParameterFilterExpressionList": {
      "id": "SegmentParameterFilterExpressionList",
      "description": "A list of segment parameter filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "The list of segment parameter filter expressions.",
          "type": "array",
          "items": {
            "$ref": "SegmentParameterFilterExpression"
          }
        }
      }
    },
    "SegmentParameterFilter": {
      "id": "SegmentParameterFilter",
      "description": "An expression to filter parameter values in a segment.",
      "type": "object",
      "properties": {
        "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"
        },
        "itemParameterName": {
          "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.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "filterScoping": {
          "description": "Specifies the scope for the filter.",
          "$ref": "SegmentParameterFilterScoping"
        }
      }
    },
    "SegmentParameterFilterScoping": {
      "id": "SegmentParameterFilterScoping",
      "description": "Scopings specify how multiple events should be considered when evaluating a segment parameter filter.",
      "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.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "UserSegmentSequenceGroup": {
      "id": "UserSegmentSequenceGroup",
      "description": "Define conditions that must occur in a specific order for the user to be a member of the segment.",
      "type": "object",
      "properties": {
        "sequenceScoping": {
          "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.",
          "type": "string",
          "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."
          ],
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ]
        },
        "sequenceMaximumDuration": {
          "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.",
          "type": "string",
          "format": "google-duration"
        },
        "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"
          }
        }
      }
    },
    "UserSequenceStep": {
      "id": "UserSequenceStep",
      "description": "A condition that must occur in the specified step order for this user to match the sequence.",
      "type": "object",
      "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`.",
          "type": "string",
          "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."
          ],
          "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"
        }
      }
    },
    "UserSegmentExclusion": {
      "id": "UserSegmentExclusion",
      "description": "Specifies which users are excluded in this segment.",
      "type": "object",
      "properties": {
        "userExclusionDuration": {
          "description": "Specifies how long an exclusion will last if a user matches the `userExclusionCriteria`. Optional. If unspecified, `userExclusionDuration` of `USER_EXCLUSION_TEMPORARY` is used.",
          "type": "string",
          "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."
          ],
          "enum": [
            "USER_EXCLUSION_DURATION_UNSPECIFIED",
            "USER_EXCLUSION_TEMPORARY",
            "USER_EXCLUSION_PERMANENT"
          ]
        },
        "userExclusionCriteria": {
          "description": "If a user meets this condition, the user is excluded from membership in the segment for the `userExclusionDuration`.",
          "$ref": "UserSegmentCriteria"
        }
      }
    },
    "SessionSegment": {
      "id": "SessionSegment",
      "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.",
      "type": "object",
      "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"
        }
      }
    },
    "SessionSegmentCriteria": {
      "id": "SessionSegmentCriteria",
      "description": "A session matches a criteria if the session's events meet the conditions in the criteria.",
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "description": "A session matches this criteria if the session matches each of these `andConditionGroups`.",
          "type": "array",
          "items": {
            "$ref": "SessionSegmentConditionGroup"
          }
        }
      }
    },
    "SessionSegmentConditionGroup": {
      "id": "SessionSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment.",
      "type": "object",
      "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.",
          "type": "string",
          "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."
          ],
          "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"
        }
      }
    },
    "SessionSegmentExclusion": {
      "id": "SessionSegmentExclusion",
      "description": "Specifies which sessions are excluded in this segment.",
      "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.",
          "type": "string",
          "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."
          ],
          "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"
        }
      }
    },
    "EventSegment": {
      "id": "EventSegment",
      "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.",
      "type": "object",
      "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"
        }
      }
    },
    "EventSegmentCriteria": {
      "id": "EventSegmentCriteria",
      "description": "An event matches a criteria if the event meet the conditions in the criteria.",
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "description": "An event matches this criteria if the event matches each of these `andConditionGroups`.",
          "type": "array",
          "items": {
            "$ref": "EventSegmentConditionGroup"
          }
        }
      }
    },
    "EventSegmentConditionGroup": {
      "id": "EventSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment.",
      "type": "object",
      "properties": {
        "conditionScoping": {
          "description": "`conditionScoping` should always be `EVENT_CRITERIA_WITHIN_SAME_EVENT`. Optional. If unspecified, a `conditionScoping` of `EVENT_CRITERIA_WITHIN_SAME_EVENT` is used.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the event matches the criteria."
          ],
          "enum": [
            "EVENT_CRITERIA_SCOPING_UNSPECIFIED",
            "EVENT_CRITERIA_WITHIN_SAME_EVENT"
          ]
        },
        "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"
        }
      }
    },
    "EventSegmentExclusion": {
      "id": "EventSegmentExclusion",
      "description": "Specifies which events are excluded in this segment.",
      "type": "object",
      "properties": {
        "eventExclusionDuration": {
          "description": "`eventExclusionDuration` should always be `PERMANENTLY_EXCLUDE`. Optional. If unspecified, an `eventExclusionDuration` of `EVENT_EXCLUSION_PERMANENT` is used.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified exclusion duration. Do not specify.",
            "Permanently exclude events from the segment if the event ever meets the `eventExclusionCriteria` condition."
          ],
          "enum": [
            "EVENT_EXCLUSION_DURATION_UNSPECIFIED",
            "EVENT_EXCLUSION_PERMANENT"
          ]
        },
        "eventExclusionCriteria": {
          "description": "If an event meets this condition, the event is excluded from membership in the segment for the `eventExclusionDuration`.",
          "$ref": "EventSegmentCriteria"
        }
      }
    },
    "FilterExpression": {
      "id": "FilterExpression",
      "description": "To express dimension or metric filters. The fields in the same FilterExpression need to be either all dimensions or all metrics.",
      "type": "object",
      "properties": {
        "andGroup": {
          "description": "The FilterExpressions in and_group have an AND relationship.",
          "$ref": "FilterExpressionList"
        },
        "orGroup": {
          "description": "The FilterExpressions in or_group have an OR relationship.",
          "$ref": "FilterExpressionList"
        },
        "notExpression": {
          "description": "The FilterExpression is NOT of not_expression.",
          "$ref": "FilterExpression"
        },
        "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"
        }
      }
    },
    "FilterExpressionList": {
      "id": "FilterExpressionList",
      "description": "A list of filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "description": "A list of filter expressions.",
          "type": "array",
          "items": {
            "$ref": "FilterExpression"
          }
        }
      }
    },
    "Filter": {
      "id": "Filter",
      "description": "An expression to filter dimension or metric values.",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name. Must be a name defined in dimensions or metrics.",
          "type": "string"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "emptyFilter": {
          "description": "A filter for empty values such as \"(not set)\" and \"\" values.",
          "$ref": "EmptyFilter"
        }
      }
    },
    "EmptyFilter": {
      "id": "EmptyFilter",
      "description": "Filter for empty values.",
      "type": "object",
      "properties": {}
    },
    "RunFunnelReportResponse": {
      "id": "RunFunnelReportResponse",
      "description": "The funnel report response contains two sub reports. The two sub reports are different combinations of dimensions and metrics.",
      "type": "object",
      "properties": {
        "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"
        },
        "kind": {
          "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.",
          "type": "string"
        }
      }
    },
    "FunnelSubReport": {
      "id": "FunnelSubReport",
      "description": "Funnel sub reports contain the dimension and metric data values. For example, 12 users reached the second step of the funnel.",
      "type": "object",
      "properties": {
        "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": {
          "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.",
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          }
        },
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "metadata": {
          "description": "Metadata for the funnel report.",
          "$ref": "FunnelResponseMetadata"
        }
      }
    },
    "DimensionHeader": {
      "id": "DimensionHeader",
      "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.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The dimension's name.",
          "type": "string"
        }
      }
    },
    "MetricHeader": {
      "id": "MetricHeader",
      "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.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The metric's name.",
          "type": "string"
        },
        "type": {
          "description": "The metric's data type.",
          "type": "string",
          "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."
          ],
          "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"
          ]
        }
      }
    },
    "Row": {
      "id": "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\" } ] ```",
      "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": {
          "description": "List of requested visible metric values.",
          "type": "array",
          "items": {
            "$ref": "MetricValue"
          }
        }
      }
    },
    "DimensionValue": {
      "id": "DimensionValue",
      "description": "The value of a dimension.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value as a string if the dimension type is a string.",
          "type": "string"
        }
      }
    },
    "MetricValue": {
      "id": "MetricValue",
      "description": "The value of a metric.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Measurement value. See MetricHeader for type.",
          "type": "string"
        }
      }
    },
    "FunnelResponseMetadata": {
      "id": "FunnelResponseMetadata",
      "description": "The funnel report's response metadata carries additional information about the funnel report.",
      "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"
          }
        }
      }
    },
    "SamplingMetadata": {
      "id": "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.",
      "type": "object",
      "properties": {
        "samplesReadCount": {
          "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.",
          "type": "string",
          "format": "int64"
        },
        "samplingSpaceSize": {
          "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`.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "PropertyQuota": {
      "id": "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.",
      "type": "object",
      "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"
        },
        "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"
        },
        "concurrentRequests": {
          "description": "Standard Analytics Properties can send up to 10 concurrent requests; Analytics 360 Properties can use up to 50 concurrent requests.",
          "$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"
        },
        "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"
        },
        "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"
        }
      }
    },
    "QuotaStatus": {
      "id": "QuotaStatus",
      "description": "Current state for a particular quota group.",
      "type": "object",
      "properties": {
        "consumed": {
          "description": "Quota consumed by this request.",
          "type": "integer",
          "format": "int32"
        },
        "remaining": {
          "description": "Quota remaining after this request.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "AudienceList": {
      "id": "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.",
      "type": "object",
      "properties": {
        "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}`",
          "readOnly": true,
          "type": "string"
        },
        "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": {
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\".",
          "readOnly": true,
          "type": "string"
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the query response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        },
        "state": {
          "description": "Output only. The current state for this AudienceList.",
          "readOnly": true,
          "type": "string",
          "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."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "CREATING",
            "ACTIVE",
            "FAILED"
          ]
        },
        "beginCreatingTime": {
          "description": "Output only. The time when CreateAudienceList was called and the AudienceList began the `CREATING` state.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "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.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "rowCount": {
          "description": "Output only. The total number of rows in the AudienceList result.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "errorMessage": {
          "description": "Output only. Error message is populated when an audience list fails during creation. A common reason for such a failure is quota exhaustion.",
          "readOnly": true,
          "type": "string"
        },
        "percentageCompleted": {
          "description": "Output only. The percentage completed for this audience export ranging between 0 to 100.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "recurringAudienceList": {
          "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.",
          "readOnly": true,
          "type": "string"
        },
        "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"
        }
      }
    },
    "AudienceDimension": {
      "id": "AudienceDimension",
      "description": "An audience dimension is a user attribute. Specific user attributed are requested and then later returned in the `QueryAudienceListResponse`.",
      "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"
        }
      }
    },
    "WebhookNotification": {
      "id": "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.",
      "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": {
          "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.",
          "type": "string"
        }
      }
    },
    "Operation": {
      "id": "Operation",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "properties": {
        "name": {
          "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}`.",
          "type": "string"
        },
        "metadata": {
          "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.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        },
        "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"
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "Status"
        },
        "response": {
          "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`.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "Status": {
      "id": "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).",
      "type": "object",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "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": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          }
        }
      }
    },
    "QueryAudienceListRequest": {
      "id": "QueryAudienceListRequest",
      "description": "A request to list users in an audience list.",
      "type": "object",
      "properties": {
        "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).",
          "type": "string",
          "format": "int64"
        },
        "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`. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "QueryAudienceListResponse": {
      "id": "QueryAudienceListResponse",
      "description": "A list of users in an audience list.",
      "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"
        },
        "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"
          }
        },
        "rowCount": {
          "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).",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "AudienceRow": {
      "id": "AudienceRow",
      "description": "Dimension value attributes for the audience user row.",
      "type": "object",
      "properties": {
        "dimensionValues": {
          "description": "Each dimension value attribute for an audience user. One dimension value will be added for each dimension column requested.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimensionValue"
          }
        }
      }
    },
    "AudienceDimensionValue": {
      "id": "AudienceDimensionValue",
      "description": "The value of a dimension.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value as a string if the dimension type is a string.",
          "type": "string"
        }
      }
    },
    "ListAudienceListsResponse": {
      "id": "ListAudienceListsResponse",
      "description": "A list of all audience lists for a property.",
      "type": "object",
      "properties": {
        "audienceLists": {
          "description": "Each audience list for a property.",
          "type": "array",
          "items": {
            "$ref": "AudienceList"
          }
        },
        "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"
        }
      }
    },
    "RecurringAudienceList": {
      "id": "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.",
      "type": "object",
      "properties": {
        "name": {
          "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}`",
          "readOnly": true,
          "type": "string"
        },
        "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": {
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\".",
          "readOnly": true,
          "type": "string"
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the audience list response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        },
        "activeDaysRemaining": {
          "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.",
          "type": "integer",
          "format": "int32"
        },
        "audienceLists": {
          "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.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "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"
        }
      }
    },
    "ListRecurringAudienceListsResponse": {
      "id": "ListRecurringAudienceListsResponse",
      "description": "A list of all recurring audience lists for a property.",
      "type": "object",
      "properties": {
        "recurringAudienceLists": {
          "description": "Each recurring audience list for a property.",
          "type": "array",
          "items": {
            "$ref": "RecurringAudienceList"
          }
        },
        "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"
        }
      }
    },
    "PropertyQuotasSnapshot": {
      "id": "PropertyQuotasSnapshot",
      "description": "Current state of all Property Quotas organized by quota category.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The property quota snapshot resource name.",
          "type": "string"
        },
        "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"
        }
      }
    },
    "ReportTask": {
      "id": "ReportTask",
      "description": "A specific report task configuration.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. Identifier. The report task resource name assigned during creation. Format: \"properties/{property}/reportTasks/{report_task}\"",
          "readOnly": true,
          "type": "string"
        },
        "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"
        },
        "reportMetadata": {
          "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,",
          "readOnly": true,
          "$ref": "ReportMetadata"
        }
      }
    },
    "ReportDefinition": {
      "id": "ReportDefinition",
      "description": "The definition of how a report should be run.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "Optional. The dimensions requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Dimension"
          }
        },
        "metrics": {
          "description": "Optional. The metrics requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Metric"
          }
        },
        "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"
          }
        },
        "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"
        },
        "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"
        },
        "offset": {
          "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.",
          "type": "string",
          "format": "int64"
        },
        "limit": {
          "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.",
          "type": "string",
          "format": "int64"
        },
        "metricAggregations": {
          "description": "Optional. Aggregation of metrics. Aggregated metric values will be shown in rows where the dimension_values are set to \"RESERVED_(MetricAggregation)\".",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified operator.",
              "SUM operator.",
              "Minimum operator.",
              "Maximum operator.",
              "Count operator."
            ],
            "enum": [
              "METRIC_AGGREGATION_UNSPECIFIED",
              "TOTAL",
              "MINIMUM",
              "MAXIMUM",
              "COUNT"
            ]
          }
        },
        "orderBys": {
          "description": "Optional. Specifies how rows are ordered in the response.",
          "type": "array",
          "items": {
            "$ref": "OrderBy"
          }
        },
        "currencyCode": {
          "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.",
          "type": "string"
        },
        "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"
        },
        "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"
        },
        "samplingLevel": {
          "description": "Optional. The report's sampling level.",
          "type": "string",
          "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."
          ],
          "enum": [
            "SAMPLING_LEVEL_UNSPECIFIED",
            "LOW",
            "MEDIUM",
            "UNSAMPLED"
          ]
        }
      }
    },
    "Metric": {
      "id": "Metric",
      "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.",
      "type": "object",
      "properties": {
        "name": {
          "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`.",
          "type": "string"
        },
        "expression": {
          "description": "A mathematical expression for derived metrics. For example, the metric Event count per user is `eventCount/totalUsers`.",
          "type": "string"
        },
        "invisible": {
          "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`.",
          "type": "boolean"
        }
      }
    },
    "OrderBy": {
      "id": "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.",
      "type": "object",
      "properties": {
        "metric": {
          "description": "Sorts results by a metric's values.",
          "$ref": "MetricOrderBy"
        },
        "dimension": {
          "description": "Sorts results by a dimension's values.",
          "$ref": "DimensionOrderBy"
        },
        "desc": {
          "description": "If true, sorts by descending order.",
          "type": "boolean"
        }
      }
    },
    "MetricOrderBy": {
      "id": "MetricOrderBy",
      "description": "Sorts by metric values.",
      "type": "object",
      "properties": {
        "metricName": {
          "description": "A metric name in the request to order by.",
          "type": "string"
        }
      }
    },
    "DimensionOrderBy": {
      "id": "DimensionOrderBy",
      "description": "Sorts by dimension values.",
      "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.",
          "type": "string",
          "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."
          ],
          "enum": [
            "ORDER_TYPE_UNSPECIFIED",
            "ALPHANUMERIC",
            "CASE_INSENSITIVE_ALPHANUMERIC",
            "NUMERIC"
          ]
        }
      }
    },
    "CohortSpec": {
      "id": "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.",
      "type": "object",
      "properties": {
        "cohorts": {
          "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.",
          "type": "array",
          "items": {
            "$ref": "Cohort"
          }
        },
        "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"
        }
      }
    },
    "Cohort": {
      "id": "Cohort",
      "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.",
      "type": "object",
      "properties": {
        "name": {
          "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.",
          "type": "string"
        },
        "dimension": {
          "description": "Dimension used by the cohort. Required and only supports `firstSessionDate`.",
          "type": "string"
        },
        "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"
        }
      }
    },
    "CohortsRange": {
      "id": "CohortsRange",
      "description": "Configures the extended reporting date range for a cohort report. Specifies an offset duration to follow the cohorts over.",
      "type": "object",
      "properties": {
        "granularity": {
          "description": "Required. The granularity used to interpret the `startOffset` and `endOffset` for the extended reporting date range for a cohort report.",
          "type": "string",
          "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`."
          ],
          "enum": [
            "GRANULARITY_UNSPECIFIED",
            "DAILY",
            "WEEKLY",
            "MONTHLY"
          ]
        },
        "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.",
          "type": "integer",
          "format": "int32"
        },
        "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.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "CohortReportSettings": {
      "id": "CohortReportSettings",
      "description": "Optional settings of a cohort report.",
      "type": "object",
      "properties": {
        "accumulate": {
          "description": "If true, accumulates the result from first touch day to the end day. Not supported in `RunReportRequest`.",
          "type": "boolean"
        }
      }
    },
    "ReportMetadata": {
      "id": "ReportMetadata",
      "description": "The report metadata for a specific report task.",
      "type": "object",
      "properties": {
        "state": {
          "description": "Output only. The current state for this report task.",
          "readOnly": true,
          "type": "string",
          "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"
          ]
        },
        "beginCreatingTime": {
          "description": "Output only. The time when `CreateReportTask` was called and the report began the `CREATING` state.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "creationQuotaTokensCharged": {
          "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.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "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.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "errorMessage": {
          "description": "Output only. Error message is populated if a report task fails during creation.",
          "readOnly": true,
          "type": "string"
        },
        "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.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "QueryReportTaskRequest": {
      "id": "QueryReportTaskRequest",
      "description": "A request to fetch the report content for a report task.",
      "type": "object",
      "properties": {
        "offset": {
          "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).",
          "type": "string",
          "format": "int64"
        },
        "limit": {
          "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).",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "QueryReportTaskResponse": {
      "id": "QueryReportTaskResponse",
      "description": "The report content corresponding to a report task.",
      "type": "object",
      "properties": {
        "dimensionHeaders": {
          "description": "Describes dimension columns. The number of DimensionHeaders and ordering of DimensionHeaders matches the dimensions present in rows.",
          "type": "array",
          "items": {
            "$ref": "DimensionHeader"
          }
        },
        "metricHeaders": {
          "description": "Describes metric columns. The number of MetricHeaders and ordering of MetricHeaders matches the metrics present in rows.",
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          }
        },
        "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"
          }
        },
        "maximums": {
          "description": "If requested, the maximum values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "minimums": {
          "description": "If requested, the minimum values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "rowCount": {
          "description": "The total number of rows in the query result.",
          "type": "integer",
          "format": "int32"
        },
        "metadata": {
          "description": "Metadata for the report.",
          "$ref": "ResponseMetaData"
        }
      }
    },
    "ResponseMetaData": {
      "id": "ResponseMetaData",
      "description": "Response's metadata carrying additional information about the report content.",
      "type": "object",
      "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"
        },
        "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"
        },
        "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"
        },
        "emptyReason": {
          "description": "If empty reason is specified, the report is empty for this reason.",
          "type": "string"
        },
        "subjectToThresholding": {
          "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).",
          "type": "boolean"
        },
        "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"
          }
        },
        "section": {
          "description": "Identifies the type of data in the report.",
          "type": "string",
          "enumDescriptions": [
            "Should never be specified.",
            "The report data is from the standard report data. Google Analytics reports include acquisition, engagement, and user behavior reports. Reports use dimensions like session source & landing page; reports use metrics like sessions, views, and engagement time.",
            "The report data is from the conversion data. The Google Analytics Advertising section reports on conversion performance. Advertising reports use dimensions like source & medium; advertising reports use metrics like all conversions and ads cost."
          ],
          "enum": [
            "SECTION_UNSPECIFIED",
            "SECTION_REPORT",
            "SECTION_ADVERTISING"
          ]
        }
      }
    },
    "SchemaRestrictionResponse": {
      "id": "SchemaRestrictionResponse",
      "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).",
      "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"
          }
        }
      }
    },
    "ActiveMetricRestriction": {
      "id": "ActiveMetricRestriction",
      "description": "A metric actively restricted in creating the report.",
      "type": "object",
      "properties": {
        "metricName": {
          "description": "The name of the restricted metric.",
          "type": "string"
        },
        "restrictedMetricTypes": {
          "description": "The reason for this metric's restriction.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified type.",
              "Cost metrics such as `adCost`.",
              "Revenue metrics such as `purchaseRevenue`."
            ],
            "enum": [
              "RESTRICTED_METRIC_TYPE_UNSPECIFIED",
              "COST_DATA",
              "REVENUE_DATA"
            ]
          }
        }
      }
    },
    "ListReportTasksResponse": {
      "id": "ListReportTasksResponse",
      "description": "A list of all report tasks for a property.",
      "type": "object",
      "properties": {
        "reportTasks": {
          "description": "Each report task for a property.",
          "type": "array",
          "items": {
            "$ref": "ReportTask"
          }
        },
        "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"
        }
      }
    },
    "RunReportRequest": {
      "id": "RunReportRequest",
      "description": "The request to generate a report.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "Optional. The dimensions requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Dimension"
          }
        },
        "metrics": {
          "description": "Optional. The metrics requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Metric"
          }
        },
        "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"
          }
        },
        "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"
        },
        "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"
        },
        "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).",
          "type": "string",
          "format": "int64"
        },
        "limit": {
          "description": "Optional. The maximum 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`. 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. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "type": "string",
          "format": "int64"
        },
        "metricAggregations": {
          "description": "Optional. Aggregation of metrics. Aggregated metric values will be shown in rows where the dimension_values are set to \"RESERVED_(MetricAggregation)\". Aggregates including both comparisons and multiple date ranges will be aggregated based on the date ranges.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified operator.",
              "SUM operator.",
              "Minimum operator.",
              "Maximum operator.",
              "Count operator."
            ],
            "enum": [
              "METRIC_AGGREGATION_UNSPECIFIED",
              "TOTAL",
              "MINIMUM",
              "MAXIMUM",
              "COUNT"
            ]
          }
        },
        "orderBys": {
          "description": "Optional. Specifies how rows are ordered in the response. Requests including both comparisons and multiple date ranges will have order bys applied on the comparisons.",
          "type": "array",
          "items": {
            "$ref": "OrderBy"
          }
        },
        "currencyCode": {
          "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.",
          "type": "string"
        },
        "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"
        },
        "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 eventName: \"purchase\" and eventCount: 0.",
          "type": "boolean"
        },
        "returnPropertyQuota": {
          "description": "Optional. Toggles whether to return the current state of this Google Analytics property's quota. Quota is returned in [PropertyQuota](#PropertyQuota).",
          "type": "boolean"
        },
        "comparisons": {
          "description": "Optional. The configuration of comparisons requested and displayed. The request only requires a comparisons field in order to receive a comparison column in the response.",
          "type": "array",
          "items": {
            "$ref": "Comparison"
          }
        },
        "conversionSpec": {
          "description": "Optional. Controls conversion reporting. This field is optional. If this field is set or any conversion metrics are requested, the report will be a conversion report.",
          "$ref": "ConversionSpec"
        }
      }
    },
    "Comparison": {
      "id": "Comparison",
      "description": "Defines an individual comparison. Most requests will include multiple comparisons so that the report compares between the comparisons.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Each comparison produces separate rows in the response. In the response, this comparison is identified by this name. If name is unspecified, we will use the saved comparisons display name.",
          "type": "string"
        },
        "dimensionFilter": {
          "description": "A basic comparison.",
          "$ref": "FilterExpression"
        },
        "comparison": {
          "description": "A saved comparison identified by the comparison's resource name. For example, 'comparisons/1234'.",
          "type": "string"
        }
      }
    },
    "ConversionSpec": {
      "id": "ConversionSpec",
      "description": "Controls conversion reporting. This feature may not be available to your Google Analytics property. The Google Analytics team is actively working to expand this feature to more properties. Please reach out to your support team if you have questions about the eligibility of your property. ",
      "type": "object",
      "properties": {
        "conversionActions": {
          "description": "The conversion action IDs to include in the report. If empty, all conversions are included. Valid conversion action IDs can be retrieved from the `conversion_action` field within the `conversions` list in the response of the `GetMetadata` method. For example, 'conversionActions/1234'.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "attributionModel": {
          "description": "The attribution model to use in the Conversion Report. If unspecified, `DATA_DRIVEN` is used.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified attribution model.",
            "Attribution was based on the paid and organic data driven model",
            "Attribution was based on the paid and organic last click model"
          ],
          "enum": [
            "ATTRIBUTION_MODEL_UNSPECIFIED",
            "DATA_DRIVEN",
            "LAST_CLICK"
          ]
        }
      }
    },
    "RunReportResponse": {
      "id": "RunReportResponse",
      "description": "The response report table corresponding to a request.",
      "type": "object",
      "properties": {
        "dimensionHeaders": {
          "description": "Describes dimension columns. The number of DimensionHeaders and ordering of DimensionHeaders matches the dimensions present in rows.",
          "type": "array",
          "items": {
            "$ref": "DimensionHeader"
          }
        },
        "metricHeaders": {
          "description": "Describes metric columns. The number of MetricHeaders and ordering of MetricHeaders matches the metrics present in rows.",
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          }
        },
        "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"
          }
        },
        "maximums": {
          "description": "If requested, the maximum values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "minimums": {
          "description": "If requested, the minimum values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "rowCount": {
          "description": "The total number of rows in the query result, regardless of the number of rows returned in the response. For example if a query returns 175 rows and includes limit = 50 in the API request, the response will contain row_count = 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).",
          "type": "integer",
          "format": "int32"
        },
        "metadata": {
          "description": "Metadata for the report.",
          "$ref": "ResponseMetaData"
        },
        "propertyQuota": {
          "description": "This Analytics Property's quota state including this request.",
          "$ref": "PropertyQuota"
        },
        "kind": {
          "description": "Identifies what kind of resource this message is. This `kind` is always the fixed string \"analyticsData#runReport\". Useful to distinguish between response types in JSON.",
          "type": "string"
        },
        "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"
        }
      }
    },
    "Metadata": {
      "id": "Metadata",
      "description": "The dimensions, metrics and comparisons currently accepted in reporting methods.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Resource name of this metadata.",
          "type": "string"
        },
        "dimensions": {
          "description": "The dimension descriptions.",
          "type": "array",
          "items": {
            "$ref": "DimensionMetadata"
          }
        },
        "metrics": {
          "description": "The metric descriptions.",
          "type": "array",
          "items": {
            "$ref": "MetricMetadata"
          }
        },
        "comparisons": {
          "description": "The comparison descriptions.",
          "type": "array",
          "items": {
            "$ref": "ComparisonMetadata"
          }
        },
        "conversions": {
          "description": "The conversion descriptions.",
          "type": "array",
          "items": {
            "$ref": "ConversionMetadata"
          }
        }
      }
    },
    "DimensionMetadata": {
      "id": "DimensionMetadata",
      "description": "Explains a dimension.",
      "type": "object",
      "properties": {
        "apiName": {
          "description": "This dimension's name. Usable in [Dimension](#Dimension)'s `name`. For example, `eventName`.",
          "type": "string"
        },
        "uiName": {
          "description": "This dimension's name within the Google Analytics user interface. For example, `Event name`.",
          "type": "string"
        },
        "description": {
          "description": "Description of how this dimension is used and calculated.",
          "type": "string"
        },
        "deprecatedApiNames": {
          "description": "Still usable but deprecated names for this dimension. If populated, this dimension is available by either `apiName` or one of `deprecatedApiNames` for a period of time. After the deprecation period, the dimension will be available only by `apiName`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "customDefinition": {
          "description": "True if the dimension is custom to this property. This includes user, event, & item scoped custom dimensions; to learn more about custom dimensions, see https://support.google.com/analytics/answer/14240153. This also include custom channel groups; to learn more about custom channel groups, see https://support.google.com/analytics/answer/13051316.",
          "type": "boolean"
        },
        "category": {
          "description": "The display name of the category that this dimension belongs to. Similar dimensions and metrics are categorized together.",
          "type": "string"
        },
        "sections": {
          "description": "Specifies the Google Analytics sections this dimension applies to.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Should never be specified.",
              "The report data is from the standard report data. Google Analytics reports include acquisition, engagement, and user behavior reports. Reports use dimensions like session source & landing page; reports use metrics like sessions, views, and engagement time.",
              "The report data is from the conversion data. The Google Analytics Advertising section reports on conversion performance. Advertising reports use dimensions like source & medium; advertising reports use metrics like all conversions and ads cost."
            ],
            "enum": [
              "SECTION_UNSPECIFIED",
              "SECTION_REPORT",
              "SECTION_ADVERTISING"
            ]
          }
        }
      }
    },
    "MetricMetadata": {
      "id": "MetricMetadata",
      "description": "Explains a metric.",
      "type": "object",
      "properties": {
        "apiName": {
          "description": "A metric name. Usable in [Metric](#Metric)'s `name`. For example, `eventCount`.",
          "type": "string"
        },
        "uiName": {
          "description": "This metric's name within the Google Analytics user interface. For example, `Event count`.",
          "type": "string"
        },
        "description": {
          "description": "Description of how this metric is used and calculated.",
          "type": "string"
        },
        "deprecatedApiNames": {
          "description": "Still usable but deprecated names for this metric. If populated, this metric is available by either `apiName` or one of `deprecatedApiNames` for a period of time. After the deprecation period, the metric will be available only by `apiName`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "type": {
          "description": "The type of this metric.",
          "type": "string",
          "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."
          ],
          "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"
          ]
        },
        "expression": {
          "description": "The mathematical expression for this derived metric. Can be used in [Metric](#Metric)'s `expression` field for equivalent reports. Most metrics are not expressions, and for non-expressions, this field is empty.",
          "type": "string"
        },
        "customDefinition": {
          "description": "True if the metric is a custom metric for this property.",
          "type": "boolean"
        },
        "blockedReasons": {
          "description": "If reasons are specified, your access is blocked to this metric for this property. API requests from you to this property for this metric will succeed; however, the report will contain only zeros for this metric. API requests with metric filters on blocked metrics will fail. If reasons are empty, you have access to this metric. To learn more, see [Access and data-restriction management](https://support.google.com/analytics/answer/10851388).",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Will never be specified in API response.",
              "If present, your access is blocked to revenue related metrics for this property, and this metric is revenue related.",
              "If present, your access is blocked to cost related metrics for this property, and this metric is cost related."
            ],
            "enum": [
              "BLOCKED_REASON_UNSPECIFIED",
              "NO_REVENUE_METRICS",
              "NO_COST_METRICS"
            ]
          }
        },
        "category": {
          "description": "The display name of the category that this metrics belongs to. Similar dimensions and metrics are categorized together.",
          "type": "string"
        },
        "sections": {
          "description": "Specifies the Google Analytics sections this metric applies to.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Should never be specified.",
              "The report data is from the standard report data. Google Analytics reports include acquisition, engagement, and user behavior reports. Reports use dimensions like session source & landing page; reports use metrics like sessions, views, and engagement time.",
              "The report data is from the conversion data. The Google Analytics Advertising section reports on conversion performance. Advertising reports use dimensions like source & medium; advertising reports use metrics like all conversions and ads cost."
            ],
            "enum": [
              "SECTION_UNSPECIFIED",
              "SECTION_REPORT",
              "SECTION_ADVERTISING"
            ]
          }
        }
      }
    },
    "ComparisonMetadata": {
      "id": "ComparisonMetadata",
      "description": "The metadata for a single comparison.",
      "type": "object",
      "properties": {
        "apiName": {
          "description": "This comparison's resource name. Usable in [Comparison](#Comparison)'s `comparison` field. For example, 'comparisons/1234'.",
          "type": "string"
        },
        "uiName": {
          "description": "This comparison's name within the Google Analytics user interface.",
          "type": "string"
        },
        "description": {
          "description": "This comparison's description.",
          "type": "string"
        }
      }
    },
    "ConversionMetadata": {
      "id": "ConversionMetadata",
      "description": "The metadata for a single conversion. This feature may not be available to your Google Analytics property. The Google Analytics team is actively working to expand this feature to more properties. Please reach out to your support team if you have questions about the eligibility of your property. ",
      "type": "object",
      "properties": {
        "conversionAction": {
          "description": "The unique identifier of the conversion action. This ID is used to specify which conversions to include in a report by populating the `conversion_actions` field in the `ConversionsSpec` of a report request. For example, 'conversionActions/1234'.",
          "type": "string"
        },
        "displayName": {
          "description": "This conversion's name within the Google Analytics user interface.",
          "type": "string"
        }
      }
    },
    "AudienceListMetadata": {
      "id": "AudienceListMetadata",
      "description": "This metadata is currently blank.",
      "type": "object",
      "properties": {}
    }
  },
  "batchPath": "batch",
  "canonicalName": "AnalyticsData",
  "title": "Google Analytics Data API"
}
