text:
require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module AnalyticsV3

      # JSON template for Analytics account entry.
      class Account
        include Google::Apis::Core::Hashable

        # Child link for an account entry. Points to the list of web properties for this
        # account.
        # Corresponds to the JSON property `childLink`
        # @return [Google::Apis::AnalyticsV3::Account::ChildLink]
        attr_accessor :child_link

        # Time the account was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Account ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics account.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Account name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Permissions the user has for this account.
        # Corresponds to the JSON property `permissions`
        # @return [Google::Apis::AnalyticsV3::Account::Permissions]
        attr_accessor :permissions

        # Link for this account.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Indicates whether this account is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # Time the account was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @child_link = args[:child_link] if args.key?(:child_link)
          @created = args[:created] if args.key?(:created)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @permissions = args[:permissions] if args.key?(:permissions)
          @self_link = args[:self_link] if args.key?(:self_link)
          @starred = args[:starred] if args.key?(:starred)
          @updated = args[:updated] if args.key?(:updated)
        end

        # Child link for an account entry. Points to the list of web properties for this
        # account.
        class ChildLink
          include Google::Apis::Core::Hashable

          # Link to the list of web properties for this account.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Type of the child link. Its value is "analytics#webproperties".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Permissions the user has for this account.
        class Permissions
          include Google::Apis::Core::Hashable

          # All the permissions that the user has for this account. These include any
          # implied permissions (e.g., EDIT implies VIEW).
          # Corresponds to the JSON property `effective`
          # @return [Array<String>]
          attr_accessor :effective

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @effective = args[:effective] if args.key?(:effective)
          end
        end
      end

      # JSON template for a linked account.
      class AccountRef
        include Google::Apis::Core::Hashable

        # Link for this account.
        # Corresponds to the JSON property `href`
        # @return [String]
        attr_accessor :href

        # Account ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Analytics account reference.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Account name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @href = args[:href] if args.key?(:href)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
        end
      end

      # An AccountSummary collection lists a summary of accounts, properties and views
      # (profiles) to which the user has access. Each resource in the collection
      # corresponds to a single AccountSummary.
      class AccountSummaries
        include Google::Apis::Core::Hashable

        # A list of AccountSummaries.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::AccountSummary>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this AccountSummary collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this AccountSummary collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for an Analytics AccountSummary. An AccountSummary is a
      # lightweight tree comprised of properties/profiles.
      class AccountSummary
        include Google::Apis::Core::Hashable

        # Account ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics AccountSummary.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Account name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Indicates whether this account is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # List of web properties under this account.
        # Corresponds to the JSON property `webProperties`
        # @return [Array<Google::Apis::AnalyticsV3::WebPropertySummary>]
        attr_accessor :web_properties

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @starred = args[:starred] if args.key?(:starred)
          @web_properties = args[:web_properties] if args.key?(:web_properties)
        end
      end

      # JSON template for an Analytics account ticket. The account ticket consists of
      # the ticket ID and the basic information for the account, property and profile.
      class AccountTicket
        include Google::Apis::Core::Hashable

        # JSON template for Analytics account entry.
        # Corresponds to the JSON property `account`
        # @return [Google::Apis::AnalyticsV3::Account]
        attr_accessor :account

        # Account ticket ID used to access the account ticket.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for account ticket.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # JSON template for an Analytics view (profile).
        # Corresponds to the JSON property `profile`
        # @return [Google::Apis::AnalyticsV3::Profile]
        attr_accessor :profile

        # Redirect URI where the user will be sent after accepting Terms of Service.
        # Must be configured in APIs console as a callback URL.
        # Corresponds to the JSON property `redirectUri`
        # @return [String]
        attr_accessor :redirect_uri

        # JSON template for an Analytics web property.
        # Corresponds to the JSON property `webproperty`
        # @return [Google::Apis::AnalyticsV3::Webproperty]
        attr_accessor :webproperty

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account = args[:account] if args.key?(:account)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @profile = args[:profile] if args.key?(:profile)
          @redirect_uri = args[:redirect_uri] if args.key?(:redirect_uri)
          @webproperty = args[:webproperty] if args.key?(:webproperty)
        end
      end

      # JSON template for an Analytics account tree requests. The account tree request
      # is used in the provisioning api to create an account, property, and view (
      # profile). It contains the basic information required to make these fields.
      class AccountTreeRequest
        include Google::Apis::Core::Hashable

        #
        # Corresponds to the JSON property `accountName`
        # @return [String]
        attr_accessor :account_name

        # Resource type for account ticket.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        #
        # Corresponds to the JSON property `profileName`
        # @return [String]
        attr_accessor :profile_name

        #
        # Corresponds to the JSON property `timezone`
        # @return [String]
        attr_accessor :timezone

        #
        # Corresponds to the JSON property `webpropertyName`
        # @return [String]
        attr_accessor :webproperty_name

        #
        # Corresponds to the JSON property `websiteUrl`
        # @return [String]
        attr_accessor :website_url

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_name = args[:account_name] if args.key?(:account_name)
          @kind = args[:kind] if args.key?(:kind)
          @profile_name = args[:profile_name] if args.key?(:profile_name)
          @timezone = args[:timezone] if args.key?(:timezone)
          @webproperty_name = args[:webproperty_name] if args.key?(:webproperty_name)
          @website_url = args[:website_url] if args.key?(:website_url)
        end
      end

      # JSON template for an Analytics account tree response. The account tree
      # response is used in the provisioning api to return the result of creating an
      # account, property, and view (profile).
      class AccountTreeResponse
        include Google::Apis::Core::Hashable

        # JSON template for Analytics account entry.
        # Corresponds to the JSON property `account`
        # @return [Google::Apis::AnalyticsV3::Account]
        attr_accessor :account

        # Resource type for account ticket.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # JSON template for an Analytics view (profile).
        # Corresponds to the JSON property `profile`
        # @return [Google::Apis::AnalyticsV3::Profile]
        attr_accessor :profile

        # JSON template for an Analytics web property.
        # Corresponds to the JSON property `webproperty`
        # @return [Google::Apis::AnalyticsV3::Webproperty]
        attr_accessor :webproperty

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account = args[:account] if args.key?(:account)
          @kind = args[:kind] if args.key?(:kind)
          @profile = args[:profile] if args.key?(:profile)
          @webproperty = args[:webproperty] if args.key?(:webproperty)
        end
      end

      # An account collection provides a list of Analytics accounts to which a user
      # has access. The account collection is the entry point to all management
      # information. Each resource in the collection corresponds to a single Analytics
      # account.
      class Accounts
        include Google::Apis::Core::Hashable

        # A list of accounts.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Account>]
        attr_accessor :items

        # The maximum number of entries the response can contain, regardless of the
        # actual number of entries returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Next link for this account collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Previous link for this account collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the entries, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for an Google Ads account.
      class AdWordsAccount
        include Google::Apis::Core::Hashable

        # True if auto-tagging is enabled on the Google Ads account. Read-only after the
        # insert operation.
        # Corresponds to the JSON property `autoTaggingEnabled`
        # @return [Boolean]
        attr_accessor :auto_tagging_enabled
        alias_method :auto_tagging_enabled?, :auto_tagging_enabled

        # Customer ID. This field is required when creating a Google Ads link.
        # Corresponds to the JSON property `customerId`
        # @return [String]
        attr_accessor :customer_id

        # Resource type for Google Ads account.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @auto_tagging_enabled = args[:auto_tagging_enabled] if args.key?(:auto_tagging_enabled)
          @customer_id = args[:customer_id] if args.key?(:customer_id)
          @kind = args[:kind] if args.key?(:kind)
        end
      end

      # Request template for the delete upload data request.
      class DeleteUploadDataRequest
        include Google::Apis::Core::Hashable

        # A list of upload UIDs.
        # Corresponds to the JSON property `customDataImportUids`
        # @return [Array<String>]
        attr_accessor :custom_data_import_uids

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @custom_data_import_uids = args[:custom_data_import_uids] if args.key?(:custom_data_import_uids)
        end
      end

      # JSON template for a metadata column.
      class Column
        include Google::Apis::Core::Hashable

        # Map of attribute name and value for this column.
        # Corresponds to the JSON property `attributes`
        # @return [Hash<String,String>]
        attr_accessor :attributes

        # Column id.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics column.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @attributes = args[:attributes] if args.key?(:attributes)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
        end
      end

      # Lists columns (dimensions and metrics) for a particular report type.
      class Columns
        include Google::Apis::Core::Hashable

        # List of attributes names returned by columns.
        # Corresponds to the JSON property `attributeNames`
        # @return [Array<String>]
        attr_accessor :attribute_names

        # Etag of collection. This etag can be compared with the last response etag to
        # check if response has changed.
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag

        # List of columns for a report type.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Column>]
        attr_accessor :items

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Total number of columns returned in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @attribute_names = args[:attribute_names] if args.key?(:attribute_names)
          @etag = args[:etag] if args.key?(:etag)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @total_results = args[:total_results] if args.key?(:total_results)
        end
      end

      # JSON template for an Analytics custom data source.
      class CustomDataSource
        include Google::Apis::Core::Hashable

        # Account ID to which this custom data source belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        #
        # Corresponds to the JSON property `childLink`
        # @return [Google::Apis::AnalyticsV3::CustomDataSource::ChildLink]
        attr_accessor :child_link

        # Time this custom data source was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Description of custom data source.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description

        # Custom data source ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        #
        # Corresponds to the JSON property `importBehavior`
        # @return [String]
        attr_accessor :import_behavior

        # Resource type for Analytics custom data source.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of this custom data source.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for this custom data source. Points to the web property to which
        # this custom data source belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::CustomDataSource::ParentLink]
        attr_accessor :parent_link

        # IDs of views (profiles) linked to the custom data source.
        # Corresponds to the JSON property `profilesLinked`
        # @return [Array<String>]
        attr_accessor :profiles_linked

        # Collection of schema headers of the custom data source.
        # Corresponds to the JSON property `schema`
        # @return [Array<String>]
        attr_accessor :schema

        # Link for this Analytics custom data source.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Type of the custom data source.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time this custom data source was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Upload type of the custom data source.
        # Corresponds to the JSON property `uploadType`
        # @return [String]
        attr_accessor :upload_type

        # Web property ID of the form UA-XXXXX-YY to which this custom data source
        # belongs.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @child_link = args[:child_link] if args.key?(:child_link)
          @created = args[:created] if args.key?(:created)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @import_behavior = args[:import_behavior] if args.key?(:import_behavior)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @profiles_linked = args[:profiles_linked] if args.key?(:profiles_linked)
          @schema = args[:schema] if args.key?(:schema)
          @self_link = args[:self_link] if args.key?(:self_link)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
          @upload_type = args[:upload_type] if args.key?(:upload_type)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        #
        class ChildLink
          include Google::Apis::Core::Hashable

          # Link to the list of daily uploads for this custom data source. Link to the
          # list of uploads for this custom data source.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#dailyUploads". Value is "analytics#uploads".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Parent link for this custom data source. Points to the web property to which
        # this custom data source belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the web property to which this custom data source belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#webproperty".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end
      end

      # Lists Analytics custom data sources to which the user has access. Each
      # resource in the collection corresponds to a single Analytics custom data
      # source.
      class CustomDataSources
        include Google::Apis::Core::Hashable

        # Collection of custom data sources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::CustomDataSource>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this custom data source collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this custom data source collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for Analytics Custom Dimension.
      class CustomDimension
        include Google::Apis::Core::Hashable

        # Account ID.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Boolean indicating whether the custom dimension is active.
        # Corresponds to the JSON property `active`
        # @return [Boolean]
        attr_accessor :active
        alias_method :active?, :active

        # Time the custom dimension was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Custom dimension ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Index of the custom dimension.
        # Corresponds to the JSON property `index`
        # @return [Fixnum]
        attr_accessor :index

        # Kind value for a custom dimension. Set to "analytics#customDimension". It is a
        # read-only field.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of the custom dimension.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for the custom dimension. Points to the property to which the
        # custom dimension belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::CustomDimension::ParentLink]
        attr_accessor :parent_link

        # Scope of the custom dimension: HIT, SESSION, USER or PRODUCT.
        # Corresponds to the JSON property `scope`
        # @return [String]
        attr_accessor :scope

        # Link for the custom dimension
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Time the custom dimension was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Property ID.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @active = args[:active] if args.key?(:active)
          @created = args[:created] if args.key?(:created)
          @id = args[:id] if args.key?(:id)
          @index = args[:index] if args.key?(:index)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @scope = args[:scope] if args.key?(:scope)
          @self_link = args[:self_link] if args.key?(:self_link)
          @updated = args[:updated] if args.key?(:updated)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # Parent link for the custom dimension. Points to the property to which the
        # custom dimension belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the property to which the custom dimension belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Type of the parent link. Set to "analytics#webproperty".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end
      end

      # A custom dimension collection lists Analytics custom dimensions to which the
      # user has access. Each resource in the collection corresponds to a single
      # Analytics custom dimension.
      class CustomDimensions
        include Google::Apis::Core::Hashable

        # Collection of custom dimensions.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::CustomDimension>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this custom dimension collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this custom dimension collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for Analytics Custom Metric.
      class CustomMetric
        include Google::Apis::Core::Hashable

        # Account ID.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Boolean indicating whether the custom metric is active.
        # Corresponds to the JSON property `active`
        # @return [Boolean]
        attr_accessor :active
        alias_method :active?, :active

        # Time the custom metric was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Custom metric ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Index of the custom metric.
        # Corresponds to the JSON property `index`
        # @return [Fixnum]
        attr_accessor :index

        # Kind value for a custom metric. Set to "analytics#customMetric". It is a read-
        # only field.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Max value of custom metric.
        # Corresponds to the JSON property `max_value`
        # @return [String]
        attr_accessor :max_value

        # Min value of custom metric.
        # Corresponds to the JSON property `min_value`
        # @return [String]
        attr_accessor :min_value

        # Name of the custom metric.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for the custom metric. Points to the property to which the custom
        # metric belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::CustomMetric::ParentLink]
        attr_accessor :parent_link

        # Scope of the custom metric: HIT or PRODUCT.
        # Corresponds to the JSON property `scope`
        # @return [String]
        attr_accessor :scope

        # Link for the custom metric
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Data type of custom metric.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time the custom metric was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Property ID.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @active = args[:active] if args.key?(:active)
          @created = args[:created] if args.key?(:created)
          @id = args[:id] if args.key?(:id)
          @index = args[:index] if args.key?(:index)
          @kind = args[:kind] if args.key?(:kind)
          @max_value = args[:max_value] if args.key?(:max_value)
          @min_value = args[:min_value] if args.key?(:min_value)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @scope = args[:scope] if args.key?(:scope)
          @self_link = args[:self_link] if args.key?(:self_link)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # Parent link for the custom metric. Points to the property to which the custom
        # metric belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the property to which the custom metric belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Type of the parent link. Set to "analytics#webproperty".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end
      end

      # A custom metric collection lists Analytics custom metrics to which the user
      # has access. Each resource in the collection corresponds to a single Analytics
      # custom metric.
      class CustomMetrics
        include Google::Apis::Core::Hashable

        # Collection of custom metrics.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::CustomMetric>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this custom metric collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this custom metric collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for Analytics Entity Google Ads Link.
      class EntityAdWordsLink
        include Google::Apis::Core::Hashable

        # A list of Google Ads client accounts. These cannot be MCC accounts. This field
        # is required when creating a Google Ads link. It cannot be empty.
        # Corresponds to the JSON property `adWordsAccounts`
        # @return [Array<Google::Apis::AnalyticsV3::AdWordsAccount>]
        attr_accessor :ad_words_accounts

        # Web property being linked.
        # Corresponds to the JSON property `entity`
        # @return [Google::Apis::AnalyticsV3::EntityAdWordsLink::Entity]
        attr_accessor :entity

        # Entity Google Ads link ID
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for entity Google Ads link.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of the link. This field is required when creating a Google Ads link.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # IDs of linked Views (Profiles) represented as strings.
        # Corresponds to the JSON property `profileIds`
        # @return [Array<String>]
        attr_accessor :profile_ids

        # URL link for this Google Analytics - Google Ads link.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @ad_words_accounts = args[:ad_words_accounts] if args.key?(:ad_words_accounts)
          @entity = args[:entity] if args.key?(:entity)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @profile_ids = args[:profile_ids] if args.key?(:profile_ids)
          @self_link = args[:self_link] if args.key?(:self_link)
        end

        # Web property being linked.
        class Entity
          include Google::Apis::Core::Hashable

          # JSON template for a web property reference.
          # Corresponds to the JSON property `webPropertyRef`
          # @return [Google::Apis::AnalyticsV3::WebPropertyRef]
          attr_accessor :web_property_ref

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @web_property_ref = args[:web_property_ref] if args.key?(:web_property_ref)
          end
        end
      end

      # An entity Google Ads link collection provides a list of GA-Google Ads links
      # Each resource in this collection corresponds to a single link.
      class EntityAdWordsLinks
        include Google::Apis::Core::Hashable

        # A list of entity Google Ads links.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::EntityAdWordsLink>]
        attr_accessor :items

        # The maximum number of entries the response can contain, regardless of the
        # actual number of entries returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Next link for this Google Ads link collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Previous link for this Google Ads link collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the entries, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
        end
      end

      # JSON template for an Analytics Entity-User Link. Returns permissions that a
      # user has for an entity.
      class EntityUserLink
        include Google::Apis::Core::Hashable

        # Entity for this link. It can be an account, a web property, or a view (profile)
        # .
        # Corresponds to the JSON property `entity`
        # @return [Google::Apis::AnalyticsV3::EntityUserLink::Entity]
        attr_accessor :entity

        # Entity user link ID
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for entity user link.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Permissions the user has for this entity.
        # Corresponds to the JSON property `permissions`
        # @return [Google::Apis::AnalyticsV3::EntityUserLink::Permissions]
        attr_accessor :permissions

        # Self link for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # JSON template for a user reference.
        # Corresponds to the JSON property `userRef`
        # @return [Google::Apis::AnalyticsV3::UserRef]
        attr_accessor :user_ref

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @entity = args[:entity] if args.key?(:entity)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @permissions = args[:permissions] if args.key?(:permissions)
          @self_link = args[:self_link] if args.key?(:self_link)
          @user_ref = args[:user_ref] if args.key?(:user_ref)
        end

        # Entity for this link. It can be an account, a web property, or a view (profile)
        # .
        class Entity
          include Google::Apis::Core::Hashable

          # JSON template for a linked account.
          # Corresponds to the JSON property `accountRef`
          # @return [Google::Apis::AnalyticsV3::AccountRef]
          attr_accessor :account_ref

          # JSON template for a linked view (profile).
          # Corresponds to the JSON property `profileRef`
          # @return [Google::Apis::AnalyticsV3::ProfileRef]
          attr_accessor :profile_ref

          # JSON template for a web property reference.
          # Corresponds to the JSON property `webPropertyRef`
          # @return [Google::Apis::AnalyticsV3::WebPropertyRef]
          attr_accessor :web_property_ref

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @account_ref = args[:account_ref] if args.key?(:account_ref)
            @profile_ref = args[:profile_ref] if args.key?(:profile_ref)
            @web_property_ref = args[:web_property_ref] if args.key?(:web_property_ref)
          end
        end

        # Permissions the user has for this entity.
        class Permissions
          include Google::Apis::Core::Hashable

          # Effective permissions represent all the permissions that a user has for this
          # entity. These include any implied permissions (e.g., EDIT implies VIEW) or
          # inherited permissions from the parent entity. Effective permissions are read-
          # only.
          # Corresponds to the JSON property `effective`
          # @return [Array<String>]
          attr_accessor :effective

          # Permissions that a user has been assigned at this very level. Does not include
          # any implied or inherited permissions. Local permissions are modifiable.
          # Corresponds to the JSON property `local`
          # @return [Array<String>]
          attr_accessor :local

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @effective = args[:effective] if args.key?(:effective)
            @local = args[:local] if args.key?(:local)
          end
        end
      end

      # An entity user link collection provides a list of Analytics ACL links Each
      # resource in this collection corresponds to a single link.
      class EntityUserLinks
        include Google::Apis::Core::Hashable

        # A list of entity user links.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::EntityUserLink>]
        attr_accessor :items

        # The maximum number of entries the response can contain, regardless of the
        # actual number of entries returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Next link for this account collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Previous link for this account collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the entries, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
        end
      end

      # JSON template for Analytics experiment resource.
      class Experiment
        include Google::Apis::Core::Hashable

        # Account ID to which this experiment belongs. This field is read-only.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Time the experiment was created. This field is read-only.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Notes about this experiment.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description

        # If true, the end user will be able to edit the experiment via the Google
        # Analytics user interface.
        # Corresponds to the JSON property `editableInGaUi`
        # @return [Boolean]
        attr_accessor :editable_in_ga_ui
        alias_method :editable_in_ga_ui?, :editable_in_ga_ui

        # The ending time of the experiment (the time the status changed from RUNNING to
        # ENDED). This field is present only if the experiment has ended. This field is
        # read-only.
        # Corresponds to the JSON property `endTime`
        # @return [DateTime]
        attr_accessor :end_time

        # Boolean specifying whether to distribute traffic evenly across all variations.
        # If the value is False, content experiments follows the default behavior of
        # adjusting traffic dynamically based on variation performance. Optional --
        # defaults to False. This field may not be changed for an experiment whose
        # status is ENDED.
        # Corresponds to the JSON property `equalWeighting`
        # @return [Boolean]
        attr_accessor :equal_weighting
        alias_method :equal_weighting?, :equal_weighting

        # Experiment ID. Required for patch and update. Disallowed for create.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this experiment belongs. This field
        # is read-only.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for an Analytics experiment. This field is read-only.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # An integer number in [3, 90]. Specifies the minimum length of the experiment.
        # Can be changed for a running experiment. This field may not be changed for an
        # experiments whose status is ENDED.
        # Corresponds to the JSON property `minimumExperimentLengthInDays`
        # @return [Fixnum]
        attr_accessor :minimum_experiment_length_in_days

        # Experiment name. This field may not be changed for an experiment whose status
        # is ENDED. This field is required when creating an experiment.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # The metric that the experiment is optimizing. Valid values: "ga:goal(n)
        # Completions", "ga:adsenseAdsClicks", "ga:adsenseAdsViewed", "ga:adsenseRevenue"
        # , "ga:bounces", "ga:pageviews", "ga:sessionDuration", "ga:transactions", "ga:
        # transactionRevenue". This field is required if status is "RUNNING" and
        # servingFramework is one of "REDIRECT" or "API".
        # Corresponds to the JSON property `objectiveMetric`
        # @return [String]
        attr_accessor :objective_metric

        # Whether the objectiveMetric should be minimized or maximized. Possible values:
        # "MAXIMUM", "MINIMUM". Optional--defaults to "MAXIMUM". Cannot be specified
        # without objectiveMetric. Cannot be modified when status is "RUNNING" or "ENDED"
        # .
        # Corresponds to the JSON property `optimizationType`
        # @return [String]
        attr_accessor :optimization_type

        # Parent link for an experiment. Points to the view (profile) to which this
        # experiment belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::Experiment::ParentLink]
        attr_accessor :parent_link

        # View (Profile) ID to which this experiment belongs. This field is read-only.
        # Corresponds to the JSON property `profileId`
        # @return [String]
        attr_accessor :profile_id

        # Why the experiment ended. Possible values: "STOPPED_BY_USER", "WINNER_FOUND", "
        # EXPERIMENT_EXPIRED", "ENDED_WITH_NO_WINNER", "GOAL_OBJECTIVE_CHANGED". "
        # ENDED_WITH_NO_WINNER" means that the experiment didn't expire but no winner
        # was projected to be found. If the experiment status is changed via the API to
        # ENDED this field is set to STOPPED_BY_USER. This field is read-only.
        # Corresponds to the JSON property `reasonExperimentEnded`
        # @return [String]
        attr_accessor :reason_experiment_ended

        # Boolean specifying whether variations URLS are rewritten to match those of the
        # original. This field may not be changed for an experiments whose status is
        # ENDED.
        # Corresponds to the JSON property `rewriteVariationUrlsAsOriginal`
        # @return [Boolean]
        attr_accessor :rewrite_variation_urls_as_original
        alias_method :rewrite_variation_urls_as_original?, :rewrite_variation_urls_as_original

        # Link for this experiment. This field is read-only.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # The framework used to serve the experiment variations and evaluate the results.
        # One of:
        # - REDIRECT: Google Analytics redirects traffic to different variation pages,
        # reports the chosen variation and evaluates the results.
        # - API: Google Analytics chooses and reports the variation to serve and
        # evaluates the results; the caller is responsible for serving the selected
        # variation.
        # - EXTERNAL: The variations will be served externally and the chosen variation
        # reported to Google Analytics. The caller is responsible for serving the
        # selected variation and evaluating the results.
        # Corresponds to the JSON property `servingFramework`
        # @return [String]
        attr_accessor :serving_framework

        # The snippet of code to include on the control page(s). This field is read-only.
        # Corresponds to the JSON property `snippet`
        # @return [String]
        attr_accessor :snippet

        # The starting time of the experiment (the time the status changed from
        # READY_TO_RUN to RUNNING). This field is present only if the experiment has
        # started. This field is read-only.
        # Corresponds to the JSON property `startTime`
        # @return [DateTime]
        attr_accessor :start_time

        # Experiment status. Possible values: "DRAFT", "READY_TO_RUN", "RUNNING", "ENDED"
        # . Experiments can be created in the "DRAFT", "READY_TO_RUN" or "RUNNING" state.
        # This field is required when creating an experiment.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status

        # A floating-point number in (0, 1]. Specifies the fraction of the traffic that
        # participates in the experiment. Can be changed for a running experiment. This
        # field may not be changed for an experiments whose status is ENDED.
        # Corresponds to the JSON property `trafficCoverage`
        # @return [Float]
        attr_accessor :traffic_coverage

        # Time the experiment was last modified. This field is read-only.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Array of variations. The first variation in the array is the original. The
        # number of variations may not change once an experiment is in the RUNNING state.
        # At least two variations are required before status can be set to RUNNING.
        # Corresponds to the JSON property `variations`
        # @return [Array<Google::Apis::AnalyticsV3::Experiment::Variation>]
        attr_accessor :variations

        # Web property ID to which this experiment belongs. The web property ID is of
        # the form UA-XXXXX-YY. This field is read-only.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        # A floating-point number in (0, 1). Specifies the necessary confidence level to
        # choose a winner. This field may not be changed for an experiments whose status
        # is ENDED.
        # Corresponds to the JSON property `winnerConfidenceLevel`
        # @return [Float]
        attr_accessor :winner_confidence_level

        # Boolean specifying whether a winner has been found for this experiment. This
        # field is read-only.
        # Corresponds to the JSON property `winnerFound`
        # @return [Boolean]
        attr_accessor :winner_found
        alias_method :winner_found?, :winner_found

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @created = args[:created] if args.key?(:created)
          @description = args[:description] if args.key?(:description)
          @editable_in_ga_ui = args[:editable_in_ga_ui] if args.key?(:editable_in_ga_ui)
          @end_time = args[:end_time] if args.key?(:end_time)
          @equal_weighting = args[:equal_weighting] if args.key?(:equal_weighting)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @minimum_experiment_length_in_days = args[:minimum_experiment_length_in_days] if args.key?(:minimum_experiment_length_in_days)
          @name = args[:name] if args.key?(:name)
          @objective_metric = args[:objective_metric] if args.key?(:objective_metric)
          @optimization_type = args[:optimization_type] if args.key?(:optimization_type)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @profile_id = args[:profile_id] if args.key?(:profile_id)
          @reason_experiment_ended = args[:reason_experiment_ended] if args.key?(:reason_experiment_ended)
          @rewrite_variation_urls_as_original = args[:rewrite_variation_urls_as_original] if args.key?(:rewrite_variation_urls_as_original)
          @self_link = args[:self_link] if args.key?(:self_link)
          @serving_framework = args[:serving_framework] if args.key?(:serving_framework)
          @snippet = args[:snippet] if args.key?(:snippet)
          @start_time = args[:start_time] if args.key?(:start_time)
          @status = args[:status] if args.key?(:status)
          @traffic_coverage = args[:traffic_coverage] if args.key?(:traffic_coverage)
          @updated = args[:updated] if args.key?(:updated)
          @variations = args[:variations] if args.key?(:variations)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          @winner_confidence_level = args[:winner_confidence_level] if args.key?(:winner_confidence_level)
          @winner_found = args[:winner_found] if args.key?(:winner_found)
        end

        # Parent link for an experiment. Points to the view (profile) to which this
        # experiment belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the view (profile) to which this experiment belongs. This field is
          # read-only.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#profile". This field is read-only.
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        #
        class Variation
          include Google::Apis::Core::Hashable

          # The name of the variation. This field is required when creating an experiment.
          # This field may not be changed for an experiment whose status is ENDED.
          # Corresponds to the JSON property `name`
          # @return [String]
          attr_accessor :name

          # Status of the variation. Possible values: "ACTIVE", "INACTIVE". INACTIVE
          # variations are not served. This field may not be changed for an experiment
          # whose status is ENDED.
          # Corresponds to the JSON property `status`
          # @return [String]
          attr_accessor :status

          # The URL of the variation. This field may not be changed for an experiment
          # whose status is RUNNING or ENDED.
          # Corresponds to the JSON property `url`
          # @return [String]
          attr_accessor :url

          # Weight that this variation should receive. Only present if the experiment is
          # running. This field is read-only.
          # Corresponds to the JSON property `weight`
          # @return [Float]
          attr_accessor :weight

          # True if the experiment has ended and this variation performed (statistically)
          # significantly better than the original. This field is read-only.
          # Corresponds to the JSON property `won`
          # @return [Boolean]
          attr_accessor :won
          alias_method :won?, :won

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @name = args[:name] if args.key?(:name)
            @status = args[:status] if args.key?(:status)
            @url = args[:url] if args.key?(:url)
            @weight = args[:weight] if args.key?(:weight)
            @won = args[:won] if args.key?(:won)
          end
        end
      end

      # An experiment collection lists Analytics experiments to which the user has
      # access. Each view (profile) can have a set of experiments. Each resource in
      # the Experiment collection corresponds to a single Analytics experiment.
      class Experiments
        include Google::Apis::Core::Hashable

        # A list of experiments.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Experiment>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this experiment collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this experiment collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of
        # resources in the result.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for an Analytics account filter.
      class Filter
        include Google::Apis::Core::Hashable

        # Account ID to which this filter belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Details for the filter of the type ADVANCED.
        # Corresponds to the JSON property `advancedDetails`
        # @return [Google::Apis::AnalyticsV3::Filter::AdvancedDetails]
        attr_accessor :advanced_details

        # Time this filter was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # JSON template for an Analytics filter expression.
        # Corresponds to the JSON property `excludeDetails`
        # @return [Google::Apis::AnalyticsV3::FilterExpression]
        attr_accessor :exclude_details

        # Filter ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # JSON template for an Analytics filter expression.
        # Corresponds to the JSON property `includeDetails`
        # @return [Google::Apis::AnalyticsV3::FilterExpression]
        attr_accessor :include_details

        # Resource type for Analytics filter.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Details for the filter of the type LOWER.
        # Corresponds to the JSON property `lowercaseDetails`
        # @return [Google::Apis::AnalyticsV3::Filter::LowercaseDetails]
        attr_accessor :lowercase_details

        # Name of this filter.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for this filter. Points to the account to which this filter
        # belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::Filter::ParentLink]
        attr_accessor :parent_link

        # Details for the filter of the type SEARCH_AND_REPLACE.
        # Corresponds to the JSON property `searchAndReplaceDetails`
        # @return [Google::Apis::AnalyticsV3::Filter::SearchAndReplaceDetails]
        attr_accessor :search_and_replace_details

        # Link for this filter.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Type of this filter. Possible values are INCLUDE, EXCLUDE, LOWERCASE,
        # UPPERCASE, SEARCH_AND_REPLACE and ADVANCED.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time this filter was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Details for the filter of the type UPPER.
        # Corresponds to the JSON property `uppercaseDetails`
        # @return [Google::Apis::AnalyticsV3::Filter::UppercaseDetails]
        attr_accessor :uppercase_details

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @advanced_details = args[:advanced_details] if args.key?(:advanced_details)
          @created = args[:created] if args.key?(:created)
          @exclude_details = args[:exclude_details] if args.key?(:exclude_details)
          @id = args[:id] if args.key?(:id)
          @include_details = args[:include_details] if args.key?(:include_details)
          @kind = args[:kind] if args.key?(:kind)
          @lowercase_details = args[:lowercase_details] if args.key?(:lowercase_details)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @search_and_replace_details = args[:search_and_replace_details] if args.key?(:search_and_replace_details)
          @self_link = args[:self_link] if args.key?(:self_link)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
          @uppercase_details = args[:uppercase_details] if args.key?(:uppercase_details)
        end

        # Details for the filter of the type ADVANCED.
        class AdvancedDetails
          include Google::Apis::Core::Hashable

          # Indicates if the filter expressions are case sensitive.
          # Corresponds to the JSON property `caseSensitive`
          # @return [Boolean]
          attr_accessor :case_sensitive
          alias_method :case_sensitive?, :case_sensitive

          # Expression to extract from field A.
          # Corresponds to the JSON property `extractA`
          # @return [String]
          attr_accessor :extract_a

          # Expression to extract from field B.
          # Corresponds to the JSON property `extractB`
          # @return [String]
          attr_accessor :extract_b

          # Field A.
          # Corresponds to the JSON property `fieldA`
          # @return [String]
          attr_accessor :field_a

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `fieldAIndex`
          # @return [Fixnum]
          attr_accessor :field_a_index

          # Indicates if field A is required to match.
          # Corresponds to the JSON property `fieldARequired`
          # @return [Boolean]
          attr_accessor :field_a_required
          alias_method :field_a_required?, :field_a_required

          # Field B.
          # Corresponds to the JSON property `fieldB`
          # @return [String]
          attr_accessor :field_b

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `fieldBIndex`
          # @return [Fixnum]
          attr_accessor :field_b_index

          # Indicates if field B is required to match.
          # Corresponds to the JSON property `fieldBRequired`
          # @return [Boolean]
          attr_accessor :field_b_required
          alias_method :field_b_required?, :field_b_required

          # Expression used to construct the output value.
          # Corresponds to the JSON property `outputConstructor`
          # @return [String]
          attr_accessor :output_constructor

          # Output field.
          # Corresponds to the JSON property `outputToField`
          # @return [String]
          attr_accessor :output_to_field

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `outputToFieldIndex`
          # @return [Fixnum]
          attr_accessor :output_to_field_index

          # Indicates if the existing value of the output field, if any, should be
          # overridden by the output expression.
          # Corresponds to the JSON property `overrideOutputField`
          # @return [Boolean]
          attr_accessor :override_output_field
          alias_method :override_output_field?, :override_output_field

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive)
            @extract_a = args[:extract_a] if args.key?(:extract_a)
            @extract_b = args[:extract_b] if args.key?(:extract_b)
            @field_a = args[:field_a] if args.key?(:field_a)
            @field_a_index = args[:field_a_index] if args.key?(:field_a_index)
            @field_a_required = args[:field_a_required] if args.key?(:field_a_required)
            @field_b = args[:field_b] if args.key?(:field_b)
            @field_b_index = args[:field_b_index] if args.key?(:field_b_index)
            @field_b_required = args[:field_b_required] if args.key?(:field_b_required)
            @output_constructor = args[:output_constructor] if args.key?(:output_constructor)
            @output_to_field = args[:output_to_field] if args.key?(:output_to_field)
            @output_to_field_index = args[:output_to_field_index] if args.key?(:output_to_field_index)
            @override_output_field = args[:override_output_field] if args.key?(:override_output_field)
          end
        end

        # Details for the filter of the type LOWER.
        class LowercaseDetails
          include Google::Apis::Core::Hashable

          # Field to use in the filter.
          # Corresponds to the JSON property `field`
          # @return [String]
          attr_accessor :field

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `fieldIndex`
          # @return [Fixnum]
          attr_accessor :field_index

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @field = args[:field] if args.key?(:field)
            @field_index = args[:field_index] if args.key?(:field_index)
          end
        end

        # Parent link for this filter. Points to the account to which this filter
        # belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the account to which this filter belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#account".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Details for the filter of the type SEARCH_AND_REPLACE.
        class SearchAndReplaceDetails
          include Google::Apis::Core::Hashable

          # Determines if the filter is case sensitive.
          # Corresponds to the JSON property `caseSensitive`
          # @return [Boolean]
          attr_accessor :case_sensitive
          alias_method :case_sensitive?, :case_sensitive

          # Field to use in the filter.
          # Corresponds to the JSON property `field`
          # @return [String]
          attr_accessor :field

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `fieldIndex`
          # @return [Fixnum]
          attr_accessor :field_index

          # Term to replace the search term with.
          # Corresponds to the JSON property `replaceString`
          # @return [String]
          attr_accessor :replace_string

          # Term to search.
          # Corresponds to the JSON property `searchString`
          # @return [String]
          attr_accessor :search_string

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive)
            @field = args[:field] if args.key?(:field)
            @field_index = args[:field_index] if args.key?(:field_index)
            @replace_string = args[:replace_string] if args.key?(:replace_string)
            @search_string = args[:search_string] if args.key?(:search_string)
          end
        end

        # Details for the filter of the type UPPER.
        class UppercaseDetails
          include Google::Apis::Core::Hashable

          # Field to use in the filter.
          # Corresponds to the JSON property `field`
          # @return [String]
          attr_accessor :field

          # The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.
          # Corresponds to the JSON property `fieldIndex`
          # @return [Fixnum]
          attr_accessor :field_index

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @field = args[:field] if args.key?(:field)
            @field_index = args[:field_index] if args.key?(:field_index)
          end
        end
      end

      # JSON template for an Analytics filter expression.
      class FilterExpression
        include Google::Apis::Core::Hashable

        # Determines if the filter is case sensitive.
        # Corresponds to the JSON property `caseSensitive`
        # @return [Boolean]
        attr_accessor :case_sensitive
        alias_method :case_sensitive?, :case_sensitive

        # Filter expression value
        # Corresponds to the JSON property `expressionValue`
        # @return [String]
        attr_accessor :expression_value

        # Field to filter. Possible values:
        # - Content and Traffic
        # - PAGE_REQUEST_URI,
        # - PAGE_HOSTNAME,
        # - PAGE_TITLE,
        # - REFERRAL,
        # - COST_DATA_URI (Campaign target URL),
        # - HIT_TYPE,
        # - INTERNAL_SEARCH_TERM,
        # - INTERNAL_SEARCH_TYPE,
        # - SOURCE_PROPERTY_TRACKING_ID,
        # - Campaign or AdGroup
        # - CAMPAIGN_SOURCE,
        # - CAMPAIGN_MEDIUM,
        # - CAMPAIGN_NAME,
        # - CAMPAIGN_AD_GROUP,
        # - CAMPAIGN_TERM,
        # - CAMPAIGN_CONTENT,
        # - CAMPAIGN_CODE,
        # - CAMPAIGN_REFERRAL_PATH,
        # - E-Commerce
        # - TRANSACTION_COUNTRY,
        # - TRANSACTION_REGION,
        # - TRANSACTION_CITY,
        # - TRANSACTION_AFFILIATION (Store or order location),
        # - ITEM_NAME,
        # - ITEM_CODE,
        # - ITEM_VARIATION,
        # - TRANSACTION_ID,
        # - TRANSACTION_CURRENCY_CODE,
        # - PRODUCT_ACTION_TYPE,
        # - Audience/Users
        # - BROWSER,
        # - BROWSER_VERSION,
        # - BROWSER_SIZE,
        # - PLATFORM,
        # - PLATFORM_VERSION,
        # - LANGUAGE,
        # - SCREEN_RESOLUTION,
        # - SCREEN_COLORS,
        # - JAVA_ENABLED (Boolean Field),
        # - FLASH_VERSION,
        # - GEO_SPEED (Connection speed),
        # - VISITOR_TYPE,
        # - GEO_ORGANIZATION (ISP organization),
        # - GEO_DOMAIN,
        # - GEO_IP_ADDRESS,
        # - GEO_IP_VERSION,
        # - Location
        # - GEO_COUNTRY,
        # - GEO_REGION,
        # - GEO_CITY,
        # - Event
        # - EVENT_CATEGORY,
        # - EVENT_ACTION,
        # - EVENT_LABEL,
        # - Other
        # - CUSTOM_FIELD_1,
        # - CUSTOM_FIELD_2,
        # - USER_DEFINED_VALUE,
        # - Application
        # - APP_ID,
        # - APP_INSTALLER_ID,
        # - APP_NAME,
        # - APP_VERSION,
        # - SCREEN,
        # - IS_APP (Boolean Field),
        # - IS_FATAL_EXCEPTION (Boolean Field),
        # - EXCEPTION_DESCRIPTION,
        # - Mobile device
        # - IS_MOBILE (Boolean Field, Deprecated. Use DEVICE_CATEGORY=mobile),
        # - IS_TABLET (Boolean Field, Deprecated. Use DEVICE_CATEGORY=tablet),
        # - DEVICE_CATEGORY,
        # - MOBILE_HAS_QWERTY_KEYBOARD (Boolean Field),
        # - MOBILE_HAS_NFC_SUPPORT (Boolean Field),
        # - MOBILE_HAS_CELLULAR_RADIO (Boolean Field),
        # - MOBILE_HAS_WIFI_SUPPORT (Boolean Field),
        # - MOBILE_BRAND_NAME,
        # - MOBILE_MODEL_NAME,
        # - MOBILE_MARKETING_NAME,
        # - MOBILE_POINTING_METHOD,
        # - Social
        # - SOCIAL_NETWORK,
        # - SOCIAL_ACTION,
        # - SOCIAL_ACTION_TARGET,
        # - Custom dimension
        # - CUSTOM_DIMENSION (See accompanying field index),
        # Corresponds to the JSON property `field`
        # @return [String]
        attr_accessor :field

        # The Index of the custom dimension. Set only if the field is a is
        # CUSTOM_DIMENSION.
        # Corresponds to the JSON property `fieldIndex`
        # @return [Fixnum]
        attr_accessor :field_index

        # Kind value for filter expression
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Match type for this filter. Possible values are BEGINS_WITH, EQUAL, ENDS_WITH,
        # CONTAINS, or MATCHES. GEO_DOMAIN, GEO_IP_ADDRESS, PAGE_REQUEST_URI, or
        # PAGE_HOSTNAME filters can use any match type; all other filters must use
        # MATCHES.
        # Corresponds to the JSON property `matchType`
        # @return [String]
        attr_accessor :match_type

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive)
          @expression_value = args[:expression_value] if args.key?(:expression_value)
          @field = args[:field] if args.key?(:field)
          @field_index = args[:field_index] if args.key?(:field_index)
          @kind = args[:kind] if args.key?(:kind)
          @match_type = args[:match_type] if args.key?(:match_type)
        end
      end

      # JSON template for a profile filter link.
      class FilterRef
        include Google::Apis::Core::Hashable

        # Account ID to which this filter belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Link for this filter.
        # Corresponds to the JSON property `href`
        # @return [String]
        attr_accessor :href

        # Filter ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Kind value for filter reference.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of this filter.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @href = args[:href] if args.key?(:href)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
        end
      end

      # A filter collection lists filters created by users in an Analytics account.
      # Each resource in the collection corresponds to a filter.
      class Filters
        include Google::Apis::Core::Hashable

        # A list of filters.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Filter>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1,000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this filter collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this filter collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # Analytics data for a given view (profile).
      class GaData
        include Google::Apis::Core::Hashable

        # Column headers that list dimension names followed by the metric names. The
        # order of dimensions and metrics is same as specified in the request.
        # Corresponds to the JSON property `columnHeaders`
        # @return [Array<Google::Apis::AnalyticsV3::GaData::ColumnHeader>]
        attr_accessor :column_headers

        # Determines if Analytics data contains samples.
        # Corresponds to the JSON property `containsSampledData`
        # @return [Boolean]
        attr_accessor :contains_sampled_data
        alias_method :contains_sampled_data?, :contains_sampled_data

        # The last refreshed time in seconds for Analytics data.
        # Corresponds to the JSON property `dataLastRefreshed`
        # @return [Fixnum]
        attr_accessor :data_last_refreshed

        #
        # Corresponds to the JSON property `dataTable`
        # @return [Google::Apis::AnalyticsV3::GaData::DataTable]
        attr_accessor :data_table

        # Unique ID for this data response.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # The maximum number of rows the response can contain, regardless of the actual
        # number of rows returned. Its value ranges from 1 to 10,000 with a value of
        # 1000 by default, or otherwise specified by the max-results query parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this Analytics data query.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this Analytics data query.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # Information for the view (profile), for which the Analytics data was requested.
        # Corresponds to the JSON property `profileInfo`
        # @return [Google::Apis::AnalyticsV3::GaData::ProfileInfo]
        attr_accessor :profile_info

        # Analytics data request query parameters.
        # Corresponds to the JSON property `query`
        # @return [Google::Apis::AnalyticsV3::GaData::Query]
        attr_accessor :query

        # Analytics data rows, where each row contains a list of dimension values
        # followed by the metric values. The order of dimensions and metrics is same as
        # specified in the request.
        # Corresponds to the JSON property `rows`
        # @return [Array<Array<String>>]
        attr_accessor :rows

        # The number of samples used to calculate the result.
        # Corresponds to the JSON property `sampleSize`
        # @return [Fixnum]
        attr_accessor :sample_size

        # Total size of the sample space from which the samples were selected.
        # Corresponds to the JSON property `sampleSpace`
        # @return [Fixnum]
        attr_accessor :sample_space

        # Link to this page.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # The total number of rows for the query, regardless of the number of rows in
        # the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Total values for the requested metrics over all the results, not just the
        # results returned in this response. The order of the metric totals is same as
        # the metric order specified in the request.
        # Corresponds to the JSON property `totalsForAllResults`
        # @return [Hash<String,String>]
        attr_accessor :totals_for_all_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @column_headers = args[:column_headers] if args.key?(:column_headers)
          @contains_sampled_data = args[:contains_sampled_data] if args.key?(:contains_sampled_data)
          @data_last_refreshed = args[:data_last_refreshed] if args.key?(:data_last_refreshed)
          @data_table = args[:data_table] if args.key?(:data_table)
          @id = args[:id] if args.key?(:id)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @profile_info = args[:profile_info] if args.key?(:profile_info)
          @query = args[:query] if args.key?(:query)
          @rows = args[:rows] if args.key?(:rows)
          @sample_size = args[:sample_size] if args.key?(:sample_size)
          @sample_space = args[:sample_space] if args.key?(:sample_space)
          @self_link = args[:self_link] if args.key?(:self_link)
          @total_results = args[:total_results] if args.key?(:total_results)
          @totals_for_all_results = args[:totals_for_all_results] if args.key?(:totals_for_all_results)
        end

        #
        class ColumnHeader
          include Google::Apis::Core::Hashable

          # Column Type. Either DIMENSION or METRIC.
          # Corresponds to the JSON property `columnType`
          # @return [String]
          attr_accessor :column_type

          # Data type. Dimension column headers have only STRING as the data type. Metric
          # column headers have data types for metric values such as INTEGER, DOUBLE,
          # CURRENCY etc.
          # Corresponds to the JSON property `dataType`
          # @return [String]
          attr_accessor :data_type

          # Column name.
          # Corresponds to the JSON property `name`
          # @return [String]
          attr_accessor :name

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @column_type = args[:column_type] if args.key?(:column_type)
            @data_type = args[:data_type] if args.key?(:data_type)
            @name = args[:name] if args.key?(:name)
          end
        end

        #
        class DataTable
          include Google::Apis::Core::Hashable

          #
          # Corresponds to the JSON property `cols`
          # @return [Array<Google::Apis::AnalyticsV3::GaData::DataTable::Col>]
          attr_accessor :cols

          #
          # Corresponds to the JSON property `rows`
          # @return [Array<Google::Apis::AnalyticsV3::GaData::DataTable::Row>]
          attr_accessor :rows

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @cols = args[:cols] if args.key?(:cols)
            @rows = args[:rows] if args.key?(:rows)
          end

          #
          class Col
            include Google::Apis::Core::Hashable

            #
            # Corresponds to the JSON property `id`
            # @return [String]
            attr_accessor :id

            #
            # Corresponds to the JSON property `label`
            # @return [String]
            attr_accessor :label

            #
            # Corresponds to the JSON property `type`
            # @return [String]
            attr_accessor :type

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @id = args[:id] if args.key?(:id)
              @label = args[:label] if args.key?(:label)
              @type = args[:type] if args.key?(:type)
            end
          end

          #
          class Row
            include Google::Apis::Core::Hashable

            #
            # Corresponds to the JSON property `c`
            # @return [Array<Google::Apis::AnalyticsV3::GaData::DataTable::Row::C>]
            attr_accessor :c

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @c = args[:c] if args.key?(:c)
            end

            #
            class C
              include Google::Apis::Core::Hashable

              #
              # Corresponds to the JSON property `v`
              # @return [String]
              attr_accessor :v

              def initialize(**args)
                 update!(**args)
              end

              # Update properties of this object
              def update!(**args)
                @v = args[:v] if args.key?(:v)
              end
            end
          end
        end

        # Information for the view (profile), for which the Analytics data was requested.
        class ProfileInfo
          include Google::Apis::Core::Hashable

          # Account ID to which this view (profile) belongs.
          # Corresponds to the JSON property `accountId`
          # @return [String]
          attr_accessor :account_id

          # Internal ID for the web property to which this view (profile) belongs.
          # Corresponds to the JSON property `internalWebPropertyId`
          # @return [String]
          attr_accessor :internal_web_property_id

          # View (Profile) ID.
          # Corresponds to the JSON property `profileId`
          # @return [String]
          attr_accessor :profile_id

          # View (Profile) name.
          # Corresponds to the JSON property `profileName`
          # @return [String]
          attr_accessor :profile_name

          # Table ID for view (profile).
          # Corresponds to the JSON property `tableId`
          # @return [String]
          attr_accessor :table_id

          # Web Property ID to which this view (profile) belongs.
          # Corresponds to the JSON property `webPropertyId`
          # @return [String]
          attr_accessor :web_property_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @account_id = args[:account_id] if args.key?(:account_id)
            @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
            @profile_id = args[:profile_id] if args.key?(:profile_id)
            @profile_name = args[:profile_name] if args.key?(:profile_name)
            @table_id = args[:table_id] if args.key?(:table_id)
            @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          end
        end

        # Analytics data request query parameters.
        class Query
          include Google::Apis::Core::Hashable

          # List of analytics dimensions.
          # Corresponds to the JSON property `dimensions`
          # @return [String]
          attr_accessor :dimensions

          # End date.
          # Corresponds to the JSON property `end-date`
          # @return [String]
          attr_accessor :end_date

          # Comma-separated list of dimension or metric filters.
          # Corresponds to the JSON property `filters`
          # @return [String]
          attr_accessor :filters

          # Unique table ID.
          # Corresponds to the JSON property `ids`
          # @return [String]
          attr_accessor :ids

          # Maximum results per page.
          # Corresponds to the JSON property `max-results`
          # @return [Fixnum]
          attr_accessor :max_results

          # List of analytics metrics.
          # Corresponds to the JSON property `metrics`
          # @return [Array<String>]
          attr_accessor :metrics

          # Desired sampling level
          # Corresponds to the JSON property `samplingLevel`
          # @return [String]
          attr_accessor :sampling_level

          # Analytics advanced segment.
          # Corresponds to the JSON property `segment`
          # @return [String]
          attr_accessor :segment

          # List of dimensions or metrics based on which Analytics data is sorted.
          # Corresponds to the JSON property `sort`
          # @return [Array<String>]
          attr_accessor :sort

          # Start date.
          # Corresponds to the JSON property `start-date`
          # @return [String]
          attr_accessor :start_date

          # Start index.
          # Corresponds to the JSON property `start-index`
          # @return [Fixnum]
          attr_accessor :start_index

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @dimensions = args[:dimensions] if args.key?(:dimensions)
            @end_date = args[:end_date] if args.key?(:end_date)
            @filters = args[:filters] if args.key?(:filters)
            @ids = args[:ids] if args.key?(:ids)
            @max_results = args[:max_results] if args.key?(:max_results)
            @metrics = args[:metrics] if args.key?(:metrics)
            @sampling_level = args[:sampling_level] if args.key?(:sampling_level)
            @segment = args[:segment] if args.key?(:segment)
            @sort = args[:sort] if args.key?(:sort)
            @start_date = args[:start_date] if args.key?(:start_date)
            @start_index = args[:start_index] if args.key?(:start_index)
          end
        end
      end

      # JSON template for Analytics goal resource.
      class Goal
        include Google::Apis::Core::Hashable

        # Account ID to which this goal belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Determines whether this goal is active.
        # Corresponds to the JSON property `active`
        # @return [Boolean]
        attr_accessor :active
        alias_method :active?, :active

        # Time this goal was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Details for the goal of the type EVENT.
        # Corresponds to the JSON property `eventDetails`
        # @return [Google::Apis::AnalyticsV3::Goal::EventDetails]
        attr_accessor :event_details

        # Goal ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this goal belongs.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for an Analytics goal.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Goal name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for a goal. Points to the view (profile) to which this goal
        # belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::Goal::ParentLink]
        attr_accessor :parent_link

        # View (Profile) ID to which this goal belongs.
        # Corresponds to the JSON property `profileId`
        # @return [String]
        attr_accessor :profile_id

        # Link for this goal.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Goal type. Possible values are URL_DESTINATION, VISIT_TIME_ON_SITE,
        # VISIT_NUM_PAGES, AND EVENT.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time this goal was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Details for the goal of the type URL_DESTINATION.
        # Corresponds to the JSON property `urlDestinationDetails`
        # @return [Google::Apis::AnalyticsV3::Goal::UrlDestinationDetails]
        attr_accessor :url_destination_details

        # Goal value.
        # Corresponds to the JSON property `value`
        # @return [Float]
        attr_accessor :value

        # Details for the goal of the type VISIT_NUM_PAGES.
        # Corresponds to the JSON property `visitNumPagesDetails`
        # @return [Google::Apis::AnalyticsV3::Goal::VisitNumPagesDetails]
        attr_accessor :visit_num_pages_details

        # Details for the goal of the type VISIT_TIME_ON_SITE.
        # Corresponds to the JSON property `visitTimeOnSiteDetails`
        # @return [Google::Apis::AnalyticsV3::Goal::VisitTimeOnSiteDetails]
        attr_accessor :visit_time_on_site_details

        # Web property ID to which this goal belongs. The web property ID is of the form
        # UA-XXXXX-YY.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @active = args[:active] if args.key?(:active)
          @created = args[:created] if args.key?(:created)
          @event_details = args[:event_details] if args.key?(:event_details)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @profile_id = args[:profile_id] if args.key?(:profile_id)
          @self_link = args[:self_link] if args.key?(:self_link)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
          @url_destination_details = args[:url_destination_details] if args.key?(:url_destination_details)
          @value = args[:value] if args.key?(:value)
          @visit_num_pages_details = args[:visit_num_pages_details] if args.key?(:visit_num_pages_details)
          @visit_time_on_site_details = args[:visit_time_on_site_details] if args.key?(:visit_time_on_site_details)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # Details for the goal of the type EVENT.
        class EventDetails
          include Google::Apis::Core::Hashable

          # List of event conditions.
          # Corresponds to the JSON property `eventConditions`
          # @return [Array<Google::Apis::AnalyticsV3::Goal::EventDetails::EventCondition>]
          attr_accessor :event_conditions

          # Determines if the event value should be used as the value for this goal.
          # Corresponds to the JSON property `useEventValue`
          # @return [Boolean]
          attr_accessor :use_event_value
          alias_method :use_event_value?, :use_event_value

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @event_conditions = args[:event_conditions] if args.key?(:event_conditions)
            @use_event_value = args[:use_event_value] if args.key?(:use_event_value)
          end

          #
          class EventCondition
            include Google::Apis::Core::Hashable

            # Type of comparison. Possible values are LESS_THAN, GREATER_THAN or EQUAL.
            # Corresponds to the JSON property `comparisonType`
            # @return [String]
            attr_accessor :comparison_type

            # Value used for this comparison.
            # Corresponds to the JSON property `comparisonValue`
            # @return [Fixnum]
            attr_accessor :comparison_value

            # Expression used for this match.
            # Corresponds to the JSON property `expression`
            # @return [String]
            attr_accessor :expression

            # Type of the match to be performed. Possible values are REGEXP, BEGINS_WITH, or
            # EXACT.
            # Corresponds to the JSON property `matchType`
            # @return [String]
            attr_accessor :match_type

            # Type of this event condition. Possible values are CATEGORY, ACTION, LABEL, or
            # VALUE.
            # Corresponds to the JSON property `type`
            # @return [String]
            attr_accessor :type

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @comparison_type = args[:comparison_type] if args.key?(:comparison_type)
              @comparison_value = args[:comparison_value] if args.key?(:comparison_value)
              @expression = args[:expression] if args.key?(:expression)
              @match_type = args[:match_type] if args.key?(:match_type)
              @type = args[:type] if args.key?(:type)
            end
          end
        end

        # Parent link for a goal. Points to the view (profile) to which this goal
        # belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the view (profile) to which this goal belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#profile".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Details for the goal of the type URL_DESTINATION.
        class UrlDestinationDetails
          include Google::Apis::Core::Hashable

          # Determines if the goal URL must exactly match the capitalization of visited
          # URLs.
          # Corresponds to the JSON property `caseSensitive`
          # @return [Boolean]
          attr_accessor :case_sensitive
          alias_method :case_sensitive?, :case_sensitive

          # Determines if the first step in this goal is required.
          # Corresponds to the JSON property `firstStepRequired`
          # @return [Boolean]
          attr_accessor :first_step_required
          alias_method :first_step_required?, :first_step_required

          # Match type for the goal URL. Possible values are HEAD, EXACT, or REGEX.
          # Corresponds to the JSON property `matchType`
          # @return [String]
          attr_accessor :match_type

          # List of steps configured for this goal funnel.
          # Corresponds to the JSON property `steps`
          # @return [Array<Google::Apis::AnalyticsV3::Goal::UrlDestinationDetails::Step>]
          attr_accessor :steps

          # URL for this goal.
          # Corresponds to the JSON property `url`
          # @return [String]
          attr_accessor :url

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @case_sensitive = args[:case_sensitive] if args.key?(:case_sensitive)
            @first_step_required = args[:first_step_required] if args.key?(:first_step_required)
            @match_type = args[:match_type] if args.key?(:match_type)
            @steps = args[:steps] if args.key?(:steps)
            @url = args[:url] if args.key?(:url)
          end

          #
          class Step
            include Google::Apis::Core::Hashable

            # Step name.
            # Corresponds to the JSON property `name`
            # @return [String]
            attr_accessor :name

            # Step number.
            # Corresponds to the JSON property `number`
            # @return [Fixnum]
            attr_accessor :number

            # URL for this step.
            # Corresponds to the JSON property `url`
            # @return [String]
            attr_accessor :url

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @name = args[:name] if args.key?(:name)
              @number = args[:number] if args.key?(:number)
              @url = args[:url] if args.key?(:url)
            end
          end
        end

        # Details for the goal of the type VISIT_NUM_PAGES.
        class VisitNumPagesDetails
          include Google::Apis::Core::Hashable

          # Type of comparison. Possible values are LESS_THAN, GREATER_THAN, or EQUAL.
          # Corresponds to the JSON property `comparisonType`
          # @return [String]
          attr_accessor :comparison_type

          # Value used for this comparison.
          # Corresponds to the JSON property `comparisonValue`
          # @return [Fixnum]
          attr_accessor :comparison_value

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @comparison_type = args[:comparison_type] if args.key?(:comparison_type)
            @comparison_value = args[:comparison_value] if args.key?(:comparison_value)
          end
        end

        # Details for the goal of the type VISIT_TIME_ON_SITE.
        class VisitTimeOnSiteDetails
          include Google::Apis::Core::Hashable

          # Type of comparison. Possible values are LESS_THAN or GREATER_THAN.
          # Corresponds to the JSON property `comparisonType`
          # @return [String]
          attr_accessor :comparison_type

          # Value used for this comparison.
          # Corresponds to the JSON property `comparisonValue`
          # @return [Fixnum]
          attr_accessor :comparison_value

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @comparison_type = args[:comparison_type] if args.key?(:comparison_type)
            @comparison_value = args[:comparison_value] if args.key?(:comparison_value)
          end
        end
      end

      # A goal collection lists Analytics goals to which the user has access. Each
      # view (profile) can have a set of goals. Each resource in the Goal collection
      # corresponds to a single Analytics goal.
      class Goals
        include Google::Apis::Core::Hashable

        # A list of goals.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Goal>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this goal collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this goal collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of
        # resources in the result.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for a hash Client Id request resource.
      class HashClientIdRequest
        include Google::Apis::Core::Hashable

        #
        # Corresponds to the JSON property `clientId`
        # @return [String]
        attr_accessor :client_id

        #
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        #
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @client_id = args[:client_id] if args.key?(:client_id)
          @kind = args[:kind] if args.key?(:kind)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end
      end

      # JSON template for a hash Client Id response resource.
      class HashClientIdResponse
        include Google::Apis::Core::Hashable

        #
        # Corresponds to the JSON property `clientId`
        # @return [String]
        attr_accessor :client_id

        #
        # Corresponds to the JSON property `hashedClientId`
        # @return [String]
        attr_accessor :hashed_client_id

        #
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        #
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @client_id = args[:client_id] if args.key?(:client_id)
          @hashed_client_id = args[:hashed_client_id] if args.key?(:hashed_client_id)
          @kind = args[:kind] if args.key?(:kind)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end
      end

      # JSON template for an Analytics Remarketing Include Conditions.
      class IncludeConditions
        include Google::Apis::Core::Hashable

        # The look-back window lets you specify a time frame for evaluating the behavior
        # that qualifies users for your audience. For example, if your filters include
        # users from Central Asia, and Transactions Greater than 2, and you set the look-
        # back window to 14 days, then any user from Central Asia whose cumulative
        # transactions exceed 2 during the last 14 days is added to the audience.
        # Corresponds to the JSON property `daysToLookBack`
        # @return [Fixnum]
        attr_accessor :days_to_look_back

        # Boolean indicating whether this segment is a smart list. https://support.
        # google.com/analytics/answer/4628577
        # Corresponds to the JSON property `isSmartList`
        # @return [Boolean]
        attr_accessor :is_smart_list
        alias_method :is_smart_list?, :is_smart_list

        # Resource type for include conditions.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Number of days (in the range 1 to 540) a user remains in the audience.
        # Corresponds to the JSON property `membershipDurationDays`
        # @return [Fixnum]
        attr_accessor :membership_duration_days

        # The segment condition that will cause a user to be added to an audience.
        # Corresponds to the JSON property `segment`
        # @return [String]
        attr_accessor :segment

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @days_to_look_back = args[:days_to_look_back] if args.key?(:days_to_look_back)
          @is_smart_list = args[:is_smart_list] if args.key?(:is_smart_list)
          @kind = args[:kind] if args.key?(:kind)
          @membership_duration_days = args[:membership_duration_days] if args.key?(:membership_duration_days)
          @segment = args[:segment] if args.key?(:segment)
        end
      end

      # JSON template for an Analytics Remarketing Audience Foreign Link.
      class LinkedForeignAccount
        include Google::Apis::Core::Hashable

        # Account ID to which this linked foreign account belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Boolean indicating whether this is eligible for search.
        # Corresponds to the JSON property `eligibleForSearch`
        # @return [Boolean]
        attr_accessor :eligible_for_search
        alias_method :eligible_for_search?, :eligible_for_search

        # Entity ad account link ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this linked foreign account belongs.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for linked foreign account.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # The foreign account ID. For example the an Google Ads `linkedAccountId` has
        # the following format XXX-XXX-XXXX.
        # Corresponds to the JSON property `linkedAccountId`
        # @return [String]
        attr_accessor :linked_account_id

        # Remarketing audience ID to which this linked foreign account belongs.
        # Corresponds to the JSON property `remarketingAudienceId`
        # @return [String]
        attr_accessor :remarketing_audience_id

        # The status of this foreign account link.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status

        # The type of the foreign account. For example, `ADWORDS_LINKS`, `DBM_LINKS`, `
        # MCC_LINKS` or `OPTIMIZE`.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Web property ID of the form UA-XXXXX-YY to which this linked foreign account
        # belongs.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @eligible_for_search = args[:eligible_for_search] if args.key?(:eligible_for_search)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @linked_account_id = args[:linked_account_id] if args.key?(:linked_account_id)
          @remarketing_audience_id = args[:remarketing_audience_id] if args.key?(:remarketing_audience_id)
          @status = args[:status] if args.key?(:status)
          @type = args[:type] if args.key?(:type)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end
      end

      # Multi-Channel Funnels data for a given view (profile).
      class McfData
        include Google::Apis::Core::Hashable

        # Column headers that list dimension names followed by the metric names. The
        # order of dimensions and metrics is same as specified in the request.
        # Corresponds to the JSON property `columnHeaders`
        # @return [Array<Google::Apis::AnalyticsV3::McfData::ColumnHeader>]
        attr_accessor :column_headers

        # Determines if the Analytics data contains sampled data.
        # Corresponds to the JSON property `containsSampledData`
        # @return [Boolean]
        attr_accessor :contains_sampled_data
        alias_method :contains_sampled_data?, :contains_sampled_data

        # Unique ID for this data response.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # The maximum number of rows the response can contain, regardless of the actual
        # number of rows returned. Its value ranges from 1 to 10,000 with a value of
        # 1000 by default, or otherwise specified by the max-results query parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this Analytics data query.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this Analytics data query.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # Information for the view (profile), for which the Analytics data was requested.
        # Corresponds to the JSON property `profileInfo`
        # @return [Google::Apis::AnalyticsV3::McfData::ProfileInfo]
        attr_accessor :profile_info

        # Analytics data request query parameters.
        # Corresponds to the JSON property `query`
        # @return [Google::Apis::AnalyticsV3::McfData::Query]
        attr_accessor :query

        # Analytics data rows, where each row contains a list of dimension values
        # followed by the metric values. The order of dimensions and metrics is same as
        # specified in the request.
        # Corresponds to the JSON property `rows`
        # @return [Array<Array<Google::Apis::AnalyticsV3::McfData::Row>>]
        attr_accessor :rows

        # The number of samples used to calculate the result.
        # Corresponds to the JSON property `sampleSize`
        # @return [Fixnum]
        attr_accessor :sample_size

        # Total size of the sample space from which the samples were selected.
        # Corresponds to the JSON property `sampleSpace`
        # @return [Fixnum]
        attr_accessor :sample_space

        # Link to this page.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # The total number of rows for the query, regardless of the number of rows in
        # the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Total values for the requested metrics over all the results, not just the
        # results returned in this response. The order of the metric totals is same as
        # the metric order specified in the request.
        # Corresponds to the JSON property `totalsForAllResults`
        # @return [Hash<String,String>]
        attr_accessor :totals_for_all_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @column_headers = args[:column_headers] if args.key?(:column_headers)
          @contains_sampled_data = args[:contains_sampled_data] if args.key?(:contains_sampled_data)
          @id = args[:id] if args.key?(:id)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @profile_info = args[:profile_info] if args.key?(:profile_info)
          @query = args[:query] if args.key?(:query)
          @rows = args[:rows] if args.key?(:rows)
          @sample_size = args[:sample_size] if args.key?(:sample_size)
          @sample_space = args[:sample_space] if args.key?(:sample_space)
          @self_link = args[:self_link] if args.key?(:self_link)
          @total_results = args[:total_results] if args.key?(:total_results)
          @totals_for_all_results = args[:totals_for_all_results] if args.key?(:totals_for_all_results)
        end

        #
        class ColumnHeader
          include Google::Apis::Core::Hashable

          # Column Type. Either DIMENSION or METRIC.
          # Corresponds to the JSON property `columnType`
          # @return [String]
          attr_accessor :column_type

          # Data type. Dimension and metric values data types such as INTEGER, DOUBLE,
          # CURRENCY, MCF_SEQUENCE etc.
          # Corresponds to the JSON property `dataType`
          # @return [String]
          attr_accessor :data_type

          # Column name.
          # Corresponds to the JSON property `name`
          # @return [String]
          attr_accessor :name

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @column_type = args[:column_type] if args.key?(:column_type)
            @data_type = args[:data_type] if args.key?(:data_type)
            @name = args[:name] if args.key?(:name)
          end
        end

        # Information for the view (profile), for which the Analytics data was requested.
        class ProfileInfo
          include Google::Apis::Core::Hashable

          # Account ID to which this view (profile) belongs.
          # Corresponds to the JSON property `accountId`
          # @return [String]
          attr_accessor :account_id

          # Internal ID for the web property to which this view (profile) belongs.
          # Corresponds to the JSON property `internalWebPropertyId`
          # @return [String]
          attr_accessor :internal_web_property_id

          # View (Profile) ID.
          # Corresponds to the JSON property `profileId`
          # @return [String]
          attr_accessor :profile_id

          # View (Profile) name.
          # Corresponds to the JSON property `profileName`
          # @return [String]
          attr_accessor :profile_name

          # Table ID for view (profile).
          # Corresponds to the JSON property `tableId`
          # @return [String]
          attr_accessor :table_id

          # Web Property ID to which this view (profile) belongs.
          # Corresponds to the JSON property `webPropertyId`
          # @return [String]
          attr_accessor :web_property_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @account_id = args[:account_id] if args.key?(:account_id)
            @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
            @profile_id = args[:profile_id] if args.key?(:profile_id)
            @profile_name = args[:profile_name] if args.key?(:profile_name)
            @table_id = args[:table_id] if args.key?(:table_id)
            @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          end
        end

        # Analytics data request query parameters.
        class Query
          include Google::Apis::Core::Hashable

          # List of analytics dimensions.
          # Corresponds to the JSON property `dimensions`
          # @return [String]
          attr_accessor :dimensions

          # End date.
          # Corresponds to the JSON property `end-date`
          # @return [String]
          attr_accessor :end_date

          # Comma-separated list of dimension or metric filters.
          # Corresponds to the JSON property `filters`
          # @return [String]
          attr_accessor :filters

          # Unique table ID.
          # Corresponds to the JSON property `ids`
          # @return [String]
          attr_accessor :ids

          # Maximum results per page.
          # Corresponds to the JSON property `max-results`
          # @return [Fixnum]
          attr_accessor :max_results

          # List of analytics metrics.
          # Corresponds to the JSON property `metrics`
          # @return [Array<String>]
          attr_accessor :metrics

          # Desired sampling level
          # Corresponds to the JSON property `samplingLevel`
          # @return [String]
          attr_accessor :sampling_level

          # Analytics advanced segment.
          # Corresponds to the JSON property `segment`
          # @return [String]
          attr_accessor :segment

          # List of dimensions or metrics based on which Analytics data is sorted.
          # Corresponds to the JSON property `sort`
          # @return [Array<String>]
          attr_accessor :sort

          # Start date.
          # Corresponds to the JSON property `start-date`
          # @return [String]
          attr_accessor :start_date

          # Start index.
          # Corresponds to the JSON property `start-index`
          # @return [Fixnum]
          attr_accessor :start_index

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @dimensions = args[:dimensions] if args.key?(:dimensions)
            @end_date = args[:end_date] if args.key?(:end_date)
            @filters = args[:filters] if args.key?(:filters)
            @ids = args[:ids] if args.key?(:ids)
            @max_results = args[:max_results] if args.key?(:max_results)
            @metrics = args[:metrics] if args.key?(:metrics)
            @sampling_level = args[:sampling_level] if args.key?(:sampling_level)
            @segment = args[:segment] if args.key?(:segment)
            @sort = args[:sort] if args.key?(:sort)
            @start_date = args[:start_date] if args.key?(:start_date)
            @start_index = args[:start_index] if args.key?(:start_index)
          end
        end

        # A union object representing a dimension or metric value. Only one of "
        # primitiveValue" or "conversionPathValue" attribute will be populated.
        class Row
          include Google::Apis::Core::Hashable

          # A conversion path dimension value, containing a list of interactions with
          # their attributes.
          # Corresponds to the JSON property `conversionPathValue`
          # @return [Array<Google::Apis::AnalyticsV3::McfData::Row::ConversionPathValue>]
          attr_accessor :conversion_path_value

          # A primitive dimension value. A primitive metric value.
          # Corresponds to the JSON property `primitiveValue`
          # @return [String]
          attr_accessor :primitive_value

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @conversion_path_value = args[:conversion_path_value] if args.key?(:conversion_path_value)
            @primitive_value = args[:primitive_value] if args.key?(:primitive_value)
          end

          #
          class ConversionPathValue
            include Google::Apis::Core::Hashable

            # Type of an interaction on conversion path. Such as CLICK, IMPRESSION etc.
            # Corresponds to the JSON property `interactionType`
            # @return [String]
            attr_accessor :interaction_type

            # Node value of an interaction on conversion path. Such as source, medium etc.
            # Corresponds to the JSON property `nodeValue`
            # @return [String]
            attr_accessor :node_value

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @interaction_type = args[:interaction_type] if args.key?(:interaction_type)
              @node_value = args[:node_value] if args.key?(:node_value)
            end
          end
        end
      end

      # JSON template for an Analytics view (profile).
      class Profile
        include Google::Apis::Core::Hashable

        # Account ID to which this view (profile) belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Indicates whether bot filtering is enabled for this view (profile).
        # Corresponds to the JSON property `botFilteringEnabled`
        # @return [Boolean]
        attr_accessor :bot_filtering_enabled
        alias_method :bot_filtering_enabled?, :bot_filtering_enabled

        # Child link for this view (profile). Points to the list of goals for this view (
        # profile).
        # Corresponds to the JSON property `childLink`
        # @return [Google::Apis::AnalyticsV3::Profile::ChildLink]
        attr_accessor :child_link

        # Time this view (profile) was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # The currency type associated with this view (profile), defaults to USD. The
        # supported values are:
        # USD, JPY, EUR, GBP, AUD, KRW, BRL, CNY, DKK, RUB, SEK, NOK, PLN, TRY, TWD, HKD,
        # THB, IDR, ARS, MXN, VND, PHP, INR, CHF, CAD, CZK, NZD, HUF, BGN, LTL, ZAR,
        # UAH, AED, BOB, CLP, COP, EGP, HRK, ILS, MAD, MYR, PEN, PKR, RON, RSD, SAR, SGD,
        # VEF, LVL
        # Corresponds to the JSON property `currency`
        # @return [String]
        attr_accessor :currency

        # Default page for this view (profile).
        # Corresponds to the JSON property `defaultPage`
        # @return [String]
        attr_accessor :default_page

        # Indicates whether ecommerce tracking is enabled for this view (profile).
        # Corresponds to the JSON property `eCommerceTracking`
        # @return [Boolean]
        attr_accessor :e_commerce_tracking
        alias_method :e_commerce_tracking?, :e_commerce_tracking

        # Indicates whether enhanced ecommerce tracking is enabled for this view (
        # profile). This property can only be enabled if ecommerce tracking is enabled.
        # Corresponds to the JSON property `enhancedECommerceTracking`
        # @return [Boolean]
        attr_accessor :enhanced_e_commerce_tracking
        alias_method :enhanced_e_commerce_tracking?, :enhanced_e_commerce_tracking

        # The query parameters that are excluded from this view (profile).
        # Corresponds to the JSON property `excludeQueryParameters`
        # @return [String]
        attr_accessor :exclude_query_parameters

        # View (Profile) ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this view (profile) belongs.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for Analytics view (profile).
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of this view (profile).
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for this view (profile). Points to the web property to which this
        # view (profile) belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::Profile::ParentLink]
        attr_accessor :parent_link

        # Permissions the user has for this view (profile).
        # Corresponds to the JSON property `permissions`
        # @return [Google::Apis::AnalyticsV3::Profile::Permissions]
        attr_accessor :permissions

        # Link for this view (profile).
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Site search category parameters for this view (profile).
        # Corresponds to the JSON property `siteSearchCategoryParameters`
        # @return [String]
        attr_accessor :site_search_category_parameters

        # The site search query parameters for this view (profile).
        # Corresponds to the JSON property `siteSearchQueryParameters`
        # @return [String]
        attr_accessor :site_search_query_parameters

        # Indicates whether this view (profile) is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # Whether or not Analytics will strip search category parameters from the URLs
        # in your reports.
        # Corresponds to the JSON property `stripSiteSearchCategoryParameters`
        # @return [Boolean]
        attr_accessor :strip_site_search_category_parameters
        alias_method :strip_site_search_category_parameters?, :strip_site_search_category_parameters

        # Whether or not Analytics will strip search query parameters from the URLs in
        # your reports.
        # Corresponds to the JSON property `stripSiteSearchQueryParameters`
        # @return [Boolean]
        attr_accessor :strip_site_search_query_parameters
        alias_method :strip_site_search_query_parameters?, :strip_site_search_query_parameters

        # Time zone for which this view (profile) has been configured. Time zones are
        # identified by strings from the TZ database.
        # Corresponds to the JSON property `timezone`
        # @return [String]
        attr_accessor :timezone

        # View (Profile) type. Supported types: WEB or APP.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time this view (profile) was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        # Website URL for this view (profile).
        # Corresponds to the JSON property `websiteUrl`
        # @return [String]
        attr_accessor :website_url

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @bot_filtering_enabled = args[:bot_filtering_enabled] if args.key?(:bot_filtering_enabled)
          @child_link = args[:child_link] if args.key?(:child_link)
          @created = args[:created] if args.key?(:created)
          @currency = args[:currency] if args.key?(:currency)
          @default_page = args[:default_page] if args.key?(:default_page)
          @e_commerce_tracking = args[:e_commerce_tracking] if args.key?(:e_commerce_tracking)
          @enhanced_e_commerce_tracking = args[:enhanced_e_commerce_tracking] if args.key?(:enhanced_e_commerce_tracking)
          @exclude_query_parameters = args[:exclude_query_parameters] if args.key?(:exclude_query_parameters)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @permissions = args[:permissions] if args.key?(:permissions)
          @self_link = args[:self_link] if args.key?(:self_link)
          @site_search_category_parameters = args[:site_search_category_parameters] if args.key?(:site_search_category_parameters)
          @site_search_query_parameters = args[:site_search_query_parameters] if args.key?(:site_search_query_parameters)
          @starred = args[:starred] if args.key?(:starred)
          @strip_site_search_category_parameters = args[:strip_site_search_category_parameters] if args.key?(:strip_site_search_category_parameters)
          @strip_site_search_query_parameters = args[:strip_site_search_query_parameters] if args.key?(:strip_site_search_query_parameters)
          @timezone = args[:timezone] if args.key?(:timezone)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          @website_url = args[:website_url] if args.key?(:website_url)
        end

        # Child link for this view (profile). Points to the list of goals for this view (
        # profile).
        class ChildLink
          include Google::Apis::Core::Hashable

          # Link to the list of goals for this view (profile).
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#goals".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Parent link for this view (profile). Points to the web property to which this
        # view (profile) belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the web property to which this view (profile) belongs.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Value is "analytics#webproperty".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Permissions the user has for this view (profile).
        class Permissions
          include Google::Apis::Core::Hashable

          # All the permissions that the user has for this view (profile). These include
          # any implied permissions (e.g., EDIT implies VIEW) or inherited permissions
          # from the parent web property.
          # Corresponds to the JSON property `effective`
          # @return [Array<String>]
          attr_accessor :effective

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @effective = args[:effective] if args.key?(:effective)
          end
        end
      end

      # JSON template for an Analytics profile filter link.
      class ProfileFilterLink
        include Google::Apis::Core::Hashable

        # JSON template for a profile filter link.
        # Corresponds to the JSON property `filterRef`
        # @return [Google::Apis::AnalyticsV3::FilterRef]
        attr_accessor :filter_ref

        # Profile filter link ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics filter.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # JSON template for a linked view (profile).
        # Corresponds to the JSON property `profileRef`
        # @return [Google::Apis::AnalyticsV3::ProfileRef]
        attr_accessor :profile_ref

        # The rank of this profile filter link relative to the other filters linked to
        # the same profile.
        # For readonly (i.e., list and get) operations, the rank always starts at 1.
        # For write (i.e., create, update, or delete) operations, you may specify a
        # value between 0 and 255 inclusively, [0, 255]. In order to insert a link at
        # the end of the list, either don't specify a rank or set a rank to a number
        # greater than the largest rank in the list. In order to insert a link to the
        # beginning of the list specify a rank that is less than or equal to 1. The new
        # link will move all existing filters with the same or lower rank down the list.
        # After the link is inserted/updated/deleted all profile filter links will be
        # renumbered starting at 1.
        # Corresponds to the JSON property `rank`
        # @return [Fixnum]
        attr_accessor :rank

        # Link for this profile filter link.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @filter_ref = args[:filter_ref] if args.key?(:filter_ref)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @profile_ref = args[:profile_ref] if args.key?(:profile_ref)
          @rank = args[:rank] if args.key?(:rank)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end

      # A profile filter link collection lists profile filter links between profiles
      # and filters. Each resource in the collection corresponds to a profile filter
      # link.
      class ProfileFilterLinks
        include Google::Apis::Core::Hashable

        # A list of profile filter links.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::ProfileFilterLink>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1,000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this profile filter link collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this profile filter link collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for a linked view (profile).
      class ProfileRef
        include Google::Apis::Core::Hashable

        # Account ID to which this view (profile) belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Link for this view (profile).
        # Corresponds to the JSON property `href`
        # @return [String]
        attr_accessor :href

        # View (Profile) ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this view (profile) belongs.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Analytics view (profile) reference.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of this view (profile).
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @href = args[:href] if args.key?(:href)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end
      end

      # JSON template for an Analytics ProfileSummary. ProfileSummary returns basic
      # information (i.e., summary) for a profile.
      class ProfileSummary
        include Google::Apis::Core::Hashable

        # View (profile) ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics ProfileSummary.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # View (profile) name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Indicates whether this view (profile) is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # View (Profile) type. Supported types: WEB or APP.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @starred = args[:starred] if args.key?(:starred)
          @type = args[:type] if args.key?(:type)
        end
      end

      # A view (profile) collection lists Analytics views (profiles) to which the user
      # has access. Each resource in the collection corresponds to a single Analytics
      # view (profile).
      class Profiles
        include Google::Apis::Core::Hashable

        # A list of views (profiles).
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Profile>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this view (profile) collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this view (profile) collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # Real time data for a given view (profile).
      class RealtimeData
        include Google::Apis::Core::Hashable

        # Column headers that list dimension names followed by the metric names. The
        # order of dimensions and metrics is same as specified in the request.
        # Corresponds to the JSON property `columnHeaders`
        # @return [Array<Google::Apis::AnalyticsV3::RealtimeData::ColumnHeader>]
        attr_accessor :column_headers

        # Unique ID for this data response.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Information for the view (profile), for which the real time data was requested.
        # Corresponds to the JSON property `profileInfo`
        # @return [Google::Apis::AnalyticsV3::RealtimeData::ProfileInfo]
        attr_accessor :profile_info

        # Real time data request query parameters.
        # Corresponds to the JSON property `query`
        # @return [Google::Apis::AnalyticsV3::RealtimeData::Query]
        attr_accessor :query

        # Real time data rows, where each row contains a list of dimension values
        # followed by the metric values. The order of dimensions and metrics is same as
        # specified in the request.
        # Corresponds to the JSON property `rows`
        # @return [Array<Array<String>>]
        attr_accessor :rows

        # Link to this page.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # The total number of rows for the query, regardless of the number of rows in
        # the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Total values for the requested metrics over all the results, not just the
        # results returned in this response. The order of the metric totals is same as
        # the metric order specified in the request.
        # Corresponds to the JSON property `totalsForAllResults`
        # @return [Hash<String,String>]
        attr_accessor :totals_for_all_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @column_headers = args[:column_headers] if args.key?(:column_headers)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @profile_info = args[:profile_info] if args.key?(:profile_info)
          @query = args[:query] if args.key?(:query)
          @rows = args[:rows] if args.key?(:rows)
          @self_link = args[:self_link] if args.key?(:self_link)
          @total_results = args[:total_results] if args.key?(:total_results)
          @totals_for_all_results = args[:totals_for_all_results] if args.key?(:totals_for_all_results)
        end

        #
        class ColumnHeader
          include Google::Apis::Core::Hashable

          # Column Type. Either DIMENSION or METRIC.
          # Corresponds to the JSON property `columnType`
          # @return [String]
          attr_accessor :column_type

          # Data type. Dimension column headers have only STRING as the data type. Metric
          # column headers have data types for metric values such as INTEGER, DOUBLE,
          # CURRENCY etc.
          # Corresponds to the JSON property `dataType`
          # @return [String]
          attr_accessor :data_type

          # Column name.
          # Corresponds to the JSON property `name`
          # @return [String]
          attr_accessor :name

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @column_type = args[:column_type] if args.key?(:column_type)
            @data_type = args[:data_type] if args.key?(:data_type)
            @name = args[:name] if args.key?(:name)
          end
        end

        # Information for the view (profile), for which the real time data was requested.
        class ProfileInfo
          include Google::Apis::Core::Hashable

          # Account ID to which this view (profile) belongs.
          # Corresponds to the JSON property `accountId`
          # @return [String]
          attr_accessor :account_id

          # Internal ID for the web property to which this view (profile) belongs.
          # Corresponds to the JSON property `internalWebPropertyId`
          # @return [String]
          attr_accessor :internal_web_property_id

          # View (Profile) ID.
          # Corresponds to the JSON property `profileId`
          # @return [String]
          attr_accessor :profile_id

          # View (Profile) name.
          # Corresponds to the JSON property `profileName`
          # @return [String]
          attr_accessor :profile_name

          # Table ID for view (profile).
          # Corresponds to the JSON property `tableId`
          # @return [String]
          attr_accessor :table_id

          # Web Property ID to which this view (profile) belongs.
          # Corresponds to the JSON property `webPropertyId`
          # @return [String]
          attr_accessor :web_property_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @account_id = args[:account_id] if args.key?(:account_id)
            @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
            @profile_id = args[:profile_id] if args.key?(:profile_id)
            @profile_name = args[:profile_name] if args.key?(:profile_name)
            @table_id = args[:table_id] if args.key?(:table_id)
            @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
          end
        end

        # Real time data request query parameters.
        class Query
          include Google::Apis::Core::Hashable

          # List of real time dimensions.
          # Corresponds to the JSON property `dimensions`
          # @return [String]
          attr_accessor :dimensions

          # Comma-separated list of dimension or metric filters.
          # Corresponds to the JSON property `filters`
          # @return [String]
          attr_accessor :filters

          # Unique table ID.
          # Corresponds to the JSON property `ids`
          # @return [String]
          attr_accessor :ids

          # Maximum results per page.
          # Corresponds to the JSON property `max-results`
          # @return [Fixnum]
          attr_accessor :max_results

          # List of real time metrics.
          # Corresponds to the JSON property `metrics`
          # @return [Array<String>]
          attr_accessor :metrics

          # List of dimensions or metrics based on which real time data is sorted.
          # Corresponds to the JSON property `sort`
          # @return [Array<String>]
          attr_accessor :sort

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @dimensions = args[:dimensions] if args.key?(:dimensions)
            @filters = args[:filters] if args.key?(:filters)
            @ids = args[:ids] if args.key?(:ids)
            @max_results = args[:max_results] if args.key?(:max_results)
            @metrics = args[:metrics] if args.key?(:metrics)
            @sort = args[:sort] if args.key?(:sort)
          end
        end
      end

      # JSON template for an Analytics remarketing audience.
      class RemarketingAudience
        include Google::Apis::Core::Hashable

        # Account ID to which this remarketing audience belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # The simple audience definition that will cause a user to be added to an
        # audience.
        # Corresponds to the JSON property `audienceDefinition`
        # @return [Google::Apis::AnalyticsV3::RemarketingAudience::AudienceDefinition]
        attr_accessor :audience_definition

        # The type of audience, either SIMPLE or STATE_BASED.
        # Corresponds to the JSON property `audienceType`
        # @return [String]
        attr_accessor :audience_type

        # Time this remarketing audience was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # The description of this remarketing audience.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description

        # Remarketing Audience ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for the web property to which this remarketing audience belongs.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # The linked ad accounts associated with this remarketing audience. A
        # remarketing audience can have only one linkedAdAccount currently.
        # Corresponds to the JSON property `linkedAdAccounts`
        # @return [Array<Google::Apis::AnalyticsV3::LinkedForeignAccount>]
        attr_accessor :linked_ad_accounts

        # The views (profiles) that this remarketing audience is linked to.
        # Corresponds to the JSON property `linkedViews`
        # @return [Array<String>]
        attr_accessor :linked_views

        # The name of this remarketing audience.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # A state based audience definition that will cause a user to be added or
        # removed from an audience.
        # Corresponds to the JSON property `stateBasedAudienceDefinition`
        # @return [Google::Apis::AnalyticsV3::RemarketingAudience::StateBasedAudienceDefinition]
        attr_accessor :state_based_audience_definition

        # Time this remarketing audience was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Web property ID of the form UA-XXXXX-YY to which this remarketing audience
        # belongs.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @audience_definition = args[:audience_definition] if args.key?(:audience_definition)
          @audience_type = args[:audience_type] if args.key?(:audience_type)
          @created = args[:created] if args.key?(:created)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @linked_ad_accounts = args[:linked_ad_accounts] if args.key?(:linked_ad_accounts)
          @linked_views = args[:linked_views] if args.key?(:linked_views)
          @name = args[:name] if args.key?(:name)
          @state_based_audience_definition = args[:state_based_audience_definition] if args.key?(:state_based_audience_definition)
          @updated = args[:updated] if args.key?(:updated)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # The simple audience definition that will cause a user to be added to an
        # audience.
        class AudienceDefinition
          include Google::Apis::Core::Hashable

          # JSON template for an Analytics Remarketing Include Conditions.
          # Corresponds to the JSON property `includeConditions`
          # @return [Google::Apis::AnalyticsV3::IncludeConditions]
          attr_accessor :include_conditions

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @include_conditions = args[:include_conditions] if args.key?(:include_conditions)
          end
        end

        # A state based audience definition that will cause a user to be added or
        # removed from an audience.
        class StateBasedAudienceDefinition
          include Google::Apis::Core::Hashable

          # Defines the conditions to exclude users from the audience.
          # Corresponds to the JSON property `excludeConditions`
          # @return [Google::Apis::AnalyticsV3::RemarketingAudience::StateBasedAudienceDefinition::ExcludeConditions]
          attr_accessor :exclude_conditions

          # JSON template for an Analytics Remarketing Include Conditions.
          # Corresponds to the JSON property `includeConditions`
          # @return [Google::Apis::AnalyticsV3::IncludeConditions]
          attr_accessor :include_conditions

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @exclude_conditions = args[:exclude_conditions] if args.key?(:exclude_conditions)
            @include_conditions = args[:include_conditions] if args.key?(:include_conditions)
          end

          # Defines the conditions to exclude users from the audience.
          class ExcludeConditions
            include Google::Apis::Core::Hashable

            # Whether to make the exclusion TEMPORARY or PERMANENT.
            # Corresponds to the JSON property `exclusionDuration`
            # @return [String]
            attr_accessor :exclusion_duration

            # The segment condition that will cause a user to be removed from an audience.
            # Corresponds to the JSON property `segment`
            # @return [String]
            attr_accessor :segment

            def initialize(**args)
               update!(**args)
            end

            # Update properties of this object
            def update!(**args)
              @exclusion_duration = args[:exclusion_duration] if args.key?(:exclusion_duration)
              @segment = args[:segment] if args.key?(:segment)
            end
          end
        end
      end

      # A remarketing audience collection lists Analytics remarketing audiences to
      # which the user has access. Each resource in the collection corresponds to a
      # single Analytics remarketing audience.
      class RemarketingAudiences
        include Google::Apis::Core::Hashable

        # A list of remarketing audiences.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::RemarketingAudience>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this remarketing audience collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this view (profile) collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for an Analytics segment.
      class Segment
        include Google::Apis::Core::Hashable

        # Time the segment was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Segment definition.
        # Corresponds to the JSON property `definition`
        # @return [String]
        attr_accessor :definition

        # Segment ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics segment.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Segment name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Segment ID. Can be used with the 'segment' parameter in Core Reporting API.
        # Corresponds to the JSON property `segmentId`
        # @return [String]
        attr_accessor :segment_id

        # Link for this segment.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Type for a segment. Possible values are "BUILT_IN" or "CUSTOM".
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type

        # Time the segment was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @created = args[:created] if args.key?(:created)
          @definition = args[:definition] if args.key?(:definition)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @segment_id = args[:segment_id] if args.key?(:segment_id)
          @self_link = args[:self_link] if args.key?(:self_link)
          @type = args[:type] if args.key?(:type)
          @updated = args[:updated] if args.key?(:updated)
        end
      end

      # An segment collection lists Analytics segments that the user has access to.
      # Each resource in the collection corresponds to a single Analytics segment.
      class Segments
        include Google::Apis::Core::Hashable

        # A list of segments.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Segment>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type for segments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this segment collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this segment collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for Analytics unsampled report resource.
      class UnsampledReport
        include Google::Apis::Core::Hashable

        # Account ID to which this unsampled report belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Download details for a file stored in Google Cloud Storage.
        # Corresponds to the JSON property `cloudStorageDownloadDetails`
        # @return [Google::Apis::AnalyticsV3::UnsampledReport::CloudStorageDownloadDetails]
        attr_accessor :cloud_storage_download_details

        # Time this unsampled report was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # The dimensions for the unsampled report.
        # Corresponds to the JSON property `dimensions`
        # @return [String]
        attr_accessor :dimensions

        # The type of download you need to use for the report data file. Possible values
        # include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `
        # GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `
        # GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.
        # Corresponds to the JSON property `downloadType`
        # @return [String]
        attr_accessor :download_type

        # Download details for a file stored in Google Drive.
        # Corresponds to the JSON property `driveDownloadDetails`
        # @return [Google::Apis::AnalyticsV3::UnsampledReport::DriveDownloadDetails]
        attr_accessor :drive_download_details

        # The end date for the unsampled report.
        # Corresponds to the JSON property `end-date`
        # @return [String]
        attr_accessor :end_date

        # The filters for the unsampled report.
        # Corresponds to the JSON property `filters`
        # @return [String]
        attr_accessor :filters

        # Unsampled report ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for an Analytics unsampled report.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # The metrics for the unsampled report.
        # Corresponds to the JSON property `metrics`
        # @return [String]
        attr_accessor :metrics

        # View (Profile) ID to which this unsampled report belongs.
        # Corresponds to the JSON property `profileId`
        # @return [String]
        attr_accessor :profile_id

        # The segment for the unsampled report.
        # Corresponds to the JSON property `segment`
        # @return [String]
        attr_accessor :segment

        # Link for this unsampled report.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # The start date for the unsampled report.
        # Corresponds to the JSON property `start-date`
        # @return [String]
        attr_accessor :start_date

        # Status of this unsampled report. Possible values are PENDING, COMPLETED, or
        # FAILED.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status

        # Title of the unsampled report.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title

        # Time this unsampled report was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Web property ID to which this unsampled report belongs. The web property ID is
        # of the form UA-XXXXX-YY.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @cloud_storage_download_details = args[:cloud_storage_download_details] if args.key?(:cloud_storage_download_details)
          @created = args[:created] if args.key?(:created)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @download_type = args[:download_type] if args.key?(:download_type)
          @drive_download_details = args[:drive_download_details] if args.key?(:drive_download_details)
          @end_date = args[:end_date] if args.key?(:end_date)
          @filters = args[:filters] if args.key?(:filters)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @metrics = args[:metrics] if args.key?(:metrics)
          @profile_id = args[:profile_id] if args.key?(:profile_id)
          @segment = args[:segment] if args.key?(:segment)
          @self_link = args[:self_link] if args.key?(:self_link)
          @start_date = args[:start_date] if args.key?(:start_date)
          @status = args[:status] if args.key?(:status)
          @title = args[:title] if args.key?(:title)
          @updated = args[:updated] if args.key?(:updated)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # Download details for a file stored in Google Cloud Storage.
        class CloudStorageDownloadDetails
          include Google::Apis::Core::Hashable

          # Id of the bucket the file object is stored in.
          # Corresponds to the JSON property `bucketId`
          # @return [String]
          attr_accessor :bucket_id

          # Id of the file object containing the report data.
          # Corresponds to the JSON property `objectId`
          # @return [String]
          attr_accessor :obj_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @bucket_id = args[:bucket_id] if args.key?(:bucket_id)
            @obj_id = args[:obj_id] if args.key?(:obj_id)
          end
        end

        # Download details for a file stored in Google Drive.
        class DriveDownloadDetails
          include Google::Apis::Core::Hashable

          # Id of the document/file containing the report data.
          # Corresponds to the JSON property `documentId`
          # @return [String]
          attr_accessor :document_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @document_id = args[:document_id] if args.key?(:document_id)
          end
        end
      end

      # An unsampled report collection lists Analytics unsampled reports to which the
      # user has access. Each view (profile) can have a set of unsampled reports. Each
      # resource in the unsampled report collection corresponds to a single Analytics
      # unsampled report.
      class UnsampledReports
        include Google::Apis::Core::Hashable

        # A list of unsampled reports.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::UnsampledReport>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this unsampled report collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this unsampled report collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of
        # resources in the result.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # Metadata returned for an upload operation.
      class Upload
        include Google::Apis::Core::Hashable

        # Account Id to which this upload belongs.
        # Corresponds to the JSON property `accountId`
        # @return [Fixnum]
        attr_accessor :account_id

        # Custom data source Id to which this data import belongs.
        # Corresponds to the JSON property `customDataSourceId`
        # @return [String]
        attr_accessor :custom_data_source_id

        # Data import errors collection.
        # Corresponds to the JSON property `errors`
        # @return [Array<String>]
        attr_accessor :errors

        # A unique ID for this upload.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Resource type for Analytics upload.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status

        # Time this file is uploaded.
        # Corresponds to the JSON property `uploadTime`
        # @return [DateTime]
        attr_accessor :upload_time

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @custom_data_source_id = args[:custom_data_source_id] if args.key?(:custom_data_source_id)
          @errors = args[:errors] if args.key?(:errors)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @status = args[:status] if args.key?(:status)
          @upload_time = args[:upload_time] if args.key?(:upload_time)
        end
      end

      # Upload collection lists Analytics uploads to which the user has access. Each
      # custom data source can have a set of uploads. Each resource in the upload
      # collection corresponds to a single Analytics data upload.
      class Uploads
        include Google::Apis::Core::Hashable

        # A list of uploads.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Upload>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this upload collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this upload collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of
        # resources in the result.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
        end
      end

      # JSON template for a user deletion request resource.
      class UserDeletionRequest
        include Google::Apis::Core::Hashable

        # This marks the point in time for which all user data before should be deleted
        # Corresponds to the JSON property `deletionRequestTime`
        # @return [DateTime]
        attr_accessor :deletion_request_time

        # Firebase Project Id
        # Corresponds to the JSON property `firebaseProjectId`
        # @return [String]
        attr_accessor :firebase_project_id

        # User ID.
        # Corresponds to the JSON property `id`
        # @return [Google::Apis::AnalyticsV3::UserDeletionRequest::Id]
        attr_accessor :id

        # Value is "analytics#userDeletionRequest".
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Property ID
        # Corresponds to the JSON property `propertyId`
        # @return [String]
        attr_accessor :property_id

        # Web property ID of the form UA-XXXXX-YY.
        # Corresponds to the JSON property `webPropertyId`
        # @return [String]
        attr_accessor :web_property_id

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @deletion_request_time = args[:deletion_request_time] if args.key?(:deletion_request_time)
          @firebase_project_id = args[:firebase_project_id] if args.key?(:firebase_project_id)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @property_id = args[:property_id] if args.key?(:property_id)
          @web_property_id = args[:web_property_id] if args.key?(:web_property_id)
        end

        # User ID.
        class Id
          include Google::Apis::Core::Hashable

          # Type of user
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          # The User's id
          # Corresponds to the JSON property `userId`
          # @return [String]
          attr_accessor :user_id

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @type = args[:type] if args.key?(:type)
            @user_id = args[:user_id] if args.key?(:user_id)
          end
        end
      end

      # JSON template for a user reference.
      class UserRef
        include Google::Apis::Core::Hashable

        # Email ID of this user.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email

        # User ID.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        #
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
        end
      end

      # JSON template for a web property reference.
      class WebPropertyRef
        include Google::Apis::Core::Hashable

        # Account ID to which this web property belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Link for this web property.
        # Corresponds to the JSON property `href`
        # @return [String]
        attr_accessor :href

        # Web property ID of the form UA-XXXXX-YY.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for this web property.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Analytics web property reference.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Name of this web property.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @href = args[:href] if args.key?(:href)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
        end
      end

      # JSON template for an Analytics WebPropertySummary. WebPropertySummary returns
      # basic information (i.e., summary) for a web property.
      class WebPropertySummary
        include Google::Apis::Core::Hashable

        # Web property ID of the form UA-XXXXX-YY.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # Internal ID for this web property.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for Analytics WebPropertySummary.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Level for this web property. Possible values are STANDARD or PREMIUM.
        # Corresponds to the JSON property `level`
        # @return [String]
        attr_accessor :level

        # Web property name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # List of profiles under this web property.
        # Corresponds to the JSON property `profiles`
        # @return [Array<Google::Apis::AnalyticsV3::ProfileSummary>]
        attr_accessor :profiles

        # Indicates whether this web property is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # Website url for this web property.
        # Corresponds to the JSON property `websiteUrl`
        # @return [String]
        attr_accessor :website_url

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @level = args[:level] if args.key?(:level)
          @name = args[:name] if args.key?(:name)
          @profiles = args[:profiles] if args.key?(:profiles)
          @starred = args[:starred] if args.key?(:starred)
          @website_url = args[:website_url] if args.key?(:website_url)
        end
      end

      # A web property collection lists Analytics web properties to which the user has
      # access. Each resource in the collection corresponds to a single Analytics web
      # property.
      class Webproperties
        include Google::Apis::Core::Hashable

        # A list of web properties.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::AnalyticsV3::Webproperty>]
        attr_accessor :items

        # The maximum number of resources the response can contain, regardless of the
        # actual number of resources returned. Its value ranges from 1 to 1000 with a
        # value of 1000 by default, or otherwise specified by the max-results query
        # parameter.
        # Corresponds to the JSON property `itemsPerPage`
        # @return [Fixnum]
        attr_accessor :items_per_page

        # Collection type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Link to next page for this web property collection.
        # Corresponds to the JSON property `nextLink`
        # @return [String]
        attr_accessor :next_link

        # Link to previous page for this web property collection.
        # Corresponds to the JSON property `previousLink`
        # @return [String]
        attr_accessor :previous_link

        # The starting index of the resources, which is 1 by default or otherwise
        # specified by the start-index query parameter.
        # Corresponds to the JSON property `startIndex`
        # @return [Fixnum]
        attr_accessor :start_index

        # The total number of results for the query, regardless of the number of results
        # in the response.
        # Corresponds to the JSON property `totalResults`
        # @return [Fixnum]
        attr_accessor :total_results

        # Email ID of the authenticated user
        # Corresponds to the JSON property `username`
        # @return [String]
        attr_accessor :username

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @items_per_page = args[:items_per_page] if args.key?(:items_per_page)
          @kind = args[:kind] if args.key?(:kind)
          @next_link = args[:next_link] if args.key?(:next_link)
          @previous_link = args[:previous_link] if args.key?(:previous_link)
          @start_index = args[:start_index] if args.key?(:start_index)
          @total_results = args[:total_results] if args.key?(:total_results)
          @username = args[:username] if args.key?(:username)
        end
      end

      # JSON template for an Analytics web property.
      class Webproperty
        include Google::Apis::Core::Hashable

        # Account ID to which this web property belongs.
        # Corresponds to the JSON property `accountId`
        # @return [String]
        attr_accessor :account_id

        # Child link for this web property. Points to the list of views (profiles) for
        # this web property.
        # Corresponds to the JSON property `childLink`
        # @return [Google::Apis::AnalyticsV3::Webproperty::ChildLink]
        attr_accessor :child_link

        # Time this web property was created.
        # Corresponds to the JSON property `created`
        # @return [DateTime]
        attr_accessor :created

        # Set to true to reset the retention period of the user identifier with each new
        # event from that user (thus setting the expiration date to current time plus
        # retention period).
        # Set to false to delete data associated with the user identifier automatically
        # after the rentention period.
        # This property cannot be set on insert.
        # Corresponds to the JSON property `dataRetentionResetOnNewActivity`
        # @return [Boolean]
        attr_accessor :data_retention_reset_on_new_activity
        alias_method :data_retention_reset_on_new_activity?, :data_retention_reset_on_new_activity

        # The length of time for which user and event data is retained.
        # This property cannot be set on insert.
        # Corresponds to the JSON property `dataRetentionTtl`
        # @return [String]
        attr_accessor :data_retention_ttl

        # Default view (profile) ID.
        # Corresponds to the JSON property `defaultProfileId`
        # @return [Fixnum]
        attr_accessor :default_profile_id

        # Web property ID of the form UA-XXXXX-YY.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id

        # The industry vertical/category selected for this web property.
        # Corresponds to the JSON property `industryVertical`
        # @return [String]
        attr_accessor :industry_vertical

        # Internal ID for this web property.
        # Corresponds to the JSON property `internalWebPropertyId`
        # @return [String]
        attr_accessor :internal_web_property_id

        # Resource type for Analytics WebProperty.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind

        # Level for this web property. Possible values are STANDARD or PREMIUM.
        # Corresponds to the JSON property `level`
        # @return [String]
        attr_accessor :level

        # Name of this web property.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name

        # Parent link for this web property. Points to the account to which this web
        # property belongs.
        # Corresponds to the JSON property `parentLink`
        # @return [Google::Apis::AnalyticsV3::Webproperty::ParentLink]
        attr_accessor :parent_link

        # Permissions the user has for this web property.
        # Corresponds to the JSON property `permissions`
        # @return [Google::Apis::AnalyticsV3::Webproperty::Permissions]
        attr_accessor :permissions

        # View (Profile) count for this web property.
        # Corresponds to the JSON property `profileCount`
        # @return [Fixnum]
        attr_accessor :profile_count

        # Link for this web property.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link

        # Indicates whether this web property is starred or not.
        # Corresponds to the JSON property `starred`
        # @return [Boolean]
        attr_accessor :starred
        alias_method :starred?, :starred

        # Time this web property was last modified.
        # Corresponds to the JSON property `updated`
        # @return [DateTime]
        attr_accessor :updated

        # Website url for this web property.
        # Corresponds to the JSON property `websiteUrl`
        # @return [String]
        attr_accessor :website_url

        def initialize(**args)
           update!(**args)
        end

        # Update properties of this object
        def update!(**args)
          @account_id = args[:account_id] if args.key?(:account_id)
          @child_link = args[:child_link] if args.key?(:child_link)
          @created = args[:created] if args.key?(:created)
          @data_retention_reset_on_new_activity = args[:data_retention_reset_on_new_activity] if args.key?(:data_retention_reset_on_new_activity)
          @data_retention_ttl = args[:data_retention_ttl] if args.key?(:data_retention_ttl)
          @default_profile_id = args[:default_profile_id] if args.key?(:default_profile_id)
          @id = args[:id] if args.key?(:id)
          @industry_vertical = args[:industry_vertical] if args.key?(:industry_vertical)
          @internal_web_property_id = args[:internal_web_property_id] if args.key?(:internal_web_property_id)
          @kind = args[:kind] if args.key?(:kind)
          @level = args[:level] if args.key?(:level)
          @name = args[:name] if args.key?(:name)
          @parent_link = args[:parent_link] if args.key?(:parent_link)
          @permissions = args[:permissions] if args.key?(:permissions)
          @profile_count = args[:profile_count] if args.key?(:profile_count)
          @self_link = args[:self_link] if args.key?(:self_link)
          @starred = args[:starred] if args.key?(:starred)
          @updated = args[:updated] if args.key?(:updated)
          @website_url = args[:website_url] if args.key?(:website_url)
        end

        # Child link for this web property. Points to the list of views (profiles) for
        # this web property.
        class ChildLink
          include Google::Apis::Core::Hashable

          # Link to the list of views (profiles) for this web property.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Type of the parent link. Its value is "analytics#profiles".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Parent link for this web property. Points to the account to which this web
        # property belongs.
        class ParentLink
          include Google::Apis::Core::Hashable

          # Link to the account for this web property.
          # Corresponds to the JSON property `href`
          # @return [String]
          attr_accessor :href

          # Type of the parent link. Its value is "analytics#account".
          # Corresponds to the JSON property `type`
          # @return [String]
          attr_accessor :type

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @href = args[:href] if args.key?(:href)
            @type = args[:type] if args.key?(:type)
          end
        end

        # Permissions the user has for this web property.
        class Permissions
          include Google::Apis::Core::Hashable

          # All the permissions that the user has for this web property. These include any
          # implied permissions (e.g., EDIT implies VIEW) or inherited permissions from
          # the parent account.
          # Corresponds to the JSON property `effective`
          # @return [Array<String>]
          attr_accessor :effective

          def initialize(**args)
             update!(**args)
          end

          # Update properties of this object
          def update!(**args)
            @effective = args[:effective] if args.key?(:effective)
          end
        end
      end
    end
  end
end