{
  "protocol": "rest",
  "schemas": {
    "FunnelFilterExpressionList": {
      "id": "FunnelFilterExpressionList",
      "description": "A list of funnel filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "type": "array",
          "items": {
            "$ref": "FunnelFilterExpression"
          },
          "description": "The list of funnel filter expressions."
        }
      }
    },
    "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.",
          "enum": [
            "GRANULARITY_UNSPECIFIED",
            "DAILY",
            "WEEKLY",
            "MONTHLY"
          ],
          "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`."
          ]
        },
        "startOffset": {
          "type": "integer",
          "description": "`startOffset` specifies the start date of the extended reporting date range for a cohort report. `startOffset` is commonly set to 0 so that reports contain data from the acquisition of the cohort forward. If `granularity` is `DAILY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset` days. If `granularity` is `WEEKLY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset * 7` days. If `granularity` is `MONTHLY`, the `startDate` of the extended reporting date range is `startDate` of the cohort plus `startOffset * 30` days.",
          "format": "int32"
        },
        "endOffset": {
          "type": "integer",
          "description": "Required. `endOffset` specifies the end date of the extended reporting date range for a cohort report. `endOffset` can be any positive integer but is commonly set to 5 to 10 so that reports contain data on the cohort for the next several granularity time periods. If `granularity` is `DAILY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset` days. If `granularity` is `WEEKLY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset * 7` days. If `granularity` is `MONTHLY`, the `endDate` of the extended reporting date range is `endDate` of the cohort plus `endOffset * 30` days.",
          "format": "int32"
        }
      }
    },
    "FunnelBreakdown": {
      "id": "FunnelBreakdown",
      "description": "Breakdowns add a dimension to the funnel table sub report response.",
      "type": "object",
      "properties": {
        "breakdownDimension": {
          "$ref": "Dimension",
          "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."
        },
        "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.",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "FunnelResponseMetadata": {
      "type": "object",
      "properties": {
        "samplingMetadatas": {
          "description": "If funnel report results are [sampled](https://support.google.com/analytics/answer/13331292), this describes what percentage of events were used in this funnel report. One `samplingMetadatas` is populated for each date range. Each `samplingMetadatas` corresponds to a date range in order that date ranges were specified in the request. However if the results are not sampled, this field will not be defined.",
          "type": "array",
          "items": {
            "$ref": "SamplingMetadata"
          }
        }
      },
      "id": "FunnelResponseMetadata",
      "description": "The funnel report's response metadata carries additional information about the funnel report."
    },
    "DimensionValue": {
      "type": "object",
      "properties": {
        "value": {
          "description": "Value as a string if the dimension type is a string.",
          "type": "string"
        }
      },
      "id": "DimensionValue",
      "description": "The value of a dimension."
    },
    "QueryReportTaskResponse": {
      "id": "QueryReportTaskResponse",
      "description": "The report content corresponding to a report task.",
      "type": "object",
      "properties": {
        "minimums": {
          "description": "If requested, the minimum values of metrics.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "items": {
            "$ref": "Row"
          },
          "type": "array"
        },
        "maximums": {
          "type": "array",
          "items": {
            "$ref": "Row"
          },
          "description": "If requested, the maximum values of metrics."
        },
        "totals": {
          "description": "If requested, the totaled values of metrics.",
          "items": {
            "$ref": "Row"
          },
          "type": "array"
        },
        "metricHeaders": {
          "items": {
            "$ref": "MetricHeader"
          },
          "type": "array",
          "description": "Describes metric columns. The number of MetricHeaders and ordering of MetricHeaders matches the metrics present in rows."
        },
        "rowCount": {
          "description": "The total number of rows in the query result.",
          "format": "int32",
          "type": "integer"
        },
        "metadata": {
          "$ref": "ResponseMetaData",
          "description": "Metadata for the report."
        },
        "dimensionHeaders": {
          "items": {
            "$ref": "DimensionHeader"
          },
          "type": "array",
          "description": "Describes dimension columns. The number of DimensionHeaders and ordering of DimensionHeaders matches the dimensions present in rows."
        }
      }
    },
    "FunnelParameterFilter": {
      "id": "FunnelParameterFilter",
      "description": "An expression to filter parameter values in a funnel.",
      "type": "object",
      "properties": {
        "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"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "stringFilter": {
          "$ref": "StringFilter",
          "description": "Strings related filter."
        },
        "betweenFilter": {
          "$ref": "BetweenFilter",
          "description": "A filter for between two values."
        },
        "inListFilter": {
          "$ref": "InListFilter",
          "description": "A filter for in list values."
        },
        "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"
        }
      }
    },
    "UserSegment": {
      "type": "object",
      "properties": {
        "userInclusionCriteria": {
          "$ref": "UserSegmentCriteria",
          "description": "Defines which users are included in this segment. Optional."
        },
        "exclusion": {
          "$ref": "UserSegmentExclusion",
          "description": "Defines which users are excluded in this segment. Optional."
        }
      },
      "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."
    },
    "AudienceList": {
      "type": "object",
      "properties": {
        "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"
        },
        "beginCreatingTime": {
          "description": "Output only. The time when CreateAudienceList was called and the AudienceList began the `CREATING` state.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "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"
        },
        "name": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. Identifier. The audience list resource name assigned during creation. This resource name identifies this `AudienceList`. Format: `properties/{property}/audienceLists/{audience_list}`"
        },
        "errorMessage": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. Error message is populated when an audience list fails during creation. A common reason for such a failure is quota exhaustion."
        },
        "percentageCompleted": {
          "description": "Output only. The percentage completed for this audience export ranging between 0 to 100.",
          "format": "double",
          "readOnly": true,
          "type": "number"
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the query response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        },
        "audienceDisplayName": {
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\".",
          "readOnly": true,
          "type": "string"
        },
        "webhookNotification": {
          "$ref": "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."
        },
        "creationQuotaTokensCharged": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The total quota tokens charged during creation of the AudienceList. Because this token count is based on activity from the `CREATING` state, this tokens charged will be fixed once an AudienceList enters the `ACTIVE` or `FAILED` states.",
          "format": "int32"
        },
        "state": {
          "description": "Output only. The current state for this AudienceList.",
          "readOnly": true,
          "type": "string",
          "enum": [
            "STATE_UNSPECIFIED",
            "CREATING",
            "ACTIVE",
            "FAILED"
          ],
          "enumDescriptions": [
            "Unspecified state will never be used.",
            "The AudienceList is currently creating and will be available in the future. Creating occurs immediately after the CreateAudienceList call.",
            "The AudienceList is fully created and ready for querying. An AudienceList is updated to active asynchronously from a request; this occurs some time (for example 15 minutes) after the initial create call.",
            "The AudienceList failed to be created. It is possible that re-requesting this audience list will succeed."
          ]
        },
        "rowCount": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The total number of rows in the AudienceList result.",
          "format": "int32"
        }
      },
      "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."
    },
    "Dimension": {
      "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": {
          "$ref": "DimensionExpression",
          "description": "One dimension can be the result of an expression of multiple dimensions. For example, dimension \"country, city\": concatenate(country, \", \", city)."
        }
      },
      "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\"."
    },
    "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`.",
          "items": {
            "$ref": "SessionSegmentConditionGroup"
          },
          "type": "array"
        }
      }
    },
    "RunFunnelReportRequest": {
      "type": "object",
      "properties": {
        "funnelVisualizationType": {
          "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."
          ],
          "type": "string",
          "enum": [
            "FUNNEL_VISUALIZATION_TYPE_UNSPECIFIED",
            "STANDARD_FUNNEL",
            "TRENDED_FUNNEL"
          ],
          "description": "Optional. The funnel visualization type controls the dimensions present in the funnel visualization sub report response. If not specified, `STANDARD_FUNNEL` is used."
        },
        "limit": {
          "description": "Optional. The number of rows to return. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`.",
          "format": "int64",
          "type": "string"
        },
        "dimensionFilter": {
          "$ref": "FilterExpression",
          "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."
        },
        "funnelNextAction": {
          "description": "Optional. If specified, next action adds a dimension to the funnel visualization sub report response. This next action dimension expands each funnel step to the unique values of the next action. For example a next action of the `eventName` dimension will create rows for several events (for example `session_start` & `click`) and the total. Next action only supports `eventName` and most Page / Screen dimensions like `pageTitle` and `pagePath`.",
          "$ref": "FunnelNextAction"
        },
        "segments": {
          "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"
          }
        },
        "returnPropertyQuota": {
          "description": "Optional. Toggles whether to return the current state of this Analytics Property's quota. Quota is returned in [PropertyQuota](#PropertyQuota).",
          "type": "boolean"
        },
        "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": {
          "$ref": "Funnel",
          "description": "Optional. The configuration of this request's funnel. This funnel configuration is required."
        },
        "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"
        }
      },
      "id": "RunFunnelReportRequest",
      "description": "The request for a funnel report."
    },
    "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"
        }
      }
    },
    "AudienceDimensionValue": {
      "type": "object",
      "properties": {
        "value": {
          "description": "Value as a string if the dimension type is a string.",
          "type": "string"
        }
      },
      "id": "AudienceDimensionValue",
      "description": "The value of a dimension."
    },
    "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.",
          "items": {
            "$ref": "UserSegmentConditionGroup"
          },
          "type": "array"
        },
        "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.",
          "items": {
            "$ref": "UserSegmentSequenceGroup"
          },
          "type": "array"
        }
      }
    },
    "SegmentFilterScoping": {
      "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"
        }
      },
      "id": "SegmentFilterScoping",
      "description": "Scopings specify how the dimensions & metrics of multiple events should be considered when evaluating a segment filter."
    },
    "MetricMetadata": {
      "type": "object",
      "properties": {
        "apiName": {
          "description": "A metric name. Usable in [Metric](#Metric)'s `name`. For example, `eventCount`.",
          "type": "string"
        },
        "category": {
          "description": "The display name of the category that this metrics belongs to. Similar dimensions and metrics are categorized together.",
          "type": "string"
        },
        "type": {
          "enumDescriptions": [
            "Unspecified type.",
            "Integer type.",
            "Floating point type.",
            "A duration of seconds; a special floating point type.",
            "A duration in milliseconds; a special floating point type.",
            "A duration in minutes; a special floating point type.",
            "A duration in hours; a special floating point type.",
            "A custom metric of standard type; a special floating point type.",
            "An amount of money; a special floating point type.",
            "A length in feet; a special floating point type.",
            "A length in miles; a special floating point type.",
            "A length in meters; a special floating point type.",
            "A length in kilometers; a special floating point type."
          ],
          "type": "string",
          "enum": [
            "METRIC_TYPE_UNSPECIFIED",
            "TYPE_INTEGER",
            "TYPE_FLOAT",
            "TYPE_SECONDS",
            "TYPE_MILLISECONDS",
            "TYPE_MINUTES",
            "TYPE_HOURS",
            "TYPE_STANDARD",
            "TYPE_CURRENCY",
            "TYPE_FEET",
            "TYPE_MILES",
            "TYPE_METERS",
            "TYPE_KILOMETERS"
          ],
          "description": "The type of this metric."
        },
        "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"
        },
        "description": {
          "description": "Description of how this metric is used and calculated.",
          "type": "string"
        },
        "sections": {
          "items": {
            "enum": [
              "SECTION_UNSPECIFIED",
              "SECTION_REPORT",
              "SECTION_ADVERTISING"
            ],
            "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."
            ],
            "type": "string"
          },
          "type": "array",
          "description": "Specifies the Google Analytics sections this metric applies to."
        },
        "deprecatedApiNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "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`."
        },
        "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": {
            "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."
            ],
            "type": "string",
            "enum": [
              "BLOCKED_REASON_UNSPECIFIED",
              "NO_REVENUE_METRICS",
              "NO_COST_METRICS"
            ]
          }
        },
        "uiName": {
          "description": "This metric's name within the Google Analytics user interface. For example, `Event count`.",
          "type": "string"
        }
      },
      "id": "MetricMetadata",
      "description": "Explains a metric."
    },
    "CohortSpec": {
      "type": "object",
      "properties": {
        "cohortsRange": {
          "$ref": "CohortsRange",
          "description": "Cohort reports follow cohorts over an extended reporting date range. This range specifies an offset duration to follow the cohorts over."
        },
        "cohortReportSettings": {
          "$ref": "CohortReportSettings",
          "description": "Optional settings for a cohort report."
        },
        "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.",
          "items": {
            "$ref": "Cohort"
          },
          "type": "array"
        }
      },
      "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."
    },
    "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"
        },
        "activeDaysRemaining": {
          "type": "integer",
          "description": "Optional. The number of remaining days that a recurring audience export will produce an audience list instance. This counter decreases by one each day, and when it reaches zero, no new audience lists will be created. Recurring audience list request for Analytics 360 properties default to 180 days and have a maximum of 365 days. Requests for standard Analytics properties default to 14 days and have a maximum of 30 days. The minimum value allowed during creation is 1. Requests above their respective maximum will be coerced to their maximum.",
          "format": "int32"
        },
        "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"
        },
        "dimensions": {
          "description": "Required. The dimensions requested and displayed in the audience list response.",
          "type": "array",
          "items": {
            "$ref": "AudienceDimension"
          }
        },
        "audienceDisplayName": {
          "description": "Output only. The descriptive display name for this audience. For example, \"Purchasers\".",
          "readOnly": true,
          "type": "string"
        },
        "webhookNotification": {
          "$ref": "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)."
        },
        "audienceLists": {
          "items": {
            "type": "string"
          },
          "readOnly": true,
          "type": "array",
          "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."
        }
      }
    },
    "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.",
          "items": {
            "$ref": "AudienceDimensionValue"
          },
          "type": "array"
        }
      }
    },
    "RunReportRequest": {
      "id": "RunReportRequest",
      "description": "The request to generate a report.",
      "type": "object",
      "properties": {
        "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"
        },
        "metricAggregations": {
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified operator.",
              "SUM operator.",
              "Minimum operator.",
              "Maximum operator.",
              "Count operator."
            ],
            "enum": [
              "METRIC_AGGREGATION_UNSPECIFIED",
              "TOTAL",
              "MINIMUM",
              "MAXIMUM",
              "COUNT"
            ]
          },
          "type": "array",
          "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."
        },
        "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"
          }
        },
        "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"
        },
        "dateRanges": {
          "type": "array",
          "items": {
            "$ref": "DateRange"
          },
          "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."
        },
        "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"
        },
        "metrics": {
          "description": "Optional. The metrics requested and displayed.",
          "items": {
            "$ref": "Metric"
          },
          "type": "array"
        },
        "dimensions": {
          "description": "Optional. The dimensions requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Dimension"
          }
        },
        "comparisons": {
          "type": "array",
          "items": {
            "$ref": "Comparison"
          },
          "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."
        },
        "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"
        },
        "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"
        },
        "offset": {
          "description": "Optional. The row count of the start row. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64",
          "type": "string"
        },
        "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"
        },
        "metricFilter": {
          "$ref": "FilterExpression",
          "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."
        },
        "limit": {
          "type": "string",
          "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).",
          "format": "int64"
        }
      }
    },
    "FunnelFilterExpression": {
      "id": "FunnelFilterExpression",
      "description": "Expresses combinations of funnel filters.",
      "type": "object",
      "properties": {
        "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"
        },
        "andGroup": {
          "description": "The FunnelFilterExpression in `andGroup` have an AND relationship.",
          "$ref": "FunnelFilterExpressionList"
        },
        "orGroup": {
          "$ref": "FunnelFilterExpressionList",
          "description": "The FunnelFilterExpression in `orGroup` have an OR relationship."
        },
        "funnelFieldFilter": {
          "description": "A funnel filter for a dimension or metric.",
          "$ref": "FunnelFieldFilter"
        },
        "notExpression": {
          "description": "The FunnelFilterExpression is NOT of `notExpression`.",
          "$ref": "FunnelFilterExpression"
        }
      }
    },
    "DimensionMetadata": {
      "type": "object",
      "properties": {
        "description": {
          "description": "Description of how this dimension is used and calculated.",
          "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"
        },
        "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`.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "apiName": {
          "description": "This dimension's name. Usable in [Dimension](#Dimension)'s `name`. For example, `eventName`.",
          "type": "string"
        },
        "category": {
          "description": "The display name of the category that this dimension belongs to. Similar dimensions and metrics are categorized together.",
          "type": "string"
        },
        "uiName": {
          "description": "This dimension's name within the Google Analytics user interface. For example, `Event name`.",
          "type": "string"
        },
        "sections": {
          "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"
            ]
          },
          "type": "array",
          "description": "Specifies the Google Analytics sections this dimension applies to."
        }
      },
      "id": "DimensionMetadata",
      "description": "Explains a dimension."
    },
    "Funnel": {
      "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": {
          "items": {
            "$ref": "FunnelStep"
          },
          "type": "array",
          "description": "The sequential steps of this 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."
    },
    "UserSequenceStep": {
      "type": "object",
      "properties": {
        "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"
        },
        "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": {
          "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."
          ],
          "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`.",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ]
        }
      },
      "id": "UserSequenceStep",
      "description": "A condition that must occur in the specified step order for this user to match the sequence."
    },
    "QuotaStatus": {
      "id": "QuotaStatus",
      "description": "Current state for a particular quota group.",
      "type": "object",
      "properties": {
        "consumed": {
          "type": "integer",
          "description": "Quota consumed by this request.",
          "format": "int32"
        },
        "remaining": {
          "description": "Quota remaining after this request.",
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "SegmentParameterFilterScoping": {
      "type": "object",
      "properties": {
        "inAnyNDayPeriod": {
          "type": "string",
          "description": "Accumulates the parameter over the specified period of days before applying the filter. Only supported if criteria scoping is `ACROSS_ALL_SESSIONS` or `WITHIN_SAME_SESSION`. Only supported if the parameter is `event_count`. For example if `inAnyNDayPeriod` is 3, the event_name is \"purchase\", the event parameter is \"event_count\", and the Filter's criteria is greater than 5, this filter will accumulate the event count of purchase events over every 3 consecutive day period in the report's date range; a user will pass this Filter's criteria to be included in this segment if their count of purchase events exceeds 5 in any 3 consecutive day period. For example, the periods 2021-11-01 to 2021-11-03, 2021-11-02 to 2021-11-04, 2021-11-03 to 2021-11-05, and etc. will be considered. The date range is not extended for the purpose of having a full N day window near the start of the date range. For example if a report is for 2021-11-01 to 2021-11-10 and `inAnyNDayPeriod` = 3, the first two day period will be effectively shortened because no event data outside the report's date range will be read. For example, the first four periods will effectively be: 2021-11-01 to 2021-11-01, 2021-11-01 to 2021-11-02, 2021-11-01 to 2021-11-03, and 2021-11-02 to 2021-11-04. `inAnyNDayPeriod` is optional. If not specified, the `segmentParameterFilter` is applied to each event individually.",
          "format": "int64"
        }
      },
      "id": "SegmentParameterFilterScoping",
      "description": "Scopings specify how multiple events should be considered when evaluating a segment parameter filter."
    },
    "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.",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "SegmentFilterExpressionList": {
      "id": "SegmentFilterExpressionList",
      "description": "A list of segment filter expressions.",
      "type": "object",
      "properties": {
        "expressions": {
          "items": {
            "$ref": "SegmentFilterExpression"
          },
          "type": "array",
          "description": "The list of segment filter expressions"
        }
      }
    },
    "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"
        }
      }
    },
    "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.",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ],
          "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."
          ]
        },
        "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.",
          "format": "google-duration",
          "type": "string"
        },
        "userSequenceSteps": {
          "type": "array",
          "items": {
            "$ref": "UserSequenceStep"
          },
          "description": "An ordered sequence of condition steps. A user's events must complete each step in order for the user to match the `UserSegmentSequenceGroup`."
        }
      }
    },
    "SegmentFilterExpression": {
      "id": "SegmentFilterExpression",
      "description": "Expresses combinations of segment filters.",
      "type": "object",
      "properties": {
        "notExpression": {
          "$ref": "SegmentFilterExpression",
          "description": "The SegmentFilterExpression is NOT of `notExpression`."
        },
        "segmentFilter": {
          "$ref": "SegmentFilter",
          "description": "A primitive segment filter."
        },
        "andGroup": {
          "$ref": "SegmentFilterExpressionList",
          "description": "The SegmentFilterExpression in `andGroup` have an AND relationship."
        },
        "orGroup": {
          "description": "The SegmentFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "SegmentFilterExpressionList"
        },
        "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"
        }
      }
    },
    "QueryReportTaskRequest": {
      "id": "QueryReportTaskRequest",
      "description": "A request to fetch the report content for a report task.",
      "type": "object",
      "properties": {
        "offset": {
          "type": "string",
          "description": "Optional. The row count of the start row in the report. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        },
        "limit": {
          "description": "Optional. The number of rows to return from the report. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. The number of rows available to a QueryReportTaskRequest is further limited by the limit of the associated ReportTask. A query can retrieve at most ReportTask.limit rows. For example, if the ReportTask has a limit of 1,000, then a QueryReportTask request with offset=900 and limit=500 will return at most 100 rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "ActiveMetricRestriction": {
      "type": "object",
      "properties": {
        "metricName": {
          "description": "The name of the restricted metric.",
          "type": "string"
        },
        "restrictedMetricTypes": {
          "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"
            ]
          },
          "type": "array",
          "description": "The reason for this metric's restriction."
        }
      },
      "id": "ActiveMetricRestriction",
      "description": "A metric actively restricted in creating the report."
    },
    "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": {
        "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"
        },
        "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"
        }
      }
    },
    "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"
        }
      }
    },
    "NumericValue": {
      "id": "NumericValue",
      "description": "To represent a number.",
      "type": "object",
      "properties": {
        "doubleValue": {
          "type": "number",
          "description": "Double value",
          "format": "double"
        },
        "int64Value": {
          "type": "string",
          "description": "Integer value",
          "format": "int64"
        }
      }
    },
    "QueryAudienceListResponse": {
      "type": "object",
      "properties": {
        "audienceList": {
          "$ref": "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."
        },
        "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.",
          "items": {
            "$ref": "AudienceRow"
          },
          "type": "array"
        },
        "rowCount": {
          "type": "integer",
          "description": "The total number of rows in the AudienceList result. `rowCount` is independent of the number of rows returned in the response, the `limit` request parameter, and the `offset` request parameter. For example if a query returns 175 rows and includes `limit` of 50 in the API request, the response will contain `rowCount` of 175 but only 50 rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int32"
        }
      },
      "id": "QueryAudienceListResponse",
      "description": "A list of users in an audience list."
    },
    "ListReportTasksResponse": {
      "id": "ListReportTasksResponse",
      "description": "A list of all report tasks for a property.",
      "type": "object",
      "properties": {
        "reportTasks": {
          "description": "Each report task for a property.",
          "items": {
            "$ref": "ReportTask"
          },
          "type": "array"
        },
        "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"
        }
      }
    },
    "Row": {
      "type": "object",
      "properties": {
        "dimensionValues": {
          "description": "List of requested dimension values. In a PivotReport, dimension_values are only listed for dimensions included in a pivot.",
          "items": {
            "$ref": "DimensionValue"
          },
          "type": "array"
        },
        "metricValues": {
          "description": "List of requested visible metric values.",
          "type": "array",
          "items": {
            "$ref": "MetricValue"
          }
        }
      },
      "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\" } ] ```"
    },
    "MetricOrderBy": {
      "type": "object",
      "properties": {
        "metricName": {
          "description": "A metric name in the request to order by.",
          "type": "string"
        }
      },
      "id": "MetricOrderBy",
      "description": "Sorts by metric values."
    },
    "FunnelFieldFilter": {
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name.",
          "type": "string"
        },
        "numericFilter": {
          "description": "A filter for numeric or date values.",
          "$ref": "NumericFilter"
        },
        "inListFilter": {
          "$ref": "InListFilter",
          "description": "A filter for in list values."
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "betweenFilter": {
          "$ref": "BetweenFilter",
          "description": "A filter for between two values."
        }
      },
      "id": "FunnelFieldFilter",
      "description": "An expression to filter dimension or metric values."
    },
    "RunReportResponse": {
      "id": "RunReportResponse",
      "description": "The response report table corresponding to a request.",
      "type": "object",
      "properties": {
        "propertyQuota": {
          "$ref": "PropertyQuota",
          "description": "This Analytics Property's quota state including this request."
        },
        "minimums": {
          "description": "If requested, the minimum values of metrics.",
          "items": {
            "$ref": "Row"
          },
          "type": "array"
        },
        "metricHeaders": {
          "description": "Describes metric columns. The number of MetricHeaders and ordering of MetricHeaders matches the metrics present in rows.",
          "type": "array",
          "items": {
            "$ref": "MetricHeader"
          }
        },
        "metadata": {
          "description": "Metadata for the report.",
          "$ref": "ResponseMetaData"
        },
        "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"
        },
        "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"
          }
        },
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "items": {
            "$ref": "Row"
          },
          "type": "array"
        },
        "dimensionHeaders": {
          "type": "array",
          "items": {
            "$ref": "DimensionHeader"
          },
          "description": "Describes dimension columns. The number of DimensionHeaders and ordering of DimensionHeaders matches the dimensions present in rows."
        },
        "rowCount": {
          "type": "integer",
          "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).",
          "format": "int32"
        },
        "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"
        }
      }
    },
    "QueryAudienceListRequest": {
      "type": "object",
      "properties": {
        "offset": {
          "type": "string",
          "description": "Optional. The row count of the start row. The first row is counted as row 0. When paging, the first request does not specify offset; or equivalently, sets offset to 0; the first request returns the first `limit` of rows. The second request sets offset to the `limit` of the first request; the second request returns the second `limit` of rows. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        },
        "limit": {
          "type": "string",
          "description": "Optional. The number of rows to return. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. To learn more about this pagination parameter, see [Pagination](https://developers.google.com/analytics/devguides/reporting/data/v1/basics#pagination).",
          "format": "int64"
        }
      },
      "id": "QueryAudienceListRequest",
      "description": "A request to list users in an audience list."
    },
    "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"
        }
      }
    },
    "ReportDefinition": {
      "id": "ReportDefinition",
      "description": "The definition of how a report should be run.",
      "type": "object",
      "properties": {
        "orderBys": {
          "type": "array",
          "items": {
            "$ref": "OrderBy"
          },
          "description": "Optional. Specifies how rows are ordered in the response."
        },
        "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.",
          "items": {
            "$ref": "DateRange"
          },
          "type": "array"
        },
        "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": {
            "enumDescriptions": [
              "Unspecified operator.",
              "SUM operator.",
              "Minimum operator.",
              "Maximum operator.",
              "Count operator."
            ],
            "type": "string",
            "enum": [
              "METRIC_AGGREGATION_UNSPECIFIED",
              "TOTAL",
              "MINIMUM",
              "MAXIMUM",
              "COUNT"
            ]
          }
        },
        "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"
        },
        "dimensions": {
          "description": "Optional. The dimensions requested and displayed.",
          "type": "array",
          "items": {
            "$ref": "Dimension"
          }
        },
        "metrics": {
          "items": {
            "$ref": "Metric"
          },
          "type": "array",
          "description": "Optional. The metrics requested and displayed."
        },
        "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"
        },
        "cohortSpec": {
          "$ref": "CohortSpec",
          "description": "Optional. Cohort group associated with this request. If there is a cohort group in the request the 'cohort' dimension must be present."
        },
        "samplingLevel": {
          "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."
          ],
          "description": "Optional. The report's sampling level.",
          "enum": [
            "SAMPLING_LEVEL_UNSPECIFIED",
            "LOW",
            "MEDIUM",
            "UNSAMPLED"
          ]
        },
        "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"
        },
        "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.",
          "format": "int64",
          "type": "string"
        },
        "limit": {
          "type": "string",
          "description": "Optional. The number of rows to return in the Report. If unspecified, 10,000 rows are returned. The API returns a maximum of 250,000 rows per request, no matter how many you ask for. `limit` must be positive. The API can also return fewer rows than the requested `limit`, if there aren't as many dimension values as the `limit`. For instance, there are fewer than 300 possible values for the dimension `country`, so when reporting on only `country`, you can't get more than 300 rows, even if you set `limit` to a higher value.",
          "format": "int64"
        },
        "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"
        }
      }
    },
    "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": {
          "$ref": "SessionSegmentCriteria",
          "description": "Defines which sessions are included in this segment. Optional."
        },
        "exclusion": {
          "description": "Defines which sessions are excluded in this segment. Optional.",
          "$ref": "SessionSegmentExclusion"
        }
      }
    },
    "EventSegment": {
      "type": "object",
      "properties": {
        "exclusion": {
          "description": "Defines which events are excluded in this segment. Optional.",
          "$ref": "EventSegmentExclusion"
        },
        "eventInclusionCriteria": {
          "$ref": "EventSegmentCriteria",
          "description": "Defines which events are included in this segment. Optional."
        }
      },
      "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."
    },
    "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": {
          "$ref": "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."
        }
      }
    },
    "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": {
          "$ref": "SegmentParameterFilter",
          "description": "A primitive segment parameter filter."
        }
      }
    },
    "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"
        },
        "filterScoping": {
          "$ref": "SegmentParameterFilterScoping",
          "description": "Specifies the scope for the filter."
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "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"
        },
        "numericFilter": {
          "$ref": "NumericFilter",
          "description": "A filter for numeric or date values."
        }
      }
    },
    "MetricValue": {
      "id": "MetricValue",
      "description": "The value of a metric.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Measurement value. See MetricHeader for type.",
          "type": "string"
        }
      }
    },
    "SessionSegmentConditionGroup": {
      "type": "object",
      "properties": {
        "conditionScoping": {
          "enum": [
            "SESSION_CRITERIA_SCOPING_UNSPECIFIED",
            "SESSION_CRITERIA_WITHIN_SAME_EVENT",
            "SESSION_CRITERIA_WITHIN_SAME_SESSION"
          ],
          "description": "Data is included or excluded from the segment based on if it matches the condition group. This scoping defines how many events the `segmentFilterExpression` is evaluated on before the condition group is determined to be matched or not. For example if `conditionScoping = SESSION_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all events in a session, and then, the condition group is determined to be matched or not for this session. For example if `conditionScoping = SESSION_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a single event, and then, the condition group is determined to be matched or not for this session. Optional. If unspecified, a `conditionScoping` of `WITHIN_SAME_SESSION` is used.",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the session matches the criteria.",
            "If the criteria is satisfied within one session, the session matches the criteria."
          ],
          "type": "string"
        },
        "segmentFilterExpression": {
          "$ref": "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."
        }
      },
      "id": "SessionSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment."
    },
    "OrderBy": {
      "type": "object",
      "properties": {
        "metric": {
          "$ref": "MetricOrderBy",
          "description": "Sorts results by a metric's values."
        },
        "desc": {
          "description": "If true, sorts by descending order.",
          "type": "boolean"
        },
        "dimension": {
          "$ref": "DimensionOrderBy",
          "description": "Sorts results by a dimension's values."
        }
      },
      "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."
    },
    "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"
        }
      }
    },
    "SamplingMetadata": {
      "type": "object",
      "properties": {
        "samplesReadCount": {
          "type": "string",
          "description": "The total number of events read in this sampled report for a date range. This is the size of the subset this property's data that was analyzed in this funnel report.",
          "format": "int64"
        },
        "samplingSpaceSize": {
          "description": "The total number of events present in this property's data that could have been analyzed in this funnel report for a date range. Sampling uncovers the meaningful information about the larger data set, and this is the size of the larger data set. To calculate the percentage of available data that was used in this funnel report, compute `samplesReadCount/samplingSpaceSize`.",
          "format": "int64",
          "type": "string"
        }
      },
      "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."
    },
    "ReportTask": {
      "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": {
          "$ref": "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."
        },
        "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,",
          "$ref": "ReportMetadata",
          "readOnly": true
        }
      },
      "id": "ReportTask",
      "description": "A specific report task configuration."
    },
    "ReportMetadata": {
      "id": "ReportMetadata",
      "description": "The report metadata for a specific report task.",
      "type": "object",
      "properties": {
        "errorMessage": {
          "description": "Output only. Error message is populated if a report task fails during creation.",
          "readOnly": true,
          "type": "string"
        },
        "taskRowCount": {
          "description": "Output only. The total number of rows in the report result. This field will be populated when the state is active. You can utilize `task_row_count` for pagination within the confines of their existing report.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "totalRowCount": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The total number of rows in Google Analytics storage. If you want to query additional data rows beyond the current report, they can initiate a new report task based on the `total_row_count`. The `task_row_count` represents the number of rows specifically pertaining to the current report, whereas `total_row_count` encompasses the total count of rows across all data retrieved from Google Analytics storage. For example, suppose the current report's `task_row_count` is 20, displaying the data from the first 20 rows. Simultaneously, the `total_row_count` is 30, indicating the presence of data for all 30 rows. The `task_row_count` can be utilizated to paginate through the initial 20 rows. To expand the report and include data from all 30 rows, a new report task can be created using the total_row_count to access the full set of 30 rows' worth of data.",
          "format": "int32"
        },
        "beginCreatingTime": {
          "description": "Output only. The time when `CreateReportTask` was called and the report began the `CREATING` state.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "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.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "CREATING",
            "ACTIVE",
            "FAILED"
          ],
          "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."
          ],
          "description": "Output only. The current state for this report task.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "FunnelParameterFilterExpression": {
      "id": "FunnelParameterFilterExpression",
      "description": "Expresses combinations of funnel filters on parameters.",
      "type": "object",
      "properties": {
        "andGroup": {
          "$ref": "FunnelParameterFilterExpressionList",
          "description": "The FunnelParameterFilterExpression in `andGroup` have an AND relationship."
        },
        "orGroup": {
          "description": "The FunnelParameterFilterExpression in `orGroup` have an OR relationship.",
          "$ref": "FunnelParameterFilterExpressionList"
        },
        "notExpression": {
          "$ref": "FunnelParameterFilterExpression",
          "description": "The FunnelParameterFilterExpression is NOT of `notExpression`."
        },
        "funnelParameterFilter": {
          "description": "A primitive funnel parameter filter.",
          "$ref": "FunnelParameterFilter"
        }
      }
    },
    "EventSegmentCriteria": {
      "type": "object",
      "properties": {
        "andConditionGroups": {
          "items": {
            "$ref": "EventSegmentConditionGroup"
          },
          "type": "array",
          "description": "An event matches this criteria if the event matches each of these `andConditionGroups`."
        }
      },
      "id": "EventSegmentCriteria",
      "description": "An event matches a criteria if the event meet the conditions in the criteria."
    },
    "ListRecurringAudienceListsResponse": {
      "id": "ListRecurringAudienceListsResponse",
      "description": "A list of all recurring audience lists for a property.",
      "type": "object",
      "properties": {
        "recurringAudienceLists": {
          "type": "array",
          "items": {
            "$ref": "RecurringAudienceList"
          },
          "description": "Each recurring audience list for a property."
        },
        "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"
        }
      }
    },
    "SegmentFilter": {
      "id": "SegmentFilter",
      "description": "An expression to filter dimension or metric values.",
      "type": "object",
      "properties": {
        "numericFilter": {
          "$ref": "NumericFilter",
          "description": "A filter for numeric or date values."
        },
        "fieldName": {
          "description": "The dimension name or metric name.",
          "type": "string"
        },
        "inListFilter": {
          "$ref": "InListFilter",
          "description": "A filter for in list values."
        },
        "stringFilter": {
          "$ref": "StringFilter",
          "description": "Strings related filter."
        },
        "betweenFilter": {
          "description": "A filter for between two values.",
          "$ref": "BetweenFilter"
        },
        "filterScoping": {
          "$ref": "SegmentFilterScoping",
          "description": "Specifies the scope for the filter."
        }
      }
    },
    "DateRange": {
      "id": "DateRange",
      "description": "A contiguous set of days: `startDate`, `startDate + 1`, ..., `endDate`. Requests are allowed up to 4 date ranges.",
      "type": "object",
      "properties": {
        "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"
        },
        "startDate": {
          "description": "The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also accepted, and in that case, the date is inferred based on the property's reporting time zone.",
          "type": "string"
        },
        "name": {
          "description": "Assigns a name to this date range. The dimension `dateRange` is valued to this name in a report response. If set, cannot begin with `date_range_` or `RESERVED_`. If not set, date ranges are named by their zero based index in the request: `date_range_0`, `date_range_1`, etc.",
          "type": "string"
        }
      }
    },
    "InListFilter": {
      "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"
        }
      },
      "id": "InListFilter",
      "description": "The result needs to be in a list of string values."
    },
    "ListAudienceListsResponse": {
      "id": "ListAudienceListsResponse",
      "description": "A list of all audience lists for a property.",
      "type": "object",
      "properties": {
        "audienceLists": {
          "type": "array",
          "items": {
            "$ref": "AudienceList"
          },
          "description": "Each audience list for a property."
        },
        "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"
        }
      }
    },
    "Filter": {
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The dimension name or metric name. Must be a name defined in dimensions or metrics.",
          "type": "string"
        },
        "numericFilter": {
          "$ref": "NumericFilter",
          "description": "A filter for numeric or date values."
        },
        "emptyFilter": {
          "$ref": "EmptyFilter",
          "description": "A filter for empty values such as \"(not set)\" and \"\" values."
        },
        "stringFilter": {
          "description": "Strings related filter.",
          "$ref": "StringFilter"
        },
        "betweenFilter": {
          "$ref": "BetweenFilter",
          "description": "A filter for between two values."
        },
        "inListFilter": {
          "description": "A filter for in list values.",
          "$ref": "InListFilter"
        }
      },
      "id": "Filter",
      "description": "An expression to filter dimension or metric values."
    },
    "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"
        }
      }
    },
    "RunFunnelReportResponse": {
      "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"
        },
        "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"
        },
        "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": {
          "$ref": "PropertyQuota",
          "description": "This Analytics Property's quota state including this request."
        }
      },
      "id": "RunFunnelReportResponse",
      "description": "The funnel report response contains two sub reports. The two sub reports are different combinations of dimensions and metrics."
    },
    "PropertyQuotasSnapshot": {
      "type": "object",
      "properties": {
        "realtimePropertyQuota": {
          "description": "Property Quota for realtime property tokens",
          "$ref": "PropertyQuota"
        },
        "corePropertyQuota": {
          "$ref": "PropertyQuota",
          "description": "Property Quota for core property tokens"
        },
        "name": {
          "description": "Identifier. The property quota snapshot resource name.",
          "type": "string"
        },
        "funnelPropertyQuota": {
          "description": "Property Quota for funnel property tokens",
          "$ref": "PropertyQuota"
        }
      },
      "id": "PropertyQuotasSnapshot",
      "description": "Current state of all Property Quotas organized by quota category."
    },
    "BetweenFilter": {
      "type": "object",
      "properties": {
        "fromValue": {
          "$ref": "NumericValue",
          "description": "Begins with this number."
        },
        "toValue": {
          "$ref": "NumericValue",
          "description": "Ends with this number."
        }
      },
      "id": "BetweenFilter",
      "description": "To express that the result needs to be between two numbers (inclusive)."
    },
    "DimensionExpression": {
      "type": "object",
      "properties": {
        "lowerCase": {
          "description": "Used to convert a dimension value to lower case.",
          "$ref": "CaseExpression"
        },
        "concatenate": {
          "description": "Used to combine dimension values to a single dimension. For example, dimension \"country, city\": concatenate(country, \", \", city).",
          "$ref": "ConcatenateExpression"
        },
        "upperCase": {
          "description": "Used to convert a dimension value to upper case.",
          "$ref": "CaseExpression"
        }
      },
      "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)."
    },
    "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": {
        "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"
        },
        "potentiallyThresholdedRequestsPerHour": {
          "description": "Analytics Properties can send up to 120 requests with potentially thresholded dimensions per hour. In a batch request, each report request is individually counted for this quota if the request contains potentially thresholded dimensions.",
          "$ref": "QuotaStatus"
        },
        "concurrentRequests": {
          "$ref": "QuotaStatus",
          "description": "Standard Analytics Properties can send up to 10 concurrent requests; Analytics 360 Properties can use up to 50 concurrent requests."
        },
        "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"
        },
        "serverErrorsPerProjectPerHour": {
          "$ref": "QuotaStatus",
          "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."
        }
      }
    },
    "FunnelParameterFilterExpressionList": {
      "type": "object",
      "properties": {
        "expressions": {
          "items": {
            "$ref": "FunnelParameterFilterExpression"
          },
          "type": "array",
          "description": "The list of funnel parameter filter expressions."
        }
      },
      "id": "FunnelParameterFilterExpressionList",
      "description": "A list of funnel parameter filter expressions."
    },
    "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"
          }
        }
      }
    },
    "EventSegmentExclusion": {
      "type": "object",
      "properties": {
        "eventExclusionDuration": {
          "enumDescriptions": [
            "Unspecified exclusion duration. Do not specify.",
            "Permanently exclude events from the segment if the event ever meets the `eventExclusionCriteria` condition."
          ],
          "type": "string",
          "enum": [
            "EVENT_EXCLUSION_DURATION_UNSPECIFIED",
            "EVENT_EXCLUSION_PERMANENT"
          ],
          "description": "`eventExclusionDuration` should always be `PERMANENTLY_EXCLUDE`. Optional. If unspecified, an `eventExclusionDuration` of `EVENT_EXCLUSION_PERMANENT` is used."
        },
        "eventExclusionCriteria": {
          "$ref": "EventSegmentCriteria",
          "description": "If an event meets this condition, the event is excluded from membership in the segment for the `eventExclusionDuration`."
        }
      },
      "id": "EventSegmentExclusion",
      "description": "Specifies which events are excluded in this segment."
    },
    "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": {
        "rows": {
          "description": "Rows of dimension value combinations and metric values in the report.",
          "type": "array",
          "items": {
            "$ref": "Row"
          }
        },
        "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"
          }
        },
        "metadata": {
          "description": "Metadata for the funnel report.",
          "$ref": "FunnelResponseMetadata"
        },
        "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"
          }
        }
      }
    },
    "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": {
        "filterExpression": {
          "$ref": "FunnelFilterExpression",
          "description": "The condition that your users must meet to be included in this step of the funnel journey."
        },
        "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.",
          "format": "google-duration",
          "type": "string"
        }
      }
    },
    "UserSegmentExclusion": {
      "type": "object",
      "properties": {
        "userExclusionDuration": {
          "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."
          ],
          "type": "string",
          "enum": [
            "USER_EXCLUSION_DURATION_UNSPECIFIED",
            "USER_EXCLUSION_TEMPORARY",
            "USER_EXCLUSION_PERMANENT"
          ],
          "description": "Specifies how long an exclusion will last if a user matches the `userExclusionCriteria`. Optional. If unspecified, `userExclusionDuration` of `USER_EXCLUSION_TEMPORARY` is used."
        },
        "userExclusionCriteria": {
          "description": "If a user meets this condition, the user is excluded from membership in the segment for the `userExclusionDuration`.",
          "$ref": "UserSegmentCriteria"
        }
      },
      "id": "UserSegmentExclusion",
      "description": "Specifies which users are excluded in this segment."
    },
    "Metadata": {
      "type": "object",
      "properties": {
        "dimensions": {
          "items": {
            "$ref": "DimensionMetadata"
          },
          "type": "array",
          "description": "The dimension descriptions."
        },
        "metrics": {
          "type": "array",
          "items": {
            "$ref": "MetricMetadata"
          },
          "description": "The metric descriptions."
        },
        "conversions": {
          "description": "The conversion descriptions.",
          "type": "array",
          "items": {
            "$ref": "ConversionMetadata"
          }
        },
        "name": {
          "description": "Resource name of this metadata.",
          "type": "string"
        },
        "comparisons": {
          "items": {
            "$ref": "ComparisonMetadata"
          },
          "type": "array",
          "description": "The comparison descriptions."
        }
      },
      "id": "Metadata",
      "description": "The dimensions, metrics and comparisons currently accepted in reporting methods."
    },
    "StringFilter": {
      "type": "object",
      "properties": {
        "value": {
          "description": "The string value used for the matching.",
          "type": "string"
        },
        "caseSensitive": {
          "description": "If true, the string value is case sensitive.",
          "type": "boolean"
        },
        "matchType": {
          "enumDescriptions": [
            "Unspecified",
            "Exact match of the string value.",
            "Begins with the string value.",
            "Ends with the string value.",
            "Contains the string value.",
            "Full match for the regular expression with the string value.",
            "Partial match for the regular expression with the string value."
          ],
          "type": "string",
          "enum": [
            "MATCH_TYPE_UNSPECIFIED",
            "EXACT",
            "BEGINS_WITH",
            "ENDS_WITH",
            "CONTAINS",
            "FULL_REGEXP",
            "PARTIAL_REGEXP"
          ],
          "description": "The match type for this filter."
        }
      },
      "id": "StringFilter",
      "description": "The filter for string"
    },
    "UserSegmentConditionGroup": {
      "type": "object",
      "properties": {
        "conditionScoping": {
          "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."
          ],
          "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.",
          "enum": [
            "USER_CRITERIA_SCOPING_UNSPECIFIED",
            "USER_CRITERIA_WITHIN_SAME_EVENT",
            "USER_CRITERIA_WITHIN_SAME_SESSION",
            "USER_CRITERIA_ACROSS_ALL_SESSIONS"
          ]
        },
        "segmentFilterExpression": {
          "$ref": "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."
        }
      },
      "id": "UserSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment."
    },
    "FilterExpressionList": {
      "type": "object",
      "properties": {
        "expressions": {
          "description": "A list of filter expressions.",
          "items": {
            "$ref": "FilterExpression"
          },
          "type": "array"
        }
      },
      "id": "FilterExpressionList",
      "description": "A list of filter expressions."
    },
    "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.",
          "enum": [
            "SESSION_EXCLUSION_DURATION_UNSPECIFIED",
            "SESSION_EXCLUSION_TEMPORARY",
            "SESSION_EXCLUSION_PERMANENT"
          ],
          "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."
          ]
        },
        "sessionExclusionCriteria": {
          "$ref": "SessionSegmentCriteria",
          "description": "If a session meets this condition, the session is excluded from membership in the segment for the `sessionExclusionDuration`."
        }
      }
    },
    "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"
        }
      }
    },
    "DimensionOrderBy": {
      "type": "object",
      "properties": {
        "dimensionName": {
          "description": "A dimension name in the request to order by.",
          "type": "string"
        },
        "orderType": {
          "description": "Controls the rule for dimension value ordering.",
          "enum": [
            "ORDER_TYPE_UNSPECIFIED",
            "ALPHANUMERIC",
            "CASE_INSENSITIVE_ALPHANUMERIC",
            "NUMERIC"
          ],
          "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."
          ]
        }
      },
      "id": "DimensionOrderBy",
      "description": "Sorts by dimension values."
    },
    "ResponseMetaData": {
      "type": "object",
      "properties": {
        "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"
        },
        "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"
        },
        "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"
        },
        "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"
        },
        "section": {
          "enum": [
            "SECTION_UNSPECIFIED",
            "SECTION_REPORT",
            "SECTION_ADVERTISING"
          ],
          "description": "Identifies the type of data in the report.",
          "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."
          ],
          "type": "string"
        },
        "emptyReason": {
          "description": "If empty reason is specified, the report is empty for this reason.",
          "type": "string"
        },
        "samplingMetadatas": {
          "items": {
            "$ref": "SamplingMetadata"
          },
          "type": "array",
          "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."
        }
      },
      "id": "ResponseMetaData",
      "description": "Response's metadata carrying additional information about the report content."
    },
    "AudienceListMetadata": {
      "type": "object",
      "properties": {},
      "id": "AudienceListMetadata",
      "description": "This metadata is currently blank."
    },
    "FilterExpression": {
      "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": {
          "$ref": "FilterExpression",
          "description": "The FilterExpression is NOT of not_expression."
        },
        "filter": {
          "$ref": "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."
        }
      },
      "id": "FilterExpression",
      "description": "To express dimension or metric filters. The fields in the same FilterExpression need to be either all dimensions or all metrics."
    },
    "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.",
          "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"
          ],
          "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."
          ]
        }
      }
    },
    "Status": {
      "type": "object",
      "properties": {
        "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": {
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            },
            "type": "object"
          }
        },
        "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"
        },
        "code": {
          "type": "integer",
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "format": "int32"
        }
      },
      "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)."
    },
    "SchemaRestrictionResponse": {
      "type": "object",
      "properties": {
        "activeMetricRestrictions": {
          "type": "array",
          "items": {
            "$ref": "ActiveMetricRestriction"
          },
          "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`."
        }
      },
      "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)."
    },
    "NumericFilter": {
      "id": "NumericFilter",
      "description": "Filters for numeric or date values.",
      "type": "object",
      "properties": {
        "operation": {
          "enumDescriptions": [
            "Unspecified.",
            "Equal",
            "Less than",
            "Less than or equal",
            "Greater than",
            "Greater than or equal"
          ],
          "type": "string",
          "enum": [
            "OPERATION_UNSPECIFIED",
            "EQUAL",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL"
          ],
          "description": "The operation type for this filter."
        },
        "value": {
          "$ref": "NumericValue",
          "description": "A numeric value or a date value."
        }
      }
    },
    "Operation": {
      "id": "Operation",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "properties": {
        "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"
        },
        "response": {
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          },
          "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`."
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "Status"
        },
        "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.",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          },
          "type": "object"
        },
        "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"
        }
      }
    },
    "EventSegmentConditionGroup": {
      "id": "EventSegmentConditionGroup",
      "description": "Conditions tell Analytics what data to include in or exclude from the segment.",
      "type": "object",
      "properties": {
        "conditionScoping": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified criteria scoping. Do not specify.",
            "If the criteria is satisfied within one event, the event matches the criteria."
          ],
          "description": "`conditionScoping` should always be `EVENT_CRITERIA_WITHIN_SAME_EVENT`. Optional. If unspecified, a `conditionScoping` of `EVENT_CRITERIA_WITHIN_SAME_EVENT` is used.",
          "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"
        }
      }
    },
    "Comparison": {
      "type": "object",
      "properties": {
        "comparison": {
          "description": "A saved comparison identified by the comparison's resource name. For example, 'comparisons/1234'.",
          "type": "string"
        },
        "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"
        }
      },
      "id": "Comparison",
      "description": "Defines an individual comparison. Most requests will include multiple comparisons so that the report compares between the comparisons."
    },
    "Segment": {
      "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"
        },
        "eventSegment": {
          "$ref": "EventSegment",
          "description": "Event segments are subsets of events that were triggered on your site or app."
        },
        "sessionSegment": {
          "$ref": "SessionSegment",
          "description": "Session segments are subsets of the sessions that occurred on your site or app."
        }
      },
      "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)."
    },
    "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.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "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"
        }
      }
    },
    "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": {
        "attributionModel": {
          "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"
          ],
          "type": "string",
          "enum": [
            "ATTRIBUTION_MODEL_UNSPECIFIED",
            "DATA_DRIVEN",
            "LAST_CLICK"
          ],
          "description": "The attribution model to use in the Conversion Report. If unspecified, `DATA_DRIVEN` is used."
        },
        "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"
          }
        }
      }
    },
    "ComparisonMetadata": {
      "type": "object",
      "properties": {
        "description": {
          "description": "This comparison's description.",
          "type": "string"
        },
        "uiName": {
          "description": "This comparison's name within the Google Analytics user interface.",
          "type": "string"
        },
        "apiName": {
          "description": "This comparison's resource name. Usable in [Comparison](#Comparison)'s `comparison` field. For example, 'comparisons/1234'.",
          "type": "string"
        }
      },
      "id": "ComparisonMetadata",
      "description": "The metadata for a single comparison."
    },
    "EmptyFilter": {
      "id": "EmptyFilter",
      "description": "Filter for empty values.",
      "type": "object",
      "properties": {}
    },
    "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"
        }
      }
    }
  },
  "resources": {
    "properties": {
      "methods": {
        "getPropertyQuotasSnapshot": {
          "response": {
            "$ref": "PropertyQuotasSnapshot"
          },
          "flatPath": "v1alpha/properties/{propertiesId}/propertyQuotasSnapshot",
          "parameters": {
            "name": {
              "description": "Required. Quotas from this property will be listed in the response. Format: `properties/{property}/propertyQuotasSnapshot`",
              "required": true,
              "location": "path",
              "type": "string",
              "pattern": "^properties/[^/]+/propertyQuotasSnapshot$"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "httpMethod": "GET",
          "parameterOrder": [
            "name"
          ],
          "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.",
          "path": "v1alpha/{+name}",
          "id": "analyticsdata.properties.getPropertyQuotasSnapshot"
        },
        "runReport": {
          "parameterOrder": [
            "property"
          ],
          "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.",
          "httpMethod": "POST",
          "id": "analyticsdata.properties.runReport",
          "path": "v1alpha/{+property}:runReport",
          "request": {
            "$ref": "RunReportRequest"
          },
          "flatPath": "v1alpha/properties/{propertiesId}:runReport",
          "parameters": {
            "property": {
              "location": "path",
              "type": "string",
              "required": true,
              "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/[^/]+$"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "response": {
            "$ref": "RunReportResponse"
          }
        },
        "getMetadata": {
          "response": {
            "$ref": "Metadata"
          },
          "flatPath": "v1alpha/properties/{propertiesId}/metadata",
          "parameters": {
            "name": {
              "location": "path",
              "type": "string",
              "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.",
              "required": true,
              "pattern": "^properties/[^/]+/metadata$"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "path": "v1alpha/{+name}",
          "id": "analyticsdata.properties.getMetadata",
          "httpMethod": "GET",
          "parameterOrder": [
            "name"
          ],
          "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`."
        },
        "runFunnelReport": {
          "parameterOrder": [
            "property"
          ],
          "description": "Returns a customized funnel report of your Google Analytics event data. The data returned from the API is as a table with columns for the requested dimensions and metrics. Funnel exploration lets you visualize the steps your users take to complete a task and quickly see how well they are succeeding or failing at each step. For example, how do prospects become shoppers and then become buyers? How do one time buyers become repeat buyers? With this information, you can improve inefficient or abandoned customer journeys. To learn more, see [GA4 Funnel Explorations](https://support.google.com/analytics/answer/9327974). This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Data API Funnel Reporting Feedback](https://docs.google.com/forms/d/e/1FAIpQLSdwOlQDJAUoBiIgUZZ3S_Lwi8gr7Bb0k1jhvc-DEg7Rol3UjA/viewform).",
          "httpMethod": "POST",
          "id": "analyticsdata.properties.runFunnelReport",
          "path": "v1alpha/{+property}:runFunnelReport",
          "request": {
            "$ref": "RunFunnelReportRequest"
          },
          "flatPath": "v1alpha/properties/{propertiesId}:runFunnelReport",
          "parameters": {
            "property": {
              "pattern": "^properties/[^/]+$",
              "description": "Optional. A Google Analytics property identifier whose events are tracked. Specified in the URL path and not the body. To learn more, see [where to find your Property ID](https://developers.google.com/analytics/devguides/reporting/data/v1/property-id). Within a batch request, this property should either be unspecified or consistent with the batch-level property. Example: properties/1234",
              "required": true,
              "location": "path",
              "type": "string"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/analytics",
            "https://www.googleapis.com/auth/analytics.readonly"
          ],
          "response": {
            "$ref": "RunFunnelReportResponse"
          }
        }
      },
      "resources": {
        "recurringAudienceLists": {
          "methods": {
            "get": {
              "httpMethod": "GET",
              "parameterOrder": [
                "name"
              ],
              "description": "Gets configuration metadata about a specific recurring audience list. This method can be used to understand a recurring audience list's state after it has been created. For example, a recurring audience list resource will generate audience list instances for each day, and this method can be used to get the resource name of the most recent audience list instance. This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "path": "v1alpha/{+name}",
              "id": "analyticsdata.properties.recurringAudienceLists.get",
              "response": {
                "$ref": "RecurringAudienceList"
              },
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists/{recurringAudienceListsId}",
              "parameters": {
                "name": {
                  "pattern": "^properties/[^/]+/recurringAudienceLists/[^/]+$",
                  "description": "Required. The recurring audience list resource name. Format: `properties/{property}/recurringAudienceLists/{recurring_audience_list}`",
                  "required": true,
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ]
            },
            "list": {
              "parameters": {
                "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).",
                  "format": "int32",
                  "location": "query",
                  "type": "integer"
                },
                "pageToken": {
                  "location": "query",
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListRecurringAudienceLists` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRecurringAudienceLists` must match the call that provided the page token."
                },
                "parent": {
                  "description": "Required. All recurring audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "pattern": "^properties/[^/]+$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists",
              "response": {
                "$ref": "ListRecurringAudienceListsResponse"
              },
              "id": "analyticsdata.properties.recurringAudienceLists.list",
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "parameterOrder": [
                "parent"
              ],
              "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.",
              "httpMethod": "GET"
            },
            "create": {
              "parameterOrder": [
                "parent"
              ],
              "description": "Creates a recurring audience list. Recurring audience lists produces new audience lists each day. Audience lists are users in an audience at the time of the list's creation. A recurring audience list ensures that you have audience list based on the most recent data available for use each day. If you manually create audience list, you don't know when an audience list based on an additional day's data is available. This recurring audience list automates the creation of an audience list when an additional day's data is available. You will consume fewer quota tokens by using recurring audience list versus manually creating audience list at various times of day trying to guess when an additional day's data is ready. This method is introduced at alpha stability with the intention of gathering feedback on syntax and capabilities before entering beta. To give your feedback on this API, complete the [Google Analytics Audience Export API Feedback](https://forms.gle/EeA5u5LW6PEggtCEA) form.",
              "httpMethod": "POST",
              "id": "analyticsdata.properties.recurringAudienceLists.create",
              "path": "v1alpha/{+parent}/recurringAudienceLists",
              "request": {
                "$ref": "RecurringAudienceList"
              },
              "parameters": {
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "description": "Required. The parent resource where this recurring audience list will be created. Format: `properties/{property}`",
                  "required": true,
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/recurringAudienceLists",
              "response": {
                "$ref": "RecurringAudienceList"
              }
            }
          }
        },
        "reportTasks": {
          "methods": {
            "query": {
              "id": "analyticsdata.properties.reportTasks.query",
              "path": "v1alpha/{+name}:query",
              "parameterOrder": [
                "name"
              ],
              "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.",
              "httpMethod": "POST",
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}:query",
              "parameters": {
                "name": {
                  "description": "Required. The report source name. Format: `properties/{property}/reportTasks/{report}`",
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "response": {
                "$ref": "QueryReportTaskResponse"
              },
              "request": {
                "$ref": "QueryReportTaskRequest"
              }
            },
            "create": {
              "response": {
                "$ref": "Operation"
              },
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks",
              "parameters": {
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "type": "string",
                  "description": "Required. The parent resource where this report task will be created. Format: `properties/{propertyId}`",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "request": {
                "$ref": "ReportTask"
              },
              "path": "v1alpha/{+parent}/reportTasks",
              "id": "analyticsdata.properties.reportTasks.create",
              "httpMethod": "POST",
              "parameterOrder": [
                "parent"
              ],
              "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."
            },
            "get": {
              "response": {
                "$ref": "ReportTask"
              },
              "parameters": {
                "name": {
                  "description": "Required. The report task resource name. Format: `properties/{property}/reportTasks/{report_task}`",
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "pattern": "^properties/[^/]+/reportTasks/[^/]+$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks/{reportTasksId}",
              "httpMethod": "GET",
              "parameterOrder": [
                "name"
              ],
              "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.",
              "path": "v1alpha/{+name}",
              "id": "analyticsdata.properties.reportTasks.get"
            },
            "list": {
              "path": "v1alpha/{+parent}/reportTasks",
              "id": "analyticsdata.properties.reportTasks.list",
              "httpMethod": "GET",
              "parameterOrder": [
                "parent"
              ],
              "description": "Lists all report tasks for a property.",
              "response": {
                "$ref": "ListReportTasksResponse"
              },
              "parameters": {
                "pageSize": {
                  "description": "Optional. The maximum number of report tasks to return.",
                  "format": "int32",
                  "location": "query",
                  "type": "integer"
                },
                "pageToken": {
                  "location": "query",
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListReportTasks` call. Provide this to retrieve the subsequent page."
                },
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "description": "Required. All report tasks for this property will be listed in the response. Format: `properties/{property}`",
                  "required": true,
                  "location": "path",
                  "type": "string"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/reportTasks"
            }
          }
        },
        "audienceLists": {
          "methods": {
            "query": {
              "httpMethod": "POST",
              "parameterOrder": [
                "name"
              ],
              "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.",
              "path": "v1alpha/{+name}:query",
              "id": "analyticsdata.properties.audienceLists.query",
              "request": {
                "$ref": "QueryAudienceListRequest"
              },
              "response": {
                "$ref": "QueryAudienceListResponse"
              },
              "parameters": {
                "name": {
                  "required": true,
                  "description": "Required. The name of the audience list to retrieve users from. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "location": "path",
                  "type": "string",
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}:query"
            },
            "create": {
              "httpMethod": "POST",
              "parameterOrder": [
                "parent"
              ],
              "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.",
              "path": "v1alpha/{+parent}/audienceLists",
              "id": "analyticsdata.properties.audienceLists.create",
              "request": {
                "$ref": "AudienceList"
              },
              "response": {
                "$ref": "Operation"
              },
              "parameters": {
                "parent": {
                  "pattern": "^properties/[^/]+$",
                  "location": "path",
                  "type": "string",
                  "description": "Required. The parent resource where this audience list will be created. Format: `properties/{property}`",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists"
            },
            "get": {
              "response": {
                "$ref": "AudienceList"
              },
              "parameters": {
                "name": {
                  "pattern": "^properties/[^/]+/audienceLists/[^/]+$",
                  "location": "path",
                  "type": "string",
                  "description": "Required. The audience list resource name. Format: `properties/{property}/audienceLists/{audience_list}`",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists/{audienceListsId}",
              "httpMethod": "GET",
              "parameterOrder": [
                "name"
              ],
              "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.",
              "path": "v1alpha/{+name}",
              "id": "analyticsdata.properties.audienceLists.get"
            },
            "list": {
              "response": {
                "$ref": "ListAudienceListsResponse"
              },
              "flatPath": "v1alpha/properties/{propertiesId}/audienceLists",
              "parameters": {
                "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).",
                  "format": "int32",
                  "location": "query",
                  "type": "integer"
                },
                "pageToken": {
                  "location": "query",
                  "type": "string",
                  "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."
                },
                "parent": {
                  "description": "Required. All audience lists for this property will be listed in the response. Format: `properties/{property}`",
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "pattern": "^properties/[^/]+$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/analytics",
                "https://www.googleapis.com/auth/analytics.readonly"
              ],
              "httpMethod": "GET",
              "parameterOrder": [
                "parent"
              ],
              "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.",
              "path": "v1alpha/{+parent}/audienceLists",
              "id": "analyticsdata.properties.audienceLists.list"
            }
          }
        }
      }
    }
  },
  "canonicalName": "AnalyticsData",
  "kind": "discovery#restDescription",
  "baseUrl": "https://analyticsdata.googleapis.com/",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "parameters": {
    "key": {
      "type": "string",
      "location": "query",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "type": "string",
      "location": "query"
    },
    "uploadType": {
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "type": "string",
      "location": "query"
    },
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "type": "string",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "location": "query",
      "description": "Returns response with indentations and line breaks.",
      "default": "true"
    },
    "quotaUser": {
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "type": "string",
      "location": "query"
    },
    "callback": {
      "description": "JSONP",
      "type": "string",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "location": "query",
      "description": "V1 error format.",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "enum": [
        "1",
        "2"
      ]
    },
    "access_token": {
      "description": "OAuth access token.",
      "type": "string",
      "location": "query"
    },
    "alt": {
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "type": "string",
      "location": "query",
      "description": "Data format for response.",
      "default": "json"
    },
    "oauth_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth 2.0 token for the current user."
    }
  },
  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/data/v1/",
  "rootUrl": "https://analyticsdata.googleapis.com/",
  "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"
        }
      }
    }
  },
  "batchPath": "batch",
  "id": "analyticsdata:v1alpha",
  "ownerDomain": "google.com",
  "servicePath": "",
  "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. ",
  "version": "v1alpha",
  "version_module": true,
  "ownerName": "Google",
  "revision": "20260506",
  "mtlsRootUrl": "https://analyticsdata.mtls.googleapis.com/",
  "name": "analyticsdata",
  "basePath": "",
  "title": "Google Analytics Data API",
  "fullyEncodeReservedExpansion": true,
  "discoveryVersion": "v1"
}
