{
  "protocol": "rest",
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "version_module": true,
  "kind": "discovery#restDescription",
  "title": "Google Ads API",
  "description": "Manage your Google Ads accounts, campaigns, and reports with this API.",
  "id": "googleads:v21",
  "canonicalName": "GoogleAds",
  "version": "v21",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "revision": "20250805",
  "rootUrl": "https://googleads.googleapis.com/",
  "discoveryVersion": "v1",
  "resources": {
    "customers": {
      "methods": {
        "generateInsightsFinderReport": {
          "id": "googleads.customers.generateInsightsFinderReport",
          "path": "v21/customers/{+customerId}:generateInsightsFinderReport",
          "flatPath": "v21/customers/{customersId}:generateInsightsFinderReport",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Creates a saved report that can be viewed in the Insights Finder tool. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "searchAudienceInsightsAttributes": {
          "id": "googleads.customers.searchAudienceInsightsAttributes",
          "path": "v21/customers/{+customerId}:searchAudienceInsightsAttributes",
          "flatPath": "v21/customers/{customersId}:searchAudienceInsightsAttributes",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Searches for audience attributes that can be used to generate insights. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "generateAudienceCompositionInsights": {
          "id": "googleads.customers.generateAudienceCompositionInsights",
          "path": "v21/customers/{+customerId}:generateAudienceCompositionInsights",
          "flatPath": "v21/customers/{customersId}:generateAudienceCompositionInsights",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a collection of attributes that are represented in an audience of interest, with metrics that compare each attribute's share of the audience with its share of a baseline audience. List of thrown errors: [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "generateSuggestedTargetingInsights": {
          "id": "googleads.customers.generateSuggestedTargetingInsights",
          "path": "v21/customers/{+customerId}:generateSuggestedTargetingInsights",
          "flatPath": "v21/customers/{customersId}:generateSuggestedTargetingInsights",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a collection of targeting insights (e.g. targetable audiences) that are relevant to the requested audience. List of thrown errors: [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "generateAudienceOverlapInsights": {
          "id": "googleads.customers.generateAudienceOverlapInsights",
          "path": "v21/customers/{+customerId}:generateAudienceOverlapInsights",
          "flatPath": "v21/customers/{customersId}:generateAudienceOverlapInsights",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a collection of audience attributes along with estimates of the overlap between their potential YouTube reach and that of a given input attribute. List of thrown errors: [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "generateTargetingSuggestionMetrics": {
          "id": "googleads.customers.generateTargetingSuggestionMetrics",
          "path": "v21/customers/{+customerId}:generateTargetingSuggestionMetrics",
          "flatPath": "v21/customers/{customersId}:generateTargetingSuggestionMetrics",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns potential reach metrics for targetable audiences. This method helps answer questions like \"How many Men aged 18+ interested in Camping can be reached on YouTube?\" List of thrown errors: [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "removeCampaignAutomaticallyCreatedAsset": {
          "id": "googleads.customers.removeCampaignAutomaticallyCreatedAsset",
          "path": "v21/customers/{+customerId}:removeCampaignAutomaticallyCreatedAsset",
          "flatPath": "v21/customers/{customersId}:removeCampaignAutomaticallyCreatedAsset",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer whose assets are being removed.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Removes automatically created assets from a campaign. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ContextError]() [FieldError]() [InternalError]() [MutateError]() [PartialFailureError]() [QuotaError]() [RequestError]()"
        },
        "mutate": {
          "id": "googleads.customers.mutate",
          "path": "v21/customers/{+customerId}:mutate",
          "flatPath": "v21/customers/{customersId}:mutate",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer being modified.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Updates a customer. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldMaskError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]() [UrlFieldError]()"
        },
        "listAccessibleCustomers": {
          "id": "googleads.customers.listAccessibleCustomers",
          "path": "v21/customers:listAccessibleCustomers",
          "flatPath": "v21/customers:listAccessibleCustomers",
          "httpMethod": "GET",
          "parameters": {},
          "parameterOrder": [],
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListAccessibleCustomersResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns resource names of customers directly accessible by the user authenticating the call. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "createCustomerClient": {
          "id": "googleads.customers.createCustomerClient",
          "path": "v21/customers/{+customerId}:createCustomerClient",
          "flatPath": "v21/customers/{customersId}:createCustomerClient",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the Manager under whom client customer is being created.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__CreateCustomerClientRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__CreateCustomerClientResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Creates a new client under manager. The new client customer is returned. List of thrown errors: [AccessInvitationError]() [AuthenticationError]() [AuthorizationError]() [CurrencyCodeError]() [HeaderError]() [InternalError]() [ManagerLinkError]() [QuotaError]() [RequestError]() [StringLengthError]() [TimeZoneError]()"
        },
        "suggestBrands": {
          "id": "googleads.customers.suggestBrands",
          "path": "v21/customers/{+customerId}:suggestBrands",
          "flatPath": "v21/customers/{customersId}:suggestBrands",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer onto which to apply the brand suggestion operation.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestBrandsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestBrandsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Rpc to return a list of matching brands based on a prefix for this customer."
        },
        "generateCreatorInsights": {
          "id": "googleads.customers.generateCreatorInsights",
          "path": "v21/customers/{+customerId}:generateCreatorInsights",
          "flatPath": "v21/customers/{customersId}:generateCreatorInsights",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns insights for a collection of YouTube Creators and Channels. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "generateTrendingInsights": {
          "id": "googleads.customers.generateTrendingInsights",
          "path": "v21/customers/{+customerId}:generateTrendingInsights",
          "flatPath": "v21/customers/{customersId}:generateTrendingInsights",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns insights for trending content on YouTube. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        },
        "uploadConversionAdjustments": {
          "id": "googleads.customers.uploadConversionAdjustments",
          "path": "v21/customers/{+customerId}:uploadConversionAdjustments",
          "flatPath": "v21/customers/{customersId}:uploadConversionAdjustments",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer performing the upload.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Processes the given conversion adjustments. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [PartialFailureError]() [QuotaError]() [RequestError]()"
        },
        "uploadClickConversions": {
          "id": "googleads.customers.uploadClickConversions",
          "path": "v21/customers/{+customerId}:uploadClickConversions",
          "flatPath": "v21/customers/{customersId}:uploadClickConversions",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer performing the upload.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadClickConversionsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadClickConversionsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Processes the given click conversions. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ConversionUploadError]() [HeaderError]() [InternalError]() [PartialFailureError]() [QuotaError]() [RequestError]()"
        },
        "uploadCallConversions": {
          "id": "googleads.customers.uploadCallConversions",
          "path": "v21/customers/{+customerId}:uploadCallConversions",
          "flatPath": "v21/customers/{customersId}:uploadCallConversions",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer performing the upload.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadCallConversionsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadCallConversionsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Processes the given call conversions. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [PartialFailureError]() [QuotaError]() [RequestError]()"
        },
        "startIdentityVerification": {
          "id": "googleads.customers.startIdentityVerification",
          "path": "v21/customers/{+customerId}:startIdentityVerification",
          "flatPath": "v21/customers/{customersId}:startIdentityVerification",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The Id of the customer for whom we are creating this verification.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__StartIdentityVerificationRequest"
          },
          "response": {
            "$ref": "GoogleProtobuf__Empty"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Starts Identity Verification for a given verification program type. Statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "getIdentityVerification": {
          "id": "googleads.customers.getIdentityVerification",
          "path": "v21/customers/{+customerId}/getIdentityVerification",
          "flatPath": "v21/customers/{customersId}/getIdentityVerification",
          "httpMethod": "GET",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer for whom we are requesting verification information.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GetIdentityVerificationResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns Identity Verification information. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "generateKeywordIdeas": {
          "id": "googleads.customers.generateKeywordIdeas",
          "path": "v21/customers/{+customerId}:generateKeywordIdeas",
          "flatPath": "v21/customers/{customersId}:generateKeywordIdeas",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "The ID of the customer with the recommendation.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeasRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a list of keyword ideas. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [HeaderError]() [InternalError]() [KeywordPlanIdeaError]() [QuotaError]() [RequestError]()"
        },
        "generateKeywordHistoricalMetrics": {
          "id": "googleads.customers.generateKeywordHistoricalMetrics",
          "path": "v21/customers/{+customerId}:generateKeywordHistoricalMetrics",
          "flatPath": "v21/customers/{customersId}:generateKeywordHistoricalMetrics",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "The ID of the customer with the recommendation.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a list of keyword historical metrics. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "generateAdGroupThemes": {
          "id": "googleads.customers.generateAdGroupThemes",
          "path": "v21/customers/{+customerId}:generateAdGroupThemes",
          "flatPath": "v21/customers/{customersId}:generateAdGroupThemes",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a list of suggested AdGroups and suggested modifications (text, match type) for the given keywords. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "generateKeywordForecastMetrics": {
          "id": "googleads.customers.generateKeywordForecastMetrics",
          "path": "v21/customers/{+customerId}:generateKeywordForecastMetrics",
          "flatPath": "v21/customers/{customersId}:generateKeywordForecastMetrics",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns metrics (such as impressions, clicks, total cost) of a keyword forecast for the given campaign. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "generateReachForecast": {
          "id": "googleads.customers.generateReachForecast",
          "path": "v21/customers/{+customerId}:generateReachForecast",
          "flatPath": "v21/customers/{customersId}:generateReachForecast",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateReachForecastRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateReachForecastResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Generates a reach forecast for a given targeting / product mix. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [ReachPlanError]() [RequestError]()"
        },
        "generateShareablePreviews": {
          "id": "googleads.customers.generateShareablePreviews",
          "path": "v21/customers/{+customerId}:generateShareablePreviews",
          "flatPath": "v21/customers/{customersId}:generateShareablePreviews",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The customer creating the shareable previews request.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns the requested Shareable Preview."
        },
        "suggestSmartCampaignBudgetOptions": {
          "id": "googleads.customers.suggestSmartCampaignBudgetOptions",
          "path": "v21/customers/{+customerId}:suggestSmartCampaignBudgetOptions",
          "flatPath": "v21/customers/{customersId}:suggestSmartCampaignBudgetOptions",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer whose budget options are to be suggested.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns BudgetOption suggestions."
        },
        "suggestSmartCampaignAd": {
          "id": "googleads.customers.suggestSmartCampaignAd",
          "path": "v21/customers/{+customerId}:suggestSmartCampaignAd",
          "flatPath": "v21/customers/{customersId}:suggestSmartCampaignAd",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Suggests a Smart campaign ad compatible with the Ad family of resources, based on data points such as targeting and the business to advertise."
        },
        "suggestKeywordThemes": {
          "id": "googleads.customers.suggestKeywordThemes",
          "path": "v21/customers/{+customerId}:suggestKeywordThemes",
          "flatPath": "v21/customers/{customersId}:suggestKeywordThemes",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Suggests keyword themes to advertise on."
        },
        "suggestTravelAssets": {
          "id": "googleads.customers.suggestTravelAssets",
          "path": "v21/customers/{+customerId}:suggestTravelAssets",
          "flatPath": "v21/customers/{customersId}:suggestTravelAssets",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns Travel Asset suggestions. Asset suggestions are returned on a best-effort basis. There are no guarantees that all possible asset types will be returned for any given hotel property."
        },
        "uploadUserData": {
          "id": "googleads.customers.uploadUserData",
          "path": "v21/customers/{+customerId}:uploadUserData",
          "flatPath": "v21/customers/{customersId}:uploadUserData",
          "httpMethod": "POST",
          "parameters": {
            "customerId": {
              "description": "Required. The ID of the customer for which to update the user data.",
              "pattern": "^[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "customerId"
          ],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadUserDataRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__UploadUserDataResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Uploads the given user data. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [OfflineUserDataJobError]() [QuotaError]() [RequestError]() [UserDataError]()"
        }
      },
      "resources": {
        "operations": {
          "methods": {
            "list": {
              "id": "googleads.customers.operations.list",
              "path": "v21/{+name}",
              "flatPath": "v21/customers/{customersId}/operations",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "The name of the operation's parent resource.",
                  "pattern": "^customers/[^/]+/operations$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "filter": {
                  "description": "The standard list filter.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "The standard list page size.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "The standard list page token.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleLongrunning__ListOperationsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`."
            },
            "get": {
              "id": "googleads.customers.operations.get",
              "path": "v21/{+name}",
              "flatPath": "v21/customers/{customersId}/operations/{operationsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "The name of the operation resource.",
                  "pattern": "^customers/[^/]+/operations/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
            },
            "delete": {
              "id": "googleads.customers.operations.delete",
              "path": "v21/{+name}",
              "flatPath": "v21/customers/{customersId}/operations/{operationsId}",
              "httpMethod": "DELETE",
              "parameters": {
                "name": {
                  "description": "The name of the operation resource to be deleted.",
                  "pattern": "^customers/[^/]+/operations/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleProtobuf__Empty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`."
            },
            "cancel": {
              "id": "googleads.customers.operations.cancel",
              "path": "v21/{+name}:cancel",
              "flatPath": "v21/customers/{customersId}/operations/{operationsId}:cancel",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the operation resource to be cancelled.",
                  "pattern": "^customers/[^/]+/operations/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "GoogleLongrunning__CancelOperationRequest"
              },
              "response": {
                "$ref": "GoogleProtobuf__Empty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`."
            },
            "wait": {
              "id": "googleads.customers.operations.wait",
              "path": "v21/{+name}:wait",
              "flatPath": "v21/customers/{customersId}/operations/{operationsId}:wait",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the operation resource to wait on.",
                  "pattern": "^customers/[^/]+/operations/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "GoogleLongrunning__WaitOperationRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done."
            }
          }
        },
        "accountBudgetProposals": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.accountBudgetProposals.mutate",
              "path": "v21/customers/{+customerId}/accountBudgetProposals:mutate",
              "flatPath": "v21/customers/{customersId}/accountBudgetProposals:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes account budget proposals. Operation statuses are returned. List of thrown errors: [AccountBudgetProposalError]() [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DateError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]() [StringLengthError]()"
            }
          }
        },
        "accountLinks": {
          "methods": {
            "create": {
              "id": "googleads.customers.accountLinks.create",
              "path": "v21/customers/{+customerId}/accountLinks:create",
              "flatPath": "v21/customers/{customersId}/accountLinks:create",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which the account link is created.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateAccountLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateAccountLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates an account link. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]() [ThirdPartyAppAnalyticsLinkError]()"
            },
            "mutate": {
              "id": "googleads.customers.accountLinks.mutate",
              "path": "v21/customers/{+customerId}/accountLinks:mutate",
              "flatPath": "v21/customers/{customersId}/accountLinks:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes an account link. From V5, create is not supported through AccountLinkService.MutateAccountLink. Use AccountLinkService.CreateAccountLink instead. List of thrown errors: [AccountLinkError]() [AuthenticationError]() [AuthorizationError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroupAdLabels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupAdLabels.mutate",
              "path": "v21/customers/{+customerId}/adGroupAdLabels:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupAdLabels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose ad group ad labels are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates and removes ad group ad labels. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [HeaderError]() [InternalError]() [LabelError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroupAds": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupAds.mutate",
              "path": "v21/customers/{+customerId}/adGroupAds:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupAds:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ads are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes ads. Operation statuses are returned. List of thrown errors: [AdCustomizerError]() [AdError]() [AdGroupAdError]() [AdSharingError]() [AdxError]() [AssetError]() [AssetLinkError]() [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [ContextError]() [DatabaseError]() [DateError]() [DistinctError]() [FeedAttributeReferenceError]() [FieldError]() [FieldMaskError]() [FunctionError]() [FunctionParsingError]() [HeaderError]() [IdError]() [ImageError]() [InternalError]() [ListOperationError]() [MediaBundleError]() [MediaFileError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [PolicyFindingError]() [PolicyValidationParameterError]() [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]()"
            },
            "removeAutomaticallyCreatedAssets": {
              "id": "googleads.customers.adGroupAds.removeAutomaticallyCreatedAssets",
              "path": "v21/{+adGroupAd}:removeAutomaticallyCreatedAssets",
              "flatPath": "v21/customers/{customersId}/adGroupAds/{adGroupAdsId}:removeAutomaticallyCreatedAssets",
              "httpMethod": "POST",
              "parameters": {
                "adGroupAd": {
                  "description": "Required. The resource name of the AdGroupAd from which to remove automatically created assets.",
                  "pattern": "^customers/[^/]+/adGroupAds/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "adGroupAd"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveAutomaticallyCreatedAssetsRequest"
              },
              "response": {
                "$ref": "GoogleProtobuf__Empty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Remove automatically created assets from an ad. List of thrown errors: [AdError]() [AuthenticationError]() [AuthorizationError]() [AutomaticallyCreatedAssetRemovalError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroupAssets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupAssets.mutate",
              "path": "v21/customers/{+customerId}/adGroupAssets:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupAssets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad group assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes ad group assets. Operation statuses are returned. List of thrown errors: [AssetLinkError]() [AuthenticationError]() [AuthorizationError]() [ContextError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [NotAllowlistedError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroupAssetSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupAssetSets.mutate",
              "path": "v21/customers/{+customerId}/adGroupAssetSets:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupAssetSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad group asset sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, or removes ad group asset sets. Operation statuses are returned."
            }
          }
        },
        "adGroupBidModifiers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupBidModifiers.mutate",
              "path": "v21/customers/{+customerId}/adGroupBidModifiers:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupBidModifiers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose ad group bid modifiers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes ad group bid modifiers. Operation statuses are returned. List of thrown errors: [AdGroupBidModifierError]() [AuthenticationError]() [AuthorizationError]() [ContextError]() [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "AdGroupCriterionCustomizers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.AdGroupCriterionCustomizers.mutate",
              "path": "v21/customers/{+customerId}/AdGroupCriterionCustomizers:mutate",
              "flatPath": "v21/customers/{customersId}/AdGroupCriterionCustomizers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad group criterion customizers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes ad group criterion customizers. Operation statuses are returned."
            }
          }
        },
        "adGroupCriterionLabels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupCriterionLabels.mutate",
              "path": "v21/customers/{+customerId}/adGroupCriterionLabels:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupCriterionLabels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose ad group criterion labels are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates and removes ad group criterion labels. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroupCriteria": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupCriteria.mutate",
              "path": "v21/customers/{+customerId}/adGroupCriteria:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupCriteria:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose criteria are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes criteria. Operation statuses are returned. List of thrown errors: [AdGroupCriterionError]() [AdxError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [BiddingStrategyError]() [CollectionSizeError]() [ContextError]() [CriterionError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [MultiplierError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]()"
            }
          }
        },
        "adGroupCustomizers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupCustomizers.mutate",
              "path": "v21/customers/{+customerId}/adGroupCustomizers:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupCustomizers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad group customizers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes ad group customizers. Operation statuses are returned."
            }
          }
        },
        "adGroupLabels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroupLabels.mutate",
              "path": "v21/customers/{+customerId}/adGroupLabels:mutate",
              "flatPath": "v21/customers/{customersId}/adGroupLabels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose ad group labels are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates and removes ad group labels. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [LabelError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "adGroups": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adGroups.mutate",
              "path": "v21/customers/{+customerId}/adGroups:mutate",
              "flatPath": "v21/customers/{customersId}/adGroups:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad groups are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes ad groups. Operation statuses are returned. List of thrown errors: [AdGroupError]() [AdxError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [BiddingStrategyError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [ListOperationError]() [MultiplierError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SettingError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]()"
            }
          }
        },
        "adParameters": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.adParameters.mutate",
              "path": "v21/customers/{+customerId}/adParameters:mutate",
              "flatPath": "v21/customers/{customersId}/adParameters:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ad parameters are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdParametersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdParametersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes ad parameters. Operation statuses are returned. List of thrown errors: [AdParameterError]() [AuthenticationError]() [AuthorizationError]() [ContextError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "ads": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.ads.mutate",
              "path": "v21/customers/{+customerId}/ads:mutate",
              "flatPath": "v21/customers/{customersId}/ads:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose ads are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAdsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Updates ads. Operation statuses are returned. Updating ads is not supported for TextAd, ExpandedDynamicSearchAd, GmailAd and ImageAd. List of thrown errors: [AdCustomizerError]() [AdError]() [AdSharingError]() [AdxError]() [AssetError]() [AssetLinkError]() [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [DatabaseError]() [DateError]() [DistinctError]() [FeedAttributeReferenceError]() [FieldError]() [FieldMaskError]() [FunctionError]() [FunctionParsingError]() [HeaderError]() [IdError]() [ImageError]() [InternalError]() [ListOperationError]() [MediaBundleError]() [MediaFileError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperatorError]() [PolicyFindingError]() [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]()"
            }
          }
        },
        "assetGroupAssets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetGroupAssets.mutate",
              "path": "v21/customers/{+customerId}/assetGroupAssets:mutate",
              "flatPath": "v21/customers/{customersId}/assetGroupAssets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset group assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes asset group assets. Operation statuses are returned."
            }
          }
        },
        "assetGroupListingGroupFilters": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetGroupListingGroupFilters.mutate",
              "path": "v21/customers/{+customerId}/assetGroupListingGroupFilters:mutate",
              "flatPath": "v21/customers/{customersId}/assetGroupListingGroupFilters:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset group listing group filters are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes asset group listing group filters. Operation statuses are returned."
            }
          }
        },
        "assetGroups": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetGroups.mutate",
              "path": "v21/customers/{+customerId}/assetGroups:mutate",
              "flatPath": "v21/customers/{customersId}/assetGroups:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset groups are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes asset groups. Operation statuses are returned."
            }
          }
        },
        "assetGroupSignals": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetGroupSignals.mutate",
              "path": "v21/customers/{+customerId}/assetGroupSignals:mutate",
              "flatPath": "v21/customers/{customersId}/assetGroupSignals:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset group signals are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes asset group signals. Operation statuses are returned."
            }
          }
        },
        "assets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assets.mutate",
              "path": "v21/customers/{+customerId}/assets:mutate",
              "flatPath": "v21/customers/{customersId}/assets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates assets. Operation statuses are returned. List of thrown errors: [AssetError]() [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [CurrencyCodeError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [ListOperationError]() [MediaUploadError]() [MutateError]() [NotAllowlistedError]() [NotEmptyError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]() [YoutubeVideoRegistrationError]()"
            }
          }
        },
        "assetSetAssets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetSetAssets.mutate",
              "path": "v21/customers/{+customerId}/assetSetAssets:mutate",
              "flatPath": "v21/customers/{customersId}/assetSetAssets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset set assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes asset set assets. Operation statuses are returned."
            }
          }
        },
        "assetSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.assetSets.mutate",
              "path": "v21/customers/{+customerId}/assetSets:mutate",
              "flatPath": "v21/customers/{customersId}/assetSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose asset sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes asset sets. Operation statuses are returned."
            }
          }
        },
        "audiences": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.audiences.mutate",
              "path": "v21/customers/{+customerId}/audiences:mutate",
              "flatPath": "v21/customers/{customersId}/audiences:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose audiences are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAudiencesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateAudiencesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates audiences. Operation statuses are returned. List of thrown errors: [AudienceError]()"
            }
          }
        },
        "biddingDataExclusions": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.biddingDataExclusions.mutate",
              "path": "v21/customers/{+customerId}/biddingDataExclusions:mutate",
              "flatPath": "v21/customers/{customersId}/biddingDataExclusions:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose data exclusions are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes data exclusions. Operation statuses are returned."
            }
          }
        },
        "biddingSeasonalityAdjustments": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.biddingSeasonalityAdjustments.mutate",
              "path": "v21/customers/{+customerId}/biddingSeasonalityAdjustments:mutate",
              "flatPath": "v21/customers/{customersId}/biddingSeasonalityAdjustments:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose seasonality adjustments are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes seasonality adjustments. Operation statuses are returned."
            }
          }
        },
        "biddingStrategies": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.biddingStrategies.mutate",
              "path": "v21/customers/{+customerId}/biddingStrategies:mutate",
              "flatPath": "v21/customers/{customersId}/biddingStrategies:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose bidding strategies are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes bidding strategies. Operation statuses are returned. List of thrown errors: [AdxError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [BiddingStrategyError]() [ContextError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "campaignAssets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignAssets.mutate",
              "path": "v21/customers/{+customerId}/campaignAssets:mutate",
              "flatPath": "v21/customers/{customersId}/campaignAssets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaign assets. Operation statuses are returned. List of thrown errors: [AssetLinkError]() [AuthenticationError]() [AuthorizationError]() [ContextError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [NotAllowlistedError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "campaignAssetSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignAssetSets.mutate",
              "path": "v21/customers/{+customerId}/campaignAssetSets:mutate",
              "flatPath": "v21/customers/{customersId}/campaignAssetSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign asset sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes campaign asset sets. Operation statuses are returned."
            }
          }
        },
        "campaignBidModifiers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignBidModifiers.mutate",
              "path": "v21/customers/{+customerId}/campaignBidModifiers:mutate",
              "flatPath": "v21/customers/{customersId}/campaignBidModifiers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose campaign bid modifiers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaign bid modifiers. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ContextError]() [CriterionError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "campaignBudgets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignBudgets.mutate",
              "path": "v21/customers/{+customerId}/campaignBudgets:mutate",
              "flatPath": "v21/customers/{customersId}/campaignBudgets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign budgets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaign budgets. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CampaignBudgetError]() [DatabaseError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [OperationAccessDeniedError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [StringLengthError]()"
            }
          }
        },
        "campaignConversionGoals": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignConversionGoals.mutate",
              "path": "v21/customers/{+customerId}/campaignConversionGoals:mutate",
              "flatPath": "v21/customers/{customersId}/campaignConversionGoals:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign conversion goals are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes campaign conversion goals. Operation statuses are returned."
            }
          }
        },
        "campaignCriteria": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignCriteria.mutate",
              "path": "v21/customers/{+customerId}/campaignCriteria:mutate",
              "flatPath": "v21/customers/{customersId}/campaignCriteria:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose criteria are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes criteria. Operation statuses are returned. List of thrown errors: [AdxError]() [AuthenticationError]() [AuthorizationError]() [CampaignCriterionError]() [CollectionSizeError]() [ContextError]() [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]() [FieldMaskError]() [FunctionError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [QuotaError]() [RangeError]() [RegionCodeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "campaignCustomizers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignCustomizers.mutate",
              "path": "v21/customers/{+customerId}/campaignCustomizers:mutate",
              "flatPath": "v21/customers/{customersId}/campaignCustomizers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign customizers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes campaign customizers. Operation statuses are returned."
            }
          }
        },
        "campaignDrafts": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignDrafts.mutate",
              "path": "v21/customers/{+customerId}/campaignDrafts:mutate",
              "flatPath": "v21/customers/{customersId}/campaignDrafts:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign drafts are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaign drafts. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CampaignDraftError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "promote": {
              "id": "googleads.customers.campaignDrafts.promote",
              "path": "v21/{+campaignDraft}:promote",
              "flatPath": "v21/customers/{customersId}/campaignDrafts/{campaignDraftsId}:promote",
              "httpMethod": "POST",
              "parameters": {
                "campaignDraft": {
                  "description": "Required. The resource name of the campaign draft to promote.",
                  "pattern": "^customers/[^/]+/campaignDrafts/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "campaignDraft"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__PromoteCampaignDraftRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Promotes the changes in a draft back to the base campaign. This method returns a Long Running Operation (LRO) indicating if the Promote is done. Use [Operations.GetOperation] to poll the LRO until it is done. Only a done status is returned in the response. See the status in the Campaign Draft resource to determine if the promotion was successful. If the LRO failed, use CampaignDraftService.ListCampaignDraftAsyncErrors to view the list of error reasons. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CampaignDraftError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "listAsyncErrors": {
              "id": "googleads.customers.campaignDrafts.listAsyncErrors",
              "path": "v21/{+resourceName}:listAsyncErrors",
              "flatPath": "v21/customers/{customersId}/campaignDrafts/{campaignDraftsId}:listAsyncErrors",
              "httpMethod": "GET",
              "parameters": {
                "resourceName": {
                  "description": "Required. The name of the campaign draft from which to retrieve the async errors.",
                  "pattern": "^customers/[^/]+/campaignDrafts/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageToken": {
                  "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from `next_page_token` in the previous response in order to request the next page of results.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "Number of elements to retrieve in a single page. When a page request is too large, the server may decide to further limit the number of returned resources.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ListCampaignDraftAsyncErrorsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all errors that occurred during CampaignDraft promote. Throws an error if called before campaign draft is promoted. Supports standard list paging. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "campaignGroups": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignGroups.mutate",
              "path": "v21/customers/{+customerId}/campaignGroups:mutate",
              "flatPath": "v21/customers/{customersId}/campaignGroups:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign groups are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaign groups. Operation statuses are returned."
            }
          }
        },
        "campaignLabels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignLabels.mutate",
              "path": "v21/customers/{+customerId}/campaignLabels:mutate",
              "flatPath": "v21/customers/{customersId}/campaignLabels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose campaign-label relationships are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates and removes campaign-label relationships. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [LabelError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "campaigns": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaigns.mutate",
              "path": "v21/customers/{+customerId}/campaigns:mutate",
              "flatPath": "v21/customers/{customersId}/campaigns:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaigns are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes campaigns. Operation statuses are returned. List of thrown errors: [AdxError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [BiddingStrategyError]() [CampaignBudgetError]() [CampaignError]() [ContextError]() [DatabaseError]() [DateError]() [DateRangeError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [ListOperationError]() [MutateError]() [NewResourceCreationError]() [NotAllowlistedError]() [NotEmptyError]() [NullError]() [OperationAccessDeniedError]() [OperatorError]() [QuotaError]() [RangeError]() [RegionCodeError]() [RequestError]() [ResourceCountLimitExceededError]() [SettingError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]()"
            },
            "enablePMaxBrandGuidelines": {
              "id": "googleads.customers.campaigns.enablePMaxBrandGuidelines",
              "path": "v21/customers/{+customerId}/campaigns:enablePMaxBrandGuidelines",
              "flatPath": "v21/customers/{customersId}/campaigns:enablePMaxBrandGuidelines",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaigns are being enabled.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Enables Brand Guidelines for Performance Max campaigns. List of thrown errors: [AuthenticationError]() [AssetError]() [AssetLinkError]() [AuthorizationError]() [BrandGuidelinesMigrationError]() [CampaignError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "campaignSharedSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.campaignSharedSets.mutate",
              "path": "v21/customers/{+customerId}/campaignSharedSets:mutate",
              "flatPath": "v21/customers/{customersId}/campaignSharedSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign shared sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes campaign shared sets. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CampaignSharedSetError]() [ContextError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "conversionActions": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.conversionActions.mutate",
              "path": "v21/customers/{+customerId}/conversionActions:mutate",
              "flatPath": "v21/customers/{customersId}/conversionActions:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose conversion actions are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionActionsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionActionsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes conversion actions. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ConversionActionError]() [CurrencyCodeError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [StringLengthError]()"
            }
          }
        },
        "conversionCustomVariables": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.conversionCustomVariables.mutate",
              "path": "v21/customers/{+customerId}/conversionCustomVariables:mutate",
              "flatPath": "v21/customers/{customersId}/conversionCustomVariables:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose conversion custom variables are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates conversion custom variables. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ConversionCustomVariableError]() [DatabaseError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "conversionGoalCampaignConfigs": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.conversionGoalCampaignConfigs.mutate",
              "path": "v21/customers/{+customerId}/conversionGoalCampaignConfigs:mutate",
              "flatPath": "v21/customers/{customersId}/conversionGoalCampaignConfigs:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose custom conversion goals are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes conversion goal campaign config. Operation statuses are returned."
            }
          }
        },
        "conversionValueRules": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.conversionValueRules.mutate",
              "path": "v21/customers/{+customerId}/conversionValueRules:mutate",
              "flatPath": "v21/customers/{customersId}/conversionValueRules:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose conversion value rules are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes conversion value rules. Operation statuses are returned."
            }
          }
        },
        "conversionValueRuleSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.conversionValueRuleSets.mutate",
              "path": "v21/customers/{+customerId}/conversionValueRuleSets:mutate",
              "flatPath": "v21/customers/{customersId}/conversionValueRuleSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose conversion value rule sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes conversion value rule sets. Operation statuses are returned."
            }
          }
        },
        "customConversionGoals": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customConversionGoals.mutate",
              "path": "v21/customers/{+customerId}/customConversionGoals:mutate",
              "flatPath": "v21/customers/{customersId}/customConversionGoals:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose custom conversion goals are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes custom conversion goals. Operation statuses are returned."
            }
          }
        },
        "customerAssets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerAssets.mutate",
              "path": "v21/customers/{+customerId}/customerAssets:mutate",
              "flatPath": "v21/customers/{customersId}/customerAssets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer assets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes customer assets. Operation statuses are returned. List of thrown errors: [AssetLinkError]() [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerConversionGoals": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerConversionGoals.mutate",
              "path": "v21/customers/{+customerId}/customerConversionGoals:mutate",
              "flatPath": "v21/customers/{customersId}/customerConversionGoals:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer conversion goals are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes customer conversion goals. Operation statuses are returned."
            }
          }
        },
        "CustomerCustomizers": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.CustomerCustomizers.mutate",
              "path": "v21/customers/{+customerId}/CustomerCustomizers:mutate",
              "flatPath": "v21/customers/{customersId}/CustomerCustomizers:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer customizers are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes customer customizers. Operation statuses are returned."
            }
          }
        },
        "customerLabels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerLabels.mutate",
              "path": "v21/customers/{+customerId}/customerLabels:mutate",
              "flatPath": "v21/customers/{customersId}/customerLabels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose customer-label relationships are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates and removes customer-label relationships. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [HeaderError]() [InternalError]() [LabelError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerNegativeCriteria": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerNegativeCriteria.mutate",
              "path": "v21/customers/{+customerId}/customerNegativeCriteria:mutate",
              "flatPath": "v21/customers/{customersId}/customerNegativeCriteria:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose criteria are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes criteria. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CriterionError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customizerAttributes": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customizerAttributes.mutate",
              "path": "v21/customers/{+customerId}/customizerAttributes:mutate",
              "flatPath": "v21/customers/{customersId}/customizerAttributes:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customizer attributes are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates or removes customizer attributes. Operation statuses are returned."
            }
          }
        },
        "experimentArms": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.experimentArms.mutate",
              "path": "v21/customers/{+customerId}/experimentArms:mutate",
              "flatPath": "v21/customers/{customersId}/experimentArms:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose experiments are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentArmsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentArmsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes experiment arms. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentArmError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "experiments": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.experiments.mutate",
              "path": "v21/customers/{+customerId}/experiments:mutate",
              "flatPath": "v21/customers/{customersId}/experiments:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose experiments are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes experiments. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "endExperiment": {
              "id": "googleads.customers.experiments.endExperiment",
              "path": "v21/{+experiment}:endExperiment",
              "flatPath": "v21/customers/{customersId}/experiments/{experimentsId}:endExperiment",
              "httpMethod": "POST",
              "parameters": {
                "experiment": {
                  "description": "Required. The resource name of the campaign experiment to end.",
                  "pattern": "^customers/[^/]+/experiments/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "experiment"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__EndExperimentRequest"
              },
              "response": {
                "$ref": "GoogleProtobuf__Empty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Immediately ends an experiment, changing the experiment's scheduled end date and without waiting for end of day. End date is updated to be the time of the request. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "listExperimentAsyncErrors": {
              "id": "googleads.customers.experiments.listExperimentAsyncErrors",
              "path": "v21/{+resourceName}:listExperimentAsyncErrors",
              "flatPath": "v21/customers/{customersId}/experiments/{experimentsId}:listExperimentAsyncErrors",
              "httpMethod": "GET",
              "parameters": {
                "resourceName": {
                  "description": "Required. The name of the experiment from which to retrieve the async errors.",
                  "pattern": "^customers/[^/]+/experiments/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageToken": {
                  "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from `next_page_token` in the previous response in order to request the next page of results.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "Number of elements to retrieve in a single page. When a page request is too large, the server may decide to further limit the number of returned resources. The maximum page size is 1000.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ListExperimentAsyncErrorsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all errors that occurred during the last Experiment update (either scheduling or promotion). Supports standard list paging. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "graduateExperiment": {
              "id": "googleads.customers.experiments.graduateExperiment",
              "path": "v21/{+experiment}:graduateExperiment",
              "flatPath": "v21/customers/{customersId}/experiments/{experimentsId}:graduateExperiment",
              "httpMethod": "POST",
              "parameters": {
                "experiment": {
                  "description": "Required. The experiment to be graduated.",
                  "pattern": "^customers/[^/]+/experiments/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "experiment"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__GraduateExperimentRequest"
              },
              "response": {
                "$ref": "GoogleProtobuf__Empty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Graduates an experiment to a full campaign. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "scheduleExperiment": {
              "id": "googleads.customers.experiments.scheduleExperiment",
              "path": "v21/{+resourceName}:scheduleExperiment",
              "flatPath": "v21/customers/{customersId}/experiments/{experimentsId}:scheduleExperiment",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The scheduled experiment.",
                  "pattern": "^customers/[^/]+/experiments/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__ScheduleExperimentRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Schedule an experiment. The in design campaign will be converted into a real campaign (called the experiment campaign) that will begin serving ads if successfully created. The experiment is scheduled immediately with status INITIALIZING. This method returns a long running operation that tracks the forking of the in design campaign. If the forking fails, a list of errors can be retrieved using the ListExperimentAsyncErrors method. The operation's metadata will be a string containing the resource name of the created experiment. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [DatabaseError]() [DateError]() [DateRangeError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
            },
            "promoteExperiment": {
              "id": "googleads.customers.experiments.promoteExperiment",
              "path": "v21/{+resourceName}:promoteExperiment",
              "flatPath": "v21/customers/{customersId}/experiments/{experimentsId}:promoteExperiment",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the experiment to promote.",
                  "pattern": "^customers/[^/]+/experiments/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__PromoteExperimentRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Promotes the trial campaign thus applying changes in the trial campaign to the base campaign. This method returns a long running operation that tracks the promotion of the experiment campaign. If it fails, a list of errors can be retrieved using the ListExperimentAsyncErrors method. The operation's metadata will be a string containing the resource name of the created experiment. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ExperimentError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "keywordPlanAdGroupKeywords": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.keywordPlanAdGroupKeywords.mutate",
              "path": "v21/customers/{+customerId}/keywordPlanAdGroupKeywords:mutate",
              "flatPath": "v21/customers/{customersId}/keywordPlanAdGroupKeywords:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose Keyword Plan ad group keywords are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes Keyword Plan ad group keywords. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [KeywordPlanAdGroupKeywordError]() [KeywordPlanError]() [MutateError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "keywordPlanAdGroups": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.keywordPlanAdGroups.mutate",
              "path": "v21/customers/{+customerId}/keywordPlanAdGroups:mutate",
              "flatPath": "v21/customers/{customersId}/keywordPlanAdGroups:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose Keyword Plan ad groups are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes Keyword Plan ad groups. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [KeywordPlanAdGroupError]() [KeywordPlanError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "keywordPlanCampaignKeywords": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.keywordPlanCampaignKeywords.mutate",
              "path": "v21/customers/{+customerId}/keywordPlanCampaignKeywords:mutate",
              "flatPath": "v21/customers/{customersId}/keywordPlanCampaignKeywords:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose campaign keywords are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes Keyword Plan campaign keywords. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [KeywordPlanAdGroupKeywordError]() [KeywordPlanCampaignKeywordError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "keywordPlanCampaigns": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.keywordPlanCampaigns.mutate",
              "path": "v21/customers/{+customerId}/keywordPlanCampaigns:mutate",
              "flatPath": "v21/customers/{customersId}/keywordPlanCampaigns:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose Keyword Plan campaigns are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes Keyword Plan campaigns. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [KeywordPlanCampaignError]() [KeywordPlanError]() [ListOperationError]() [MutateError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "keywordPlans": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.keywordPlans.mutate",
              "path": "v21/customers/{+customerId}/keywordPlans:mutate",
              "flatPath": "v21/customers/{customersId}/keywordPlans:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose keyword plans are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes keyword plans. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [KeywordPlanError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]() [StringLengthError]()"
            }
          }
        },
        "labels": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.labels.mutate",
              "path": "v21/customers/{+customerId}/labels:mutate",
              "flatPath": "v21/customers/{customersId}/labels:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. ID of the customer whose labels are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateLabelsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateLabelsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes labels. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [LabelError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "recommendationSubscriptions": {
          "methods": {
            "mutateRecommendationSubscription": {
              "id": "googleads.customers.recommendationSubscriptions.mutateRecommendationSubscription",
              "path": "v21/customers/{+customerId}/recommendationSubscriptions:mutateRecommendationSubscription",
              "flatPath": "v21/customers/{customersId}/recommendationSubscriptions:mutateRecommendationSubscription",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the subscribing customer.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Mutates given subscription with corresponding apply parameters. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RecommendationError]() [RequestError]() [UrlFieldError]()"
            }
          }
        },
        "remarketingActions": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.remarketingActions.mutate",
              "path": "v21/customers/{+customerId}/remarketingActions:mutate",
              "flatPath": "v21/customers/{customersId}/remarketingActions:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose remarketing actions are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates remarketing actions. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ConversionActionError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "sharedCriteria": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.sharedCriteria.mutate",
              "path": "v21/customers/{+customerId}/sharedCriteria:mutate",
              "flatPath": "v21/customers/{customersId}/sharedCriteria:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose shared criteria are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes shared criteria. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "sharedSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.sharedSets.mutate",
              "path": "v21/customers/{+customerId}/sharedSets:mutate",
              "flatPath": "v21/customers/{customersId}/sharedSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose shared sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes shared sets. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SharedSetError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]()"
            }
          }
        },
        "smartCampaignSettings": {
          "methods": {
            "getSmartCampaignStatus": {
              "id": "googleads.customers.smartCampaignSettings.getSmartCampaignStatus",
              "path": "v21/{+resourceName}:getSmartCampaignStatus",
              "flatPath": "v21/customers/{customersId}/smartCampaignSettings/{smartCampaignSettingsId}:getSmartCampaignStatus",
              "httpMethod": "GET",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the Smart campaign setting belonging to the Smart campaign to fetch the status of.",
                  "pattern": "^customers/[^/]+/smartCampaignSettings/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__GetSmartCampaignStatusResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns the status of the requested Smart campaign."
            },
            "mutate": {
              "id": "googleads.customers.smartCampaignSettings.mutate",
              "path": "v21/customers/{+customerId}/smartCampaignSettings:mutate",
              "flatPath": "v21/customers/{customersId}/smartCampaignSettings:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose Smart campaign settings are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Updates Smart campaign settings for campaigns."
            }
          }
        },
        "userLists": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.userLists.mutate",
              "path": "v21/customers/{+customerId}/userLists:mutate",
              "flatPath": "v21/customers/{customersId}/userLists:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose user lists are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates user lists. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]() [DatabaseError]() [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [NewResourceCreationError]() [NotAllowlistedError]() [NotEmptyError]() [OperationAccessDeniedError]() [QuotaError]() [RangeError]() [RequestError]() [StringFormatError]() [StringLengthError]() [UserListError]()"
            }
          }
        },
        "googleAds": {
          "methods": {
            "search": {
              "id": "googleads.customers.googleAds.search",
              "path": "v21/customers/{+customerId}/googleAds:search",
              "flatPath": "v21/customers/{customersId}/googleAds:search",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being queried.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all rows that match the search query. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ChangeEventError]() [ChangeStatusError]() [ClickViewError]() [HeaderError]() [InternalError]() [QueryError]() [QuotaError]() [RequestError]()"
            },
            "searchStream": {
              "id": "googleads.customers.googleAds.searchStream",
              "path": "v21/customers/{+customerId}/googleAds:searchStream",
              "flatPath": "v21/customers/{customersId}/googleAds:searchStream",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being queried.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all rows that match the search stream query. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [ChangeEventError]() [ChangeStatusError]() [ClickViewError]() [HeaderError]() [InternalError]() [QueryError]() [QuotaError]() [RequestError]()"
            },
            "mutate": {
              "id": "googleads.customers.googleAds.mutate",
              "path": "v21/customers/{+customerId}/googleAds:mutate",
              "flatPath": "v21/customers/{customersId}/googleAds:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose resources are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateGoogleAdsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateGoogleAdsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, updates, or removes resources. This method supports atomic transactions with multiple types of resources. For example, you can atomically create a campaign and a campaign budget, or perform up to thousands of mutates atomically. This method is essentially a wrapper around a series of mutate methods. The only features it offers over calling those methods directly are: - Atomic transactions - Temp resource names (described below) - Somewhat reduced latency over making a series of mutate calls Note: Only resources that support atomic transactions are included, so this method can't replace all calls to individual services. ## Atomic Transaction Benefits Atomicity makes error handling much easier. If you're making a series of changes and one fails, it can leave your account in an inconsistent state. With atomicity, you either reach the chosen state directly, or the request fails and you can retry. ## Temp Resource Names Temp resource names are a special type of resource name used to create a resource and reference that resource in the same request. For example, if a campaign budget is created with `resource_name` equal to `customers/123/campaignBudgets/-1`, that resource name can be reused in the `Campaign.budget` field in the same request. That way, the two resources are created and linked atomically. To create a temp resource name, put a negative number in the part of the name that the server would normally allocate. Note: - Resources must be created with a temp name before the name can be reused. For example, the previous CampaignBudget+Campaign example would fail if the mutate order was reversed. - Temp names are not remembered across requests. - There's no limit to the number of temp names in a request. - Each temp name must use a unique negative number, even if the resource types differ. ## Latency It's important to group mutates by resource type or the request may time out and fail. Latency is roughly equal to a series of calls to individual mutate methods, where each change in resource type is a new call. For example, mutating 10 campaigns then 10 ad groups is like 2 calls, while mutating 1 campaign, 1 ad group, 1 campaign, 1 ad group is like 4 calls. List of thrown errors: [AdCustomizerError]() [AdError]() [AdGroupAdError]() [AdGroupCriterionError]() [AdGroupError]() [AssetError]() [AuthenticationError]() [AuthorizationError]() [BiddingError]() [CampaignBudgetError]() [CampaignCriterionError]() [CampaignError]() [CampaignExperimentError]() [CampaignSharedSetError]() [CollectionSizeError]() [ContextError]() [ConversionActionError]() [CriterionError]() [CustomerFeedError]() [DatabaseError]() [DateError]() [DateRangeError]() [DistinctError]() [ExtensionFeedItemError]() [ExtensionSettingError]() [FeedAttributeReferenceError]() [FeedError]() [FeedItemError]() [FeedItemSetError]() [FieldError]() [FieldMaskError]() [FunctionParsingError]() [HeaderError]() [ImageError]() [InternalError]() [KeywordPlanAdGroupKeywordError]() [KeywordPlanCampaignError]() [KeywordPlanError]() [LabelError]() [ListOperationError]() [MediaUploadError]() [MutateError]() [NewResourceCreationError]() [NullError]() [OperationAccessDeniedError]() [PolicyFindingError]() [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]() [ResourceCountLimitExceededError]() [SettingError]() [SharedSetError]() [SizeLimitError]() [StringFormatError]() [StringLengthError]() [UrlFieldError]() [UserListError]() [YoutubeVideoRegistrationError]()"
            }
          }
        },
        "batchJobs": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.batchJobs.mutate",
              "path": "v21/customers/{+customerId}/batchJobs:mutate",
              "flatPath": "v21/customers/{customersId}/batchJobs:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which to create a batch job.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBatchJobRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBatchJobResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Mutates a batch job. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            },
            "listResults": {
              "id": "googleads.customers.batchJobs.listResults",
              "path": "v21/{+resourceName}:listResults",
              "flatPath": "v21/customers/{customersId}/batchJobs/{batchJobsId}:listResults",
              "httpMethod": "GET",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the batch job whose results are being listed.",
                  "pattern": "^customers/[^/]+/batchJobs/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageToken": {
                  "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from `next_page_token` in the previous response in order to request the next page of results.",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "Number of elements to retrieve in a single page. When a page request is too large, the server may decide to further limit the number of returned resources.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "responseContentType": {
                  "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned.",
                  "location": "query",
                  "type": "string",
                  "enumDescriptions": [
                    "Not specified. Will return the resource name only in the response.",
                    "The mutate response will be the resource name.",
                    "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
                  ],
                  "enum": [
                    "UNSPECIFIED",
                    "RESOURCE_NAME_ONLY",
                    "MUTABLE_RESOURCE"
                  ]
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ListBatchJobResultsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns the results of the batch job. The job must be done. Supports standard list paging. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [BatchJobError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "run": {
              "id": "googleads.customers.batchJobs.run",
              "path": "v21/{+resourceName}:run",
              "flatPath": "v21/customers/{customersId}/batchJobs/{batchJobsId}:run",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the BatchJob to run.",
                  "pattern": "^customers/[^/]+/batchJobs/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RunBatchJobRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Runs the batch job. The Operation.metadata field type is BatchJobMetadata. When finished, the long running operation will not contain errors or a response. Instead, use ListBatchJobResults to get the results of the job. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [BatchJobError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            },
            "addOperations": {
              "id": "googleads.customers.batchJobs.addOperations",
              "path": "v21/{+resourceName}:addOperations",
              "flatPath": "v21/customers/{customersId}/batchJobs/{batchJobsId}:addOperations",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the batch job.",
                  "pattern": "^customers/[^/]+/batchJobs/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Add operations to the batch job. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [BatchJobError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()"
            }
          }
        },
        "billingSetups": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.billingSetups.mutate",
              "path": "v21/customers/{+customerId}/billingSetups:mutate",
              "flatPath": "v21/customers/{customersId}/billingSetups:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. Id of the customer to apply the billing setup mutate operation to.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBillingSetupRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateBillingSetupResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates a billing setup, or cancels an existing billing setup. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [BillingSetupError]() [DateError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "campaignLifecycleGoal": {
          "methods": {
            "configureCampaignLifecycleGoals": {
              "id": "googleads.customers.campaignLifecycleGoal.configureCampaignLifecycleGoals",
              "path": "v21/customers/{+customerId}/campaignLifecycleGoal:configureCampaignLifecycleGoals",
              "flatPath": "v21/customers/{customersId}/campaignLifecycleGoal:configureCampaignLifecycleGoals",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer performing the upload.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Process the given campaign lifecycle configurations. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CampaignLifecycleGoalConfigError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customAudiences": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customAudiences.mutate",
              "path": "v21/customers/{+customerId}/customAudiences:mutate",
              "flatPath": "v21/customers/{customersId}/customAudiences:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose custom audiences are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates custom audiences. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CustomAudienceError]() [CustomInterestError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [OperationAccessDeniedError]() [PolicyViolationError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customInterests": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customInterests.mutate",
              "path": "v21/customers/{+customerId}/customInterests:mutate",
              "flatPath": "v21/customers/{customersId}/customInterests:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose custom interests are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomInterestsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomInterestsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates custom interests. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CriterionError]() [CustomInterestError]() [HeaderError]() [InternalError]() [MutateError]() [PolicyViolationError]() [QuotaError]() [RequestError]() [StringLengthError]()"
            }
          }
        },
        "customerAssetSets": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerAssetSets.mutate",
              "path": "v21/customers/{+customerId}/customerAssetSets:mutate",
              "flatPath": "v21/customers/{customersId}/customerAssetSets:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer asset sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates, or removes customer asset sets. Operation statuses are returned."
            }
          }
        },
        "customerClientLinks": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerClientLinks.mutate",
              "path": "v21/customers/{+customerId}/customerClientLinks:mutate",
              "flatPath": "v21/customers/{customersId}/customerClientLinks:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer link are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates a customer client link. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [ManagerLinkError]() [MutateError]() [NewResourceCreationError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerLifecycleGoal": {
          "methods": {
            "configureCustomerLifecycleGoals": {
              "id": "googleads.customers.customerLifecycleGoal.configureCustomerLifecycleGoals",
              "path": "v21/customers/{+customerId}/customerLifecycleGoal:configureCustomerLifecycleGoals",
              "flatPath": "v21/customers/{customersId}/customerLifecycleGoal:configureCustomerLifecycleGoals",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer performing the upload.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Process the given customer lifecycle configurations. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CustomerLifecycleGoalConfigError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerManagerLinks": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerManagerLinks.mutate",
              "path": "v21/customers/{+customerId}/customerManagerLinks:mutate",
              "flatPath": "v21/customers/{customersId}/customerManagerLinks:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose customer manager links are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Updates customer manager links. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]() [InternalError]() [ManagerLinkError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "moveManagerLink": {
              "id": "googleads.customers.customerManagerLinks.moveManagerLink",
              "path": "v21/customers/{+customerId}/customerManagerLinks:moveManagerLink",
              "flatPath": "v21/customers/{customersId}/customerManagerLinks:moveManagerLink",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the client customer that is being moved.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MoveManagerLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MoveManagerLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Moves a client customer to a new manager customer. This simplifies the complex request that requires two operations to move a client customer to a new manager, for example: 1. Update operation with Status INACTIVE (previous manager) and, 2. Update operation with Status ACTIVE (new manager). List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerSkAdNetworkConversionValueSchemas": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerSkAdNetworkConversionValueSchemas.mutate",
              "path": "v21/customers/{+customerId}/customerSkAdNetworkConversionValueSchemas:mutate",
              "flatPath": "v21/customers/{customersId}/customerSkAdNetworkConversionValueSchemas:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "The ID of the customer whose shared sets are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or updates the CustomerSkAdNetworkConversionValueSchema. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [InternalError]() [MutateError]()"
            }
          }
        },
        "customerUserAccessInvitations": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerUserAccessInvitations.mutate",
              "path": "v21/customers/{+customerId}/customerUserAccessInvitations:mutate",
              "flatPath": "v21/customers/{customersId}/customerUserAccessInvitations:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose access invitation is being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates or removes an access invitation. List of thrown errors: [AccessInvitationError]() [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "customerUserAccesses": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.customerUserAccesses.mutate",
              "path": "v21/customers/{+customerId}/customerUserAccesses:mutate",
              "flatPath": "v21/customers/{customersId}/customerUserAccesses:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Updates, removes permission of a user on a given customer. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [CustomerUserAccessError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "dataLinks": {
          "methods": {
            "create": {
              "id": "googleads.customers.dataLinks.create",
              "path": "v21/customers/{+customerId}/dataLinks:create",
              "flatPath": "v21/customers/{customersId}/dataLinks:create",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which the data link is created.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateDataLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateDataLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates a data link. The requesting Google Ads account name and account ID will be shared with the third party (such as YouTube creators for video links) to whom you are creating the link with. Only customers on the allow-list can create data links. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DataLinkError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "remove": {
              "id": "googleads.customers.dataLinks.remove",
              "path": "v21/customers/{+customerId}/dataLinks:remove",
              "flatPath": "v21/customers/{customersId}/dataLinks:remove",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which the data link is updated.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveDataLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveDataLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Remove a data link. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DataLinkError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "update": {
              "id": "googleads.customers.dataLinks.update",
              "path": "v21/customers/{+customerId}/dataLinks:update",
              "flatPath": "v21/customers/{customersId}/dataLinks:update",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which the data link is created.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__UpdateDataLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__UpdateDataLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Update a data link. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [DataLinkError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "invoices": {
          "methods": {
            "list": {
              "id": "googleads.customers.invoices.list",
              "path": "v21/customers/{+customerId}/invoices",
              "flatPath": "v21/customers/{customersId}/invoices",
              "httpMethod": "GET",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer to fetch invoices for.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "billingSetup": {
                  "description": "Required. The billing setup resource name of the requested invoices. `customers/{customer_id}/billingSetups/{billing_setup_id}`",
                  "location": "query",
                  "type": "string"
                },
                "issueYear": {
                  "description": "Required. The issue year to retrieve invoices, in yyyy format. Only invoices issued in 2019 or later can be retrieved.",
                  "location": "query",
                  "type": "string"
                },
                "issueMonth": {
                  "description": "Required. The issue month to retrieve invoices.",
                  "location": "query",
                  "type": "string",
                  "enumDescriptions": [
                    "Not specified.",
                    "The value is unknown in this version.",
                    "January.",
                    "February.",
                    "March.",
                    "April.",
                    "May.",
                    "June.",
                    "July.",
                    "August.",
                    "September.",
                    "October.",
                    "November.",
                    "December."
                  ],
                  "enum": [
                    "UNSPECIFIED",
                    "UNKNOWN",
                    "JANUARY",
                    "FEBRUARY",
                    "MARCH",
                    "APRIL",
                    "MAY",
                    "JUNE",
                    "JULY",
                    "AUGUST",
                    "SEPTEMBER",
                    "OCTOBER",
                    "NOVEMBER",
                    "DECEMBER"
                  ]
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ListInvoicesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all invoices associated with a billing setup, for a given month. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [InvoiceError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "localServices": {
          "methods": {
            "appendLeadConversation": {
              "id": "googleads.customers.localServices.appendLeadConversation",
              "path": "v21/customers/{+customerId}/localServices:appendLeadConversation",
              "flatPath": "v21/customers/{customersId}/localServices:appendLeadConversation",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The Id of the customer which owns the leads onto which the conversations will be appended.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__AppendLeadConversationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__AppendLeadConversationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "RPC to append Local Services Lead Conversation resources to Local Services Lead resources."
            }
          }
        },
        "localServicesLeads": {
          "methods": {
            "provideLeadFeedback": {
              "id": "googleads.customers.localServicesLeads.provideLeadFeedback",
              "path": "v21/{+resourceName}:provideLeadFeedback",
              "flatPath": "v21/customers/{customersId}/localServicesLeads/{localServicesLeadsId}:provideLeadFeedback",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the local services lead that for which the feedback is being provided.",
                  "pattern": "^customers/[^/]+/localServicesLeads/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "RPC to provide feedback on Local Services Lead resources."
            }
          }
        },
        "offlineUserDataJobs": {
          "methods": {
            "create": {
              "id": "googleads.customers.offlineUserDataJobs.create",
              "path": "v21/customers/{+customerId}/offlineUserDataJobs:create",
              "flatPath": "v21/customers/{customersId}/offlineUserDataJobs:create",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which to create an offline user data job.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates an offline user data job. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [NotAllowlistedError]() [OfflineUserDataJobError]() [QuotaError]() [RequestError]()"
            },
            "addOperations": {
              "id": "googleads.customers.offlineUserDataJobs.addOperations",
              "path": "v21/{+resourceName}:addOperations",
              "flatPath": "v21/customers/{customersId}/offlineUserDataJobs/{offlineUserDataJobsId}:addOperations",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the OfflineUserDataJob.",
                  "pattern": "^customers/[^/]+/offlineUserDataJobs/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Adds operations to the offline user data job. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [OfflineUserDataJobError]() [QuotaError]() [RequestError]()"
            },
            "run": {
              "id": "googleads.customers.offlineUserDataJobs.run",
              "path": "v21/{+resourceName}:run",
              "flatPath": "v21/customers/{customersId}/offlineUserDataJobs/{offlineUserDataJobsId}:run",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Required. The resource name of the OfflineUserDataJob to run.",
                  "pattern": "^customers/[^/]+/offlineUserDataJobs/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RunOfflineUserDataJobRequest"
              },
              "response": {
                "$ref": "GoogleLongrunning__Operation"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Runs the offline user data job. When finished, the long running operation will contain the processing result or failure information, if any. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [HeaderError]() [InternalError]() [OfflineUserDataJobError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "paymentsAccounts": {
          "methods": {
            "list": {
              "id": "googleads.customers.paymentsAccounts.list",
              "path": "v21/customers/{+customerId}/paymentsAccounts",
              "flatPath": "v21/customers/{customersId}/paymentsAccounts",
              "httpMethod": "GET",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer to apply the PaymentsAccount list operation to.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ListPaymentsAccountsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Returns all payments accounts associated with all managers between the login customer ID and specified serving customer in the hierarchy, inclusive. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [PaymentsAccountError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "productLinkInvitations": {
          "methods": {
            "create": {
              "id": "googleads.customers.productLinkInvitations.create",
              "path": "v21/customers/{+customerId}/productLinkInvitations:create",
              "flatPath": "v21/customers/{customersId}/productLinkInvitations:create",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates a product link invitation."
            },
            "update": {
              "id": "googleads.customers.productLinkInvitations.update",
              "path": "v21/customers/{+customerId}/productLinkInvitations:update",
              "flatPath": "v21/customers/{customersId}/productLinkInvitations:update",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Update a product link invitation."
            },
            "remove": {
              "id": "googleads.customers.productLinkInvitations.remove",
              "path": "v21/customers/{+customerId}/productLinkInvitations:remove",
              "flatPath": "v21/customers/{customersId}/productLinkInvitations:remove",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the product link invitation being removed.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Remove a product link invitation."
            }
          }
        },
        "productLinks": {
          "methods": {
            "create": {
              "id": "googleads.customers.productLinks.create",
              "path": "v21/customers/{+customerId}/productLinks:create",
              "flatPath": "v21/customers/{customersId}/productLinks:create",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer for which the product link is created.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateProductLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__CreateProductLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Creates a product link. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            },
            "remove": {
              "id": "googleads.customers.productLinks.remove",
              "path": "v21/customers/{+customerId}/productLinks:remove",
              "flatPath": "v21/customers/{customersId}/productLinks:remove",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveProductLinkRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__RemoveProductLinkResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Removes a product link. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "recommendations": {
          "methods": {
            "apply": {
              "id": "googleads.customers.recommendations.apply",
              "path": "v21/customers/{+customerId}/recommendations:apply",
              "flatPath": "v21/customers/{customersId}/recommendations:apply",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer with the recommendation.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__ApplyRecommendationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__ApplyRecommendationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Applies given recommendations with corresponding apply parameters. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]() [MutateError]() [QuotaError]() [RecommendationError]() [RequestError]() [UrlFieldError]()"
            },
            "dismiss": {
              "id": "googleads.customers.recommendations.dismiss",
              "path": "v21/customers/{+customerId}/recommendations:dismiss",
              "flatPath": "v21/customers/{customersId}/recommendations:dismiss",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer with the recommendation.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__DismissRecommendationRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__DismissRecommendationResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Dismisses given recommendations. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RecommendationError]() [RequestError]()"
            },
            "generate": {
              "id": "googleads.customers.recommendations.generate",
              "path": "v21/customers/{+customerId}/recommendations:generate",
              "flatPath": "v21/customers/{customersId}/recommendations:generate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer generating recommendations.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__GenerateRecommendationsRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__GenerateRecommendationsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Generates Recommendations based off the requested recommendation_types. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RecommendationError]() [RequestError]()"
            }
          }
        },
        "thirdPartyAppAnalyticsLinks": {
          "methods": {
            "regenerateShareableLinkId": {
              "id": "googleads.customers.thirdPartyAppAnalyticsLinks.regenerateShareableLinkId",
              "path": "v21/{+resourceName}:regenerateShareableLinkId",
              "flatPath": "v21/customers/{customersId}/thirdPartyAppAnalyticsLinks/{thirdPartyAppAnalyticsLinksId}:regenerateShareableLinkId",
              "httpMethod": "POST",
              "parameters": {
                "resourceName": {
                  "description": "Resource name of the third party app analytics link.",
                  "pattern": "^customers/[^/]+/thirdPartyAppAnalyticsLinks/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "resourceName"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Regenerate ThirdPartyAppAnalyticsLink.shareable_link_id that should be provided to the third party when setting up app analytics. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        },
        "userListCustomerTypes": {
          "methods": {
            "mutate": {
              "id": "googleads.customers.userListCustomerTypes.mutate",
              "path": "v21/customers/{+customerId}/userListCustomerTypes:mutate",
              "flatPath": "v21/customers/{customersId}/userListCustomerTypes:mutate",
              "httpMethod": "POST",
              "parameters": {
                "customerId": {
                  "description": "Required. The ID of the customer whose user list customer types are being modified.",
                  "pattern": "^[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "customerId"
              ],
              "request": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesRequest"
              },
              "response": {
                "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/adwords"
              ],
              "description": "Attach or remove user list customer types. Operation statuses are returned. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [UserListCustomerTypeError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
            }
          }
        }
      }
    },
    "audienceInsights": {
      "methods": {
        "listInsightsEligibleDates": {
          "id": "googleads.audienceInsights.listInsightsEligibleDates",
          "path": "v21/audienceInsights:listInsightsEligibleDates",
          "flatPath": "v21/audienceInsights:listInsightsEligibleDates",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Lists date ranges for which audience insights data can be requested. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [RequestError]()"
        }
      }
    },
    "geoTargetConstants": {
      "methods": {
        "suggest": {
          "id": "googleads.geoTargetConstants.suggest",
          "path": "v21/geoTargetConstants:suggest",
          "flatPath": "v21/geoTargetConstants:suggest",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns GeoTargetConstant suggestions by location name or by resource name. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [GeoTargetConstantSuggestionError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        }
      }
    },
    "googleAdsFields": {
      "methods": {
        "get": {
          "id": "googleads.googleAdsFields.get",
          "path": "v21/{+resourceName}",
          "flatPath": "v21/googleAdsFields/{googleAdsFieldsId}",
          "httpMethod": "GET",
          "parameters": {
            "resourceName": {
              "description": "Required. The resource name of the field to get.",
              "pattern": "^googleAdsFields/[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "resourceName"
          ],
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Resources__GoogleAdsField"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns just the requested field. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "search": {
          "id": "googleads.googleAdsFields.search",
          "path": "v21/googleAdsFields:search",
          "flatPath": "v21/googleAdsFields:search",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns all fields that match the search query. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QueryError]() [QuotaError]() [RequestError]()"
        }
      }
    },
    "keywordThemeConstants": {
      "methods": {
        "suggest": {
          "id": "googleads.keywordThemeConstants.suggest",
          "path": "v21/keywordThemeConstants:suggest",
          "flatPath": "v21/keywordThemeConstants:suggest",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns KeywordThemeConstant suggestions by keyword themes. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        }
      }
    },
    "v21": {
      "methods": {
        "generateConversionRates": {
          "id": "googleads.generateConversionRates",
          "path": "v21:generateConversionRates",
          "flatPath": "v21:generateConversionRates",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateConversionRatesRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateConversionRatesResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns a collection of conversion rate suggestions for supported plannable products. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "listPlannableLocations": {
          "id": "googleads.listPlannableLocations",
          "path": "v21:listPlannableLocations",
          "flatPath": "v21:listPlannableLocations",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableLocationsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableLocationsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns the list of plannable locations (for example, countries). List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "listPlannableProducts": {
          "id": "googleads.listPlannableProducts",
          "path": "v21:listPlannableProducts",
          "flatPath": "v21:listPlannableProducts",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableProductsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableProductsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns the list of per-location plannable YouTube ad formats with allowed targeting. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()"
        },
        "listPlannableUserLists": {
          "id": "googleads.listPlannableUserLists",
          "path": "v21:listPlannableUserLists",
          "flatPath": "v21:listPlannableUserLists",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableUserListsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableUserListsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns the list of plannable user lists with their plannable status. User lists may not be plannable for a number of reasons, including: - They are less than 10 days old. - They have a membership lifespan that is less than 30 days - They have less than 10,000 or more than 700,000 users. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [QuotaError]() [RangeError]() [ReachPlanError]() [RequestError]()"
        },
        "listPlannableUserInterests": {
          "id": "googleads.listPlannableUserInterests",
          "path": "v21:listPlannableUserInterests",
          "flatPath": "v21:listPlannableUserInterests",
          "httpMethod": "POST",
          "parameters": {},
          "parameterOrder": [],
          "request": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsRequest"
          },
          "response": {
            "$ref": "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/adwords"
          ],
          "description": "Returns the list of plannable user interests. A plannable user interest is one that can be targeted in a reach forecast using ReachPlanService.GenerateReachForecast. List of thrown errors: [AuthenticationError]() [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]() [ListOperationError]() [QuotaError]() [RequestError]() [StringLengthError]()"
        }
      }
    }
  },
  "fullyEncodeReservedExpansion": true,
  "schemas": {
    "GoogleLongrunning__ListOperationsResponse": {
      "id": "GoogleLongrunning__ListOperationsResponse",
      "description": "The response message for Operations.ListOperations.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "A list of operations that matches the specified filter in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleLongrunning__Operation"
          }
        },
        "nextPageToken": {
          "description": "The standard List next-page token.",
          "type": "string"
        }
      }
    },
    "GoogleLongrunning__Operation": {
      "id": "GoogleLongrunning__Operation",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
          "type": "string"
        },
        "metadata": {
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        },
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "GoogleRpc__Status"
        },
        "response": {
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "GoogleRpc__Status": {
      "id": "GoogleRpc__Status",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "type": "object",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          }
        }
      }
    },
    "GoogleProtobuf__Empty": {
      "id": "GoogleProtobuf__Empty",
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "type": "object",
      "properties": {}
    },
    "GoogleLongrunning__CancelOperationRequest": {
      "id": "GoogleLongrunning__CancelOperationRequest",
      "description": "The request message for Operations.CancelOperation.",
      "type": "object",
      "properties": {}
    },
    "GoogleLongrunning__WaitOperationRequest": {
      "id": "GoogleLongrunning__WaitOperationRequest",
      "description": "The request message for Operations.WaitOperation.",
      "type": "object",
      "properties": {
        "timeout": {
          "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
          "type": "string",
          "format": "google-duration"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalRequest",
      "description": "Request message for AccountBudgetProposalService.MutateAccountBudgetProposal.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on an individual account-level budget proposal.",
          "$ref": "GoogleAdsGoogleadsV21Services__AccountBudgetProposalOperation"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AccountBudgetProposalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AccountBudgetProposalOperation",
      "description": "A single operation to propose the creation of a new account-level budget or edit/end/remove an existing one.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which budget fields are modified. While budgets may be modified, proposals that propose such modifications are final. Therefore, update operations are not supported for proposals. Proposals that modify budgets have the 'update' proposal type. Specifying a mask for any other proposal type is considered an error.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: A new proposal to create a new budget, edit an existing budget, end an actively running budget, or remove an approved budget scheduled to start in the future. No resource name is expected for the new proposal.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountBudgetProposal"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed proposal is expected, in this format: `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}` A request may be cancelled iff it is pending.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AccountBudgetProposal": {
      "id": "GoogleAdsGoogleadsV21Resources__AccountBudgetProposal",
      "description": "An account-level budget proposal. All fields prefixed with 'proposed' may not necessarily be applied directly. For example, proposed spending limits may be adjusted before their application. This is true if the 'proposed' field has an 'approved' counterpart, for example, spending limits. Note that the proposal type (proposal_type) changes which fields are required and which must remain empty.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the proposal. AccountBudgetProposal resource names have the form: `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the proposal.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billingSetup": {
          "description": "Immutable. The resource name of the billing setup associated with this proposal.",
          "type": "string"
        },
        "accountBudget": {
          "description": "Immutable. The resource name of the account-level budget associated with this proposal.",
          "type": "string"
        },
        "proposalType": {
          "description": "Immutable. The type of this proposal, for example, END to end the budget associated with this proposal.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Identifies a request to create a new budget.",
            "Identifies a request to edit an existing budget.",
            "Identifies a request to end a budget that has already started.",
            "Identifies a request to remove a budget that hasn't started yet."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CREATE",
            "UPDATE",
            "END",
            "REMOVE"
          ]
        },
        "status": {
          "description": "Output only. The status of this proposal. When a new proposal is created, the status defaults to PENDING.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The proposal is pending approval.",
            "The proposal has been approved but the corresponding billing setup has not. This can occur for proposals that set up the first budget when signing up for billing or when performing a change of bill-to operation.",
            "The proposal has been approved.",
            "The proposal has been cancelled by the user.",
            "The proposal has been rejected by the user, for example, by rejecting an acceptance email."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "APPROVED_HELD",
            "APPROVED",
            "CANCELLED",
            "REJECTED"
          ]
        },
        "proposedName": {
          "description": "Immutable. The name to assign to the account-level budget.",
          "type": "string"
        },
        "approvedStartDateTime": {
          "description": "Output only. The approved start date time in yyyy-mm-dd hh:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "proposedPurchaseOrderNumber": {
          "description": "Immutable. A purchase order number is a value that enables the user to help them reference this budget in their monthly invoices.",
          "type": "string"
        },
        "proposedNotes": {
          "description": "Immutable. Notes associated with this budget.",
          "type": "string"
        },
        "creationDateTime": {
          "description": "Output only. The date time when this account-level budget proposal was created, which is not the same as its approval date time, if applicable.",
          "readOnly": true,
          "type": "string"
        },
        "approvalDateTime": {
          "description": "Output only. The date time when this account-level budget was approved, if applicable.",
          "readOnly": true,
          "type": "string"
        },
        "proposedStartDateTime": {
          "description": "Immutable. The proposed start date time in yyyy-mm-dd hh:mm:ss format.",
          "type": "string"
        },
        "proposedStartTimeType": {
          "description": "Immutable. The proposed start date time as a well-defined type, for example, NOW.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "proposedEndDateTime": {
          "description": "Immutable. The proposed end date time in yyyy-mm-dd hh:mm:ss format.",
          "type": "string"
        },
        "proposedEndTimeType": {
          "description": "Immutable. The proposed end date time as a well-defined type, for example, FOREVER.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "approvedEndDateTime": {
          "description": "Output only. The approved end date time in yyyy-mm-dd hh:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "approvedEndTimeType": {
          "description": "Output only. The approved end date time as a well-defined type, for example, FOREVER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "proposedSpendingLimitMicros": {
          "description": "Immutable. The proposed spending limit in micros. One million is equivalent to one unit.",
          "type": "string",
          "format": "int64"
        },
        "proposedSpendingLimitType": {
          "description": "Immutable. The proposed spending limit as a well-defined type, for example, INFINITE.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        },
        "approvedSpendingLimitMicros": {
          "description": "Output only. The approved spending limit in micros. One million is equivalent to one unit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "approvedSpendingLimitType": {
          "description": "Output only. The approved spending limit as a well-defined type, for example, INFINITE.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResponse",
      "description": "Response message for account-level budget mutate operations.",
      "type": "object",
      "properties": {
        "result": {
          "description": "The result of the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountBudgetProposalResult",
      "description": "The result for the account budget proposal mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateAccountLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateAccountLinkRequest",
      "description": "Request message for AccountLinkService.CreateAccountLink.",
      "type": "object",
      "properties": {
        "accountLink": {
          "description": "Required. The account link to be created.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountLink"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AccountLink": {
      "id": "GoogleAdsGoogleadsV21Resources__AccountLink",
      "description": "Represents the data sharing connection between a Google Ads account and another account",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Resource name of the account link. AccountLink resource names have the form: `customers/{customer_id}/accountLinks/{account_link_id}`",
          "type": "string"
        },
        "accountLinkId": {
          "description": "Output only. The ID of the link. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "The status of the link.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The link is enabled.",
            "The link is removed/disabled.",
            "The link to the other account has been requested. A user on the other account may now approve the link by setting the status to ENABLED.",
            "This link has been requested by a user on the other account. It may be approved by a user on this account by setting the status to ENABLED.",
            "The link is rejected by the approver.",
            "The link is revoked by the user who requested the link."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "REQUESTED",
            "PENDING_APPROVAL",
            "REJECTED",
            "REVOKED"
          ]
        },
        "type": {
          "description": "Output only. The type of the linked account.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A link to provide third party app analytics data."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "THIRD_PARTY_APP_ANALYTICS"
          ]
        },
        "thirdPartyAppAnalytics": {
          "description": "Immutable. A third party app analytics link.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLinkIdentifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLinkIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLinkIdentifier",
      "description": "The identifiers of a Third Party App Analytics Link.",
      "type": "object",
      "properties": {
        "appAnalyticsProviderId": {
          "description": "Immutable. The ID of the app analytics provider. This field should not be empty when creating a new third party app analytics link. It is unable to be modified after the creation of the link.",
          "type": "string",
          "format": "int64"
        },
        "appId": {
          "description": "Immutable. A string that uniquely identifies a mobile application from which the data was collected to the Google Ads API. For iOS, the ID string is the 9 digit string that appears at the end of an App Store URL (for example, \"422689480\" for \"Gmail\" whose App Store link is https://apps.apple.com/us/app/gmail-email-by-google/id422689480). For Android, the ID string is the application's package name (for example, \"com.google.android.gm\" for \"Gmail\" given Google Play link https://play.google.com/store/apps/details?id=com.google.android.gm) This field should not be empty when creating a new third party app analytics link. It is unable to be modified after the creation of the link.",
          "type": "string"
        },
        "appVendor": {
          "description": "Immutable. The vendor of the app. This field should not be empty when creating a new third party app analytics link. It is unable to be modified after the creation of the link.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Mobile app vendor for Apple app store.",
            "Mobile app vendor for Google app store."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLE_APP_STORE",
            "GOOGLE_APP_STORE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateAccountLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateAccountLinkResponse",
      "description": "Response message for AccountLinkService.CreateAccountLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations. Resource name of the account link.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountLinkRequest",
      "description": "Request message for AccountLinkService.MutateAccountLink.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on the link.",
          "$ref": "GoogleAdsGoogleadsV21Services__AccountLinkOperation"
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AccountLinkOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AccountLinkOperation",
      "description": "A single update on an account link.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The account link is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountLink"
        },
        "remove": {
          "description": "Remove operation: A resource name for the account link to remove is expected, in this format: `customers/{customer_id}/accountLinks/{account_link_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountLinkResponse",
      "description": "Response message for account link mutate.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAccountLinkResult"
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAccountLinkResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAccountLinkResult",
      "description": "The result for the account link mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsRequest",
      "description": "Request message for AdGroupAdLabelService.MutateAdGroupAdLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on ad group ad labels.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAdLabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupAdLabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupAdLabelOperation",
      "description": "A single operation (create, remove) on an ad group ad label.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group ad label.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdLabel"
        },
        "remove": {
          "description": "Remove operation: A resource name for the ad group ad label being removed, in this format: `customers/{customer_id}/adGroupAdLabels/{ad_group_id}~{ad_id}~{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdLabel": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdLabel",
      "description": "A relationship between an ad group ad and a label.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group ad label. Ad group ad label resource names have the form: `customers/{customer_id}/adGroupAdLabels/{ad_group_id}~{ad_id}~{label_id}`",
          "type": "string"
        },
        "adGroupAd": {
          "description": "Immutable. The ad group ad to which the label is attached.",
          "type": "string"
        },
        "label": {
          "description": "Immutable. The label assigned to the ad group ad.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelsResponse",
      "description": "Response message for an ad group ad labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelResult",
      "description": "The result for an ad group ad label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsRequest",
      "description": "Request message for AdGroupAdService.MutateAdGroupAds.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ads.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAdOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupAdOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupAdOperation",
      "description": "A single operation (create, update, remove) on an ad group ad.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "policyValidationParameter": {
          "description": "Configuration for how policies are validated.",
          "$ref": "GoogleAdsGoogleadsV21Common__PolicyValidationParameter"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new ad.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAd"
        },
        "update": {
          "description": "Update operation: The ad is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAd"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad is expected, in this format: `customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicyValidationParameter": {
      "id": "GoogleAdsGoogleadsV21Common__PolicyValidationParameter",
      "description": "Parameter for controlling how policy exemption is done.",
      "type": "object",
      "properties": {
        "ignorablePolicyTopics": {
          "description": "The list of policy topics that should not cause a PolicyFindingError to be reported. This field is currently only compatible with Enhanced Text Ad. It corresponds to the PolicyTopicEntry.topic field. Resources violating these policies will be saved, but will not be eligible to serve. They may begin serving at a later time due to a change in policies, re-review of the resource, or a change in advertiser certificates.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "exemptPolicyViolationKeys": {
          "description": "The list of policy violation keys that should not cause a PolicyViolationError to be reported. Not all policy violations are exemptable, refer to the is_exemptible field in the returned PolicyViolationError. Resources violating these polices will be saved, but will not be eligible to serve. They may begin serving at a later time due to a change in policies, re-review of the resource, or a change in advertiser certificates.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyViolationKey"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicyViolationKey": {
      "id": "GoogleAdsGoogleadsV21Common__PolicyViolationKey",
      "description": "Key of the violation. The key is used for referring to a violation when filing an exemption request.",
      "type": "object",
      "properties": {
        "policyName": {
          "description": "Unique ID of the violated policy.",
          "type": "string"
        },
        "violatingText": {
          "description": "The text that violates the policy if specified. Otherwise, refers to the policy in general (for example, when requesting to be exempt from the whole policy). If not specified for criterion exemptions, the whole policy is implied. Must be specified for ad exemptions.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAd": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAd",
      "description": "An ad group ad.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad. Ad group ad resource names have the form: `customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}`",
          "type": "string"
        },
        "status": {
          "description": "The status of the ad.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The ad group ad is enabled.",
            "The ad group ad is paused.",
            "The ad group ad is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "adGroup": {
          "description": "Immutable. The ad group to which the ad belongs.",
          "type": "string"
        },
        "ad": {
          "description": "Immutable. The ad.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "policySummary": {
          "description": "Output only. Policy information for the ad.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdPolicySummary"
        },
        "adStrength": {
          "description": "Output only. Overall ad strength for this ad group ad.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad strength is currently pending.",
            "No ads could be generated.",
            "Poor strength.",
            "Average strength.",
            "Good strength.",
            "Excellent strength."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "NO_ADS",
            "POOR",
            "AVERAGE",
            "GOOD",
            "EXCELLENT"
          ]
        },
        "actionItems": {
          "description": "Output only. A list of recommendations to improve the ad strength. For example, a recommendation could be \"Try adding a few more unique headlines or unpinning some assets.\".",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "labels": {
          "description": "Output only. The resource names of labels attached to this ad group ad.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "primaryStatus": {
          "description": "Output only. Provides aggregated view into why an ad group ad is not serving or not serving optimally.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad group ad is eligible to serve.",
            "The ad group ad is paused.",
            "The ad group ad is removed.",
            "The ad cannot serve now, but may serve later without advertiser action.",
            "The ad group ad is serving in a limited capacity.",
            "The ad group ad is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides reasons for why an ad group ad is not serving or not serving optimally.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "No value has been specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The user-specified campaign status is removed. Contributes to AdGroupAdPrimaryStatus.REMOVED.",
              "The user-specified campaign status is paused. Contributes to AdGroupAdPrimaryStatus.PAUSED.",
              "The user-specified time for this campaign to start is in the future. Contributes to AdGroupAdPrimaryStatus.PENDING.",
              "The user-specified time for this campaign to end has passed. Contributes to AdGroupAdPrimaryStatus.ENDED.",
              "The user-specified ad group status is paused. Contributes to AdGroupAdPrimaryStatus.PAUSED.",
              "The user-specified ad group status is removed. Contributes to AdGroupAdPrimaryStatus.REMOVED.",
              "The user-specified ad status is paused. Contributes to AdGroupAdPrimaryStatus.PAUSED.",
              "The user-specified ad status is removed. Contributes to AdGroupAdPrimaryStatus.REMOVED.",
              "The ad is disapproved. Contributes to AdGroupAdPrimaryStatus.NOT_ELIGIBLE.",
              "The ad is under review. Contributes to AdGroupAdPrimaryStatus.PENDING.",
              "The ad is poor quality. This is determined by the serving stack that served the Ad. Contributes to AdGroupAdPrimaryStatus.LIMITED.",
              "No eligible ads instances could be generated. Contributes to AdGroupAdPrimaryStatus.PENDING.",
              "The ad is internally labeled with a limiting label. Contributes to AdGroupAdPrimaryStatus.LIMITED.",
              "The ad is only serving in the user-specified area of interest. Contributes to AdGroupAdPrimaryStatus.LIMITED.",
              "The ad is part of an ongoing appeal. This reason does not impact AdGroupAdPrimaryStatus."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CAMPAIGN_REMOVED",
              "CAMPAIGN_PAUSED",
              "CAMPAIGN_PENDING",
              "CAMPAIGN_ENDED",
              "AD_GROUP_PAUSED",
              "AD_GROUP_REMOVED",
              "AD_GROUP_AD_PAUSED",
              "AD_GROUP_AD_REMOVED",
              "AD_GROUP_AD_DISAPPROVED",
              "AD_GROUP_AD_UNDER_REVIEW",
              "AD_GROUP_AD_POOR_QUALITY",
              "AD_GROUP_AD_NO_ADS",
              "AD_GROUP_AD_APPROVED_LABELED",
              "AD_GROUP_AD_AREA_OF_INTEREST_ONLY",
              "AD_GROUP_AD_UNDER_APPEAL"
            ]
          }
        },
        "adGroupAdAssetAutomationSettings": {
          "description": "Settings that control the types of asset automation. See the AssetAutomationTypeEnum documentation for the default opt in/out behavior of each type.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetAutomationSetting"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Ad": {
      "id": "GoogleAdsGoogleadsV21Resources__Ad",
      "description": "An ad.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad. Ad resource names have the form: `customers/{customer_id}/ads/{ad_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the ad.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "finalUrls": {
          "description": "The list of possible final URLs after all cross-domain redirects for the ad.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalAppUrls": {
          "description": "A list of final app URLs that will be used on mobile if the user has the specific app installed.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__FinalAppUrl"
          }
        },
        "finalMobileUrls": {
          "description": "The list of possible final mobile URLs after all cross-domain redirects for the ad.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "trackingUrlTemplate": {
          "description": "The URL template for constructing a tracking URL.",
          "type": "string"
        },
        "finalUrlSuffix": {
          "description": "The suffix to use when constructing a final URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "The list of mappings that can be used to substitute custom parameter tags in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`. For mutates, use url custom parameter operations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "displayUrl": {
          "description": "The URL that appears in the ad description for some ad formats.",
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of ad.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The ad is a text ad.",
            "The ad is an expanded text ad.",
            "The ad is an expanded dynamic search ad.",
            "The ad is a hotel ad.",
            "The ad is a Smart Shopping ad.",
            "The ad is a standard Shopping ad.",
            "The ad is a video ad.",
            "This ad is an Image ad.",
            "The ad is a responsive search ad.",
            "The ad is a legacy responsive display ad.",
            "The ad is an app ad.",
            "The ad is a legacy app install ad.",
            "The ad is a responsive display ad.",
            "The ad is a local ad.",
            "The ad is a display upload ad with the HTML5_UPLOAD_AD product type.",
            "The ad is a display upload ad with one of the DYNAMIC_HTML5_* product types.",
            "The ad is an app engagement ad.",
            "The ad is a Shopping Comparison Listing ad.",
            "Video bumper ad.",
            "Video non-skippable in-stream ad.",
            "Video TrueView in-stream ad.",
            "Video responsive ad.",
            "Smart campaign ad.",
            "Call ad.",
            "Universal app pre-registration ad.",
            "In-feed video ad.",
            "Demand Gen multi asset ad.",
            "Demand Gen carousel ad.",
            "Travel ad.",
            "Demand Gen video responsive ad.",
            "Demand Gen product ad.",
            "YouTube Audio ad."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TEXT_AD",
            "EXPANDED_TEXT_AD",
            "EXPANDED_DYNAMIC_SEARCH_AD",
            "HOTEL_AD",
            "SHOPPING_SMART_AD",
            "SHOPPING_PRODUCT_AD",
            "VIDEO_AD",
            "IMAGE_AD",
            "RESPONSIVE_SEARCH_AD",
            "LEGACY_RESPONSIVE_DISPLAY_AD",
            "APP_AD",
            "LEGACY_APP_INSTALL_AD",
            "RESPONSIVE_DISPLAY_AD",
            "LOCAL_AD",
            "HTML5_UPLOAD_AD",
            "DYNAMIC_HTML5_AD",
            "APP_ENGAGEMENT_AD",
            "SHOPPING_COMPARISON_LISTING_AD",
            "VIDEO_BUMPER_AD",
            "VIDEO_NON_SKIPPABLE_IN_STREAM_AD",
            "VIDEO_TRUEVIEW_IN_STREAM_AD",
            "VIDEO_RESPONSIVE_AD",
            "SMART_CAMPAIGN_AD",
            "CALL_AD",
            "APP_PRE_REGISTRATION_AD",
            "IN_FEED_VIDEO_AD",
            "DEMAND_GEN_MULTI_ASSET_AD",
            "DEMAND_GEN_CAROUSEL_AD",
            "TRAVEL_AD",
            "DEMAND_GEN_VIDEO_RESPONSIVE_AD",
            "DEMAND_GEN_PRODUCT_AD",
            "YOUTUBE_AUDIO_AD"
          ]
        },
        "addedByGoogleAds": {
          "description": "Output only. Indicates if this ad was automatically added by Google Ads and not by a user. For example, this could happen when ads are automatically created as suggestions for new ads based on knowledge of how existing ads are performing.",
          "readOnly": true,
          "type": "boolean"
        },
        "devicePreference": {
          "description": "The device preference for the ad. You can only specify a preference for mobile devices. When this preference is set the ad will be preferred over other ads when being displayed on a mobile device. The ad can still be displayed on other device types, for example, if no other ads are available. If unspecified (no device preference), all devices are targeted. This is only supported by some ad types.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Mobile devices with full browsers.",
            "Tablets with full browsers.",
            "Computers.",
            "Smart TVs and game consoles.",
            "Other device types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MOBILE",
            "TABLET",
            "DESKTOP",
            "CONNECTED_TV",
            "OTHER"
          ]
        },
        "urlCollections": {
          "description": "Additional URLs for the ad that are tagged with a unique identifier that can be referenced from other fields in the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UrlCollection"
          }
        },
        "name": {
          "description": "Immutable. The name of the ad. This is only used to be able to identify the ad. It does not need to be unique and does not affect the served ad. The name field is currently only supported for DisplayUploadAd, ImageAd, LegacyAppInstallAd, ShoppingComparisonListingAd, VideoAd, VideoResponsiveAd and DemandGen ads.",
          "type": "string"
        },
        "systemManagedResourceSource": {
          "description": "Output only. If this ad is system managed, then this field will indicate the source. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Generated ad variations experiment ad."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_VARIATIONS"
          ]
        },
        "textAd": {
          "description": "Immutable. Details pertaining to a text ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__TextAdInfo"
        },
        "expandedTextAd": {
          "description": "Details pertaining to an expanded text ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ExpandedTextAdInfo"
        },
        "callAd": {
          "description": "Details pertaining to a call ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__CallAdInfo"
        },
        "expandedDynamicSearchAd": {
          "description": "Immutable. Details pertaining to an Expanded Dynamic Search Ad. This type of ad has its headline, final URLs, and display URL auto-generated at serving time according to domain name specific information provided by `dynamic_search_ads_setting` linked at the campaign level.",
          "$ref": "GoogleAdsGoogleadsV21Common__ExpandedDynamicSearchAdInfo"
        },
        "hotelAd": {
          "description": "Details pertaining to a hotel ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelAdInfo"
        },
        "shoppingSmartAd": {
          "description": "Details pertaining to a Smart Shopping ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ShoppingSmartAdInfo"
        },
        "shoppingProductAd": {
          "description": "Details pertaining to a Shopping product ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ShoppingProductAdInfo"
        },
        "imageAd": {
          "description": "Immutable. Details pertaining to an Image ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ImageAdInfo"
        },
        "videoAd": {
          "description": "Details pertaining to a Video ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoAdInfo"
        },
        "videoResponsiveAd": {
          "description": "Details pertaining to a Video responsive ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoResponsiveAdInfo"
        },
        "responsiveSearchAd": {
          "description": "Details pertaining to a responsive search ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ResponsiveSearchAdInfo"
        },
        "legacyResponsiveDisplayAd": {
          "description": "Details pertaining to a legacy responsive display ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__LegacyResponsiveDisplayAdInfo"
        },
        "appAd": {
          "description": "Details pertaining to an app ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AppAdInfo"
        },
        "legacyAppInstallAd": {
          "description": "Immutable. Details pertaining to a legacy app install ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__LegacyAppInstallAdInfo"
        },
        "responsiveDisplayAd": {
          "description": "Details pertaining to a responsive display ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdInfo"
        },
        "localAd": {
          "description": "Details pertaining to a local ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocalAdInfo"
        },
        "displayUploadAd": {
          "description": "Details pertaining to a display upload ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__DisplayUploadAdInfo"
        },
        "appEngagementAd": {
          "description": "Details pertaining to an app engagement ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AppEngagementAdInfo"
        },
        "shoppingComparisonListingAd": {
          "description": "Details pertaining to a Shopping Comparison Listing ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__ShoppingComparisonListingAdInfo"
        },
        "smartCampaignAd": {
          "description": "Details pertaining to a Smart campaign ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__SmartCampaignAdInfo"
        },
        "appPreRegistrationAd": {
          "description": "Details pertaining to an app pre-registration ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AppPreRegistrationAdInfo"
        },
        "demandGenMultiAssetAd": {
          "description": "Details pertaining to a Demand Gen multi asset ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__DemandGenMultiAssetAdInfo"
        },
        "demandGenCarouselAd": {
          "description": "Details pertaining to a Demand Gen carousel ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__DemandGenCarouselAdInfo"
        },
        "demandGenVideoResponsiveAd": {
          "description": "Details pertaining to a Demand Gen video responsive ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__DemandGenVideoResponsiveAdInfo"
        },
        "demandGenProductAd": {
          "description": "Details pertaining to a Demand Gen product ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__DemandGenProductAdInfo"
        },
        "travelAd": {
          "description": "Details pertaining to a travel ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__TravelAdInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FinalAppUrl": {
      "id": "GoogleAdsGoogleadsV21Common__FinalAppUrl",
      "description": "A URL for deep linking into an app for the given operating system.",
      "type": "object",
      "properties": {
        "osType": {
          "description": "The operating system targeted by this URL. Required.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The Apple IOS operating system.",
            "The Android operating system."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IOS",
            "ANDROID"
          ]
        },
        "url": {
          "description": "The app deep link URL. Deep links specify a location in an app that corresponds to the content you'd like to show, and should be of the form {scheme}://{host_path} The scheme identifies which app to open. For your app, you can use a custom scheme that starts with the app's name. The host and path specify the unique location in the app where your content exists. Example: \"exampleapp://productid_1234\". Required.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomParameter": {
      "id": "GoogleAdsGoogleadsV21Common__CustomParameter",
      "description": "A mapping that can be used by custom parameter tags in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.",
      "type": "object",
      "properties": {
        "key": {
          "description": "The key matching the parameter tag name.",
          "type": "string"
        },
        "value": {
          "description": "The value to be substituted.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UrlCollection": {
      "id": "GoogleAdsGoogleadsV21Common__UrlCollection",
      "description": "Collection of urls that is tagged with a unique identifier.",
      "type": "object",
      "properties": {
        "urlCollectionId": {
          "description": "Unique identifier for this UrlCollection instance.",
          "type": "string"
        },
        "finalUrls": {
          "description": "A list of possible final URLs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalMobileUrls": {
          "description": "A list of possible final mobile URLs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "trackingUrlTemplate": {
          "description": "URL template for constructing a tracking URL.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TextAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__TextAdInfo",
      "description": "A text ad.",
      "type": "object",
      "properties": {
        "headline": {
          "description": "The headline of the ad.",
          "type": "string"
        },
        "description1": {
          "description": "The first line of the ad's description.",
          "type": "string"
        },
        "description2": {
          "description": "The second line of the ad's description.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ExpandedTextAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ExpandedTextAdInfo",
      "description": "An expanded text ad.",
      "type": "object",
      "properties": {
        "headlinePart1": {
          "description": "The first part of the ad's headline.",
          "type": "string"
        },
        "headlinePart2": {
          "description": "The second part of the ad's headline.",
          "type": "string"
        },
        "headlinePart3": {
          "description": "The third part of the ad's headline.",
          "type": "string"
        },
        "description": {
          "description": "The description of the ad.",
          "type": "string"
        },
        "description2": {
          "description": "The second description of the ad.",
          "type": "string"
        },
        "path1": {
          "description": "The text that can appear alongside the ad's displayed URL.",
          "type": "string"
        },
        "path2": {
          "description": "Additional text that can appear alongside the ad's displayed URL.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CallAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CallAdInfo",
      "description": "A call ad.",
      "type": "object",
      "properties": {
        "countryCode": {
          "description": "The country code in the ad.",
          "type": "string"
        },
        "phoneNumber": {
          "description": "The phone number in the ad.",
          "type": "string"
        },
        "businessName": {
          "description": "The business name in the ad.",
          "type": "string"
        },
        "headline1": {
          "description": "First headline in the ad.",
          "type": "string"
        },
        "headline2": {
          "description": "Second headline in the ad.",
          "type": "string"
        },
        "description1": {
          "description": "The first line of the ad's description.",
          "type": "string"
        },
        "description2": {
          "description": "The second line of the ad's description.",
          "type": "string"
        },
        "callTracked": {
          "description": "Whether to enable call tracking for the creative. Enabling call tracking also enables call conversions.",
          "type": "boolean"
        },
        "disableCallConversion": {
          "description": "Whether to disable call conversion for the creative. If set to `true`, disables call conversions even when `call_tracked` is `true`. If `call_tracked` is `false`, this field is ignored.",
          "type": "boolean"
        },
        "phoneNumberVerificationUrl": {
          "description": "The URL to be used for phone number verification.",
          "type": "string"
        },
        "conversionAction": {
          "description": "The conversion action to attribute a call conversion to. If not set a default conversion action is used. This field only has effect if `call_tracked` is set to `true`. Otherwise this field is ignored.",
          "type": "string"
        },
        "conversionReportingState": {
          "description": "The call conversion behavior of this call ad. It can use its own call conversion setting, inherit the account level setting, or be disabled.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Call conversion action is disabled.",
            "Call conversion action will use call conversion type set at the account level.",
            "Call conversion action will use call conversion type set at the resource (call only ads/call extensions) level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISABLED",
            "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION",
            "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION"
          ]
        },
        "path1": {
          "description": "First part of text that can be appended to the URL in the ad. Optional.",
          "type": "string"
        },
        "path2": {
          "description": "Second part of text that can be appended to the URL in the ad. This field can only be set when `path1` is also set. Optional.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ExpandedDynamicSearchAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ExpandedDynamicSearchAdInfo",
      "description": "An expanded dynamic search ad.",
      "type": "object",
      "properties": {
        "description": {
          "description": "The description of the ad.",
          "type": "string"
        },
        "description2": {
          "description": "The second description of the ad.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelAdInfo",
      "description": "A hotel ad.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ShoppingSmartAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ShoppingSmartAdInfo",
      "description": "A Smart Shopping ad.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ShoppingProductAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ShoppingProductAdInfo",
      "description": "A standard Shopping ad.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ImageAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ImageAdInfo",
      "description": "An image ad.",
      "type": "object",
      "properties": {
        "pixelWidth": {
          "description": "Width in pixels of the full size image.",
          "type": "string",
          "format": "int64"
        },
        "pixelHeight": {
          "description": "Height in pixels of the full size image.",
          "type": "string",
          "format": "int64"
        },
        "imageUrl": {
          "description": "URL of the full size image.",
          "type": "string"
        },
        "previewPixelWidth": {
          "description": "Width in pixels of the preview size image.",
          "type": "string",
          "format": "int64"
        },
        "previewPixelHeight": {
          "description": "Height in pixels of the preview size image.",
          "type": "string",
          "format": "int64"
        },
        "previewImageUrl": {
          "description": "URL of the preview size image.",
          "type": "string"
        },
        "mimeType": {
          "description": "The mime type of the image.",
          "type": "string",
          "enumDescriptions": [
            "The mime type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "MIME type of image/jpeg.",
            "MIME type of image/gif.",
            "MIME type of image/png.",
            "MIME type of application/x-shockwave-flash.",
            "MIME type of text/html.",
            "MIME type of application/pdf.",
            "MIME type of application/msword.",
            "MIME type of application/vnd.ms-excel.",
            "MIME type of application/rtf.",
            "MIME type of audio/wav.",
            "MIME type of audio/mp3.",
            "MIME type of application/x-html5-ad-zip."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMAGE_JPEG",
            "IMAGE_GIF",
            "IMAGE_PNG",
            "FLASH",
            "TEXT_HTML",
            "PDF",
            "MSWORD",
            "MSEXCEL",
            "RTF",
            "AUDIO_WAV",
            "AUDIO_MP3",
            "HTML5_AD_ZIP"
          ]
        },
        "name": {
          "description": "The name of the image. If the image was created from a MediaFile, this is the MediaFile's name. If the image was created from bytes, this is empty.",
          "type": "string"
        },
        "imageAsset": {
          "description": "The image assets used for the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        },
        "data": {
          "description": "Raw image data as bytes.",
          "type": "string",
          "format": "byte"
        },
        "adIdToCopyImageFrom": {
          "description": "An ad ID to copy the image from.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdImageAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdImageAsset",
      "description": "An image asset used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this image.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoAdInfo",
      "description": "A video ad.",
      "type": "object",
      "properties": {
        "video": {
          "description": "The YouTube video assets used for the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
        },
        "inStream": {
          "description": "Video TrueView in-stream ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoTrueViewInStreamAdInfo"
        },
        "bumper": {
          "description": "Video bumper in-stream ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoBumperInStreamAdInfo"
        },
        "outStream": {
          "description": "Video out-stream ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoOutstreamAdInfo"
        },
        "nonSkippable": {
          "description": "Video non-skippable in-stream ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoNonSkippableInStreamAdInfo"
        },
        "inFeed": {
          "description": "In-feed video ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__InFeedVideoAdInfo"
        },
        "audio": {
          "description": "YouTube Audio ad format.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeAudioAdInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdVideoAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdVideoAsset",
      "description": "A video asset used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this video.",
          "type": "string"
        },
        "adVideoAssetInfo": {
          "description": "Contains info fields for this AdVideoAsset.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAssetInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdVideoAssetInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AdVideoAssetInfo",
      "description": "Contains info fields for AdVideoAssets.",
      "type": "object",
      "properties": {
        "adVideoAssetInventoryPreferences": {
          "description": "List of inventory preferences for this AdVideoAsset. This field can only be set for DiscoveryVideoResponsiveAd. The video assets with an inventory asset preference set will be preferred over other videos from the same ad during serving time. For example, consider this ad being served for a specific inventory. The server will first try to match an eligible video with a matching preference for that inventory. Videos with no preferences are chosen only when a video with matching preference and eligible for a given ad slot can be found.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAssetInventoryPreferences"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdVideoAssetInventoryPreferences": {
      "id": "GoogleAdsGoogleadsV21Common__AdVideoAssetInventoryPreferences",
      "description": "YouTube Video Asset inventory preferences.",
      "type": "object",
      "properties": {
        "inFeedPreference": {
          "description": "When true, YouTube Video Asset with this inventory preference will be preferred when choosing a video to serve In Feed.",
          "type": "boolean"
        },
        "inStreamPreference": {
          "description": "When true, YouTube Video Asset with this inventory preference will be preferred when choosing a video to serve In Stream.",
          "type": "boolean"
        },
        "shortsPreference": {
          "description": "When true, YouTube Video Asset with this inventory preference will be preferred when choosing a video to serve on YouTube Shorts.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoTrueViewInStreamAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoTrueViewInStreamAdInfo",
      "description": "Representation of video TrueView in-stream ad format (ad shown during video playback, often at beginning, which displays a skip button a few seconds into the video).",
      "type": "object",
      "properties": {
        "actionButtonLabel": {
          "description": "Label on the CTA (call-to-action) button taking the user to the video ad's final URL. Required for TrueView for action campaigns, optional otherwise.",
          "type": "string"
        },
        "actionHeadline": {
          "description": "Additional text displayed with the CTA (call-to-action) button to give context and encourage clicking on the button.",
          "type": "string"
        },
        "companionBanner": {
          "description": "The image assets of the companion banner used with the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoBumperInStreamAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoBumperInStreamAdInfo",
      "description": "Representation of video bumper in-stream ad format (very short in-stream non-skippable video ad).",
      "type": "object",
      "properties": {
        "companionBanner": {
          "description": "The image assets of the companion banner used with the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        },
        "actionButtonLabel": {
          "description": "Label on the \"Call To Action\" button taking the user to the video ad's final URL.",
          "type": "string"
        },
        "actionHeadline": {
          "description": "Additional text displayed with the CTA (call-to-action) button to give context and encourage clicking on the button.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoOutstreamAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoOutstreamAdInfo",
      "description": "Representation of video out-stream ad format (ad shown alongside a feed with automatic playback, without sound).",
      "type": "object",
      "properties": {
        "headline": {
          "description": "The headline of the ad.",
          "type": "string"
        },
        "description": {
          "description": "The description line.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoNonSkippableInStreamAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoNonSkippableInStreamAdInfo",
      "description": "Representation of video non-skippable in-stream ad format (15 second in-stream non-skippable video ad).",
      "type": "object",
      "properties": {
        "companionBanner": {
          "description": "The image assets of the companion banner used with the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        },
        "actionButtonLabel": {
          "description": "Label on the \"Call To Action\" button taking the user to the video ad's final URL.",
          "type": "string"
        },
        "actionHeadline": {
          "description": "Additional text displayed with the \"Call To Action\" button to give context and encourage clicking on the button.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__InFeedVideoAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__InFeedVideoAdInfo",
      "description": "Representation of In-feed video ad format.",
      "type": "object",
      "properties": {
        "headline": {
          "description": "The headline of the ad.",
          "type": "string"
        },
        "description1": {
          "description": "First text line for the ad.",
          "type": "string"
        },
        "description2": {
          "description": "Second text line for the ad.",
          "type": "string"
        },
        "thumbnail": {
          "description": "Video thumbnail image to use.",
          "type": "string",
          "enumDescriptions": [
            "The type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The default thumbnail. Can be auto-generated or user-uploaded.",
            "Thumbnail 1, generated from the video.",
            "Thumbnail 2, generated from the video.",
            "Thumbnail 3, generated from the video."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT_THUMBNAIL",
            "THUMBNAIL_1",
            "THUMBNAIL_2",
            "THUMBNAIL_3"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeAudioAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeAudioAdInfo",
      "description": "Representation of YouTube Audio ad format.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__VideoResponsiveAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoResponsiveAdInfo",
      "description": "A video responsive ad.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets used for the short headline. Currently, only a single value for the short headline is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "longHeadlines": {
          "description": "List of text assets used for the long headline. Currently, only a single value for the long headline is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets used for the description. Currently, only a single value for the description is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "callToActions": {
          "description": "List of text assets used for the button, for example, the \"Call To Action\" button. Currently, only a single value for the button is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "videos": {
          "description": "List of YouTube video assets used for the ad. Currently, only a single value for the YouTube video asset is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        },
        "companionBanners": {
          "description": "List of image assets used for the companion banner. Currently, only a single value for the companion banner asset is supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "breadcrumb1": {
          "description": "First part of text that appears in the ad with the displayed URL.",
          "type": "string"
        },
        "breadcrumb2": {
          "description": "Second part of text that appears in the ad with the displayed URL.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdTextAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdTextAsset",
      "description": "A text asset used inside an ad.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Asset text.",
          "type": "string"
        },
        "pinnedField": {
          "description": "The pinned field of the asset. This restricts the asset to only serve within this field. Multiple assets can be pinned to the same field. An asset that is unpinned or pinned to a different field will not serve in a field where some other asset has been pinned.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The asset is used in headline 1.",
            "The asset is used in headline 2.",
            "The asset is used in headline 3.",
            "The asset is used in description 1.",
            "The asset is used in description 2.",
            "The asset was used in a headline. Use this only if there is only one headline in the ad. Otherwise, use the HEADLINE_1, HEADLINE_2 or HEADLINE_3 enums",
            "The asset was used as a headline in portrait image.",
            "The asset was used in a long headline (used in MultiAssetResponsiveAd).",
            "The asset was used in a description. Use this only if there is only one description in the ad. Otherwise, use the DESCRIPTION_1 or DESCRIPTION_@ enums",
            "The asset was used as description in portrait image.",
            "The asset was used as business name in portrait image.",
            "The asset was used as business name.",
            "The asset was used as a marketing image.",
            "The asset was used as a marketing image in portrait image.",
            "The asset was used as a square marketing image.",
            "The asset was used as a portrait marketing image.",
            "The asset was used as a logo.",
            "The asset was used as a landscape logo.",
            "The asset was used as a call-to-action.",
            "The asset was used as a YouTube video.",
            "This asset is used as a sitelink.",
            "This asset is used as a call.",
            "This asset is used as a mobile app.",
            "This asset is used as a callout.",
            "This asset is used as a structured snippet.",
            "This asset is used as a price.",
            "This asset is used as a promotion.",
            "This asset is used as an image.",
            "The asset is used as a lead form.",
            "The asset is used as a business logo.",
            "The asset is used as a description prefix."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE_1",
            "HEADLINE_2",
            "HEADLINE_3",
            "DESCRIPTION_1",
            "DESCRIPTION_2",
            "HEADLINE",
            "HEADLINE_IN_PORTRAIT",
            "LONG_HEADLINE",
            "DESCRIPTION",
            "DESCRIPTION_IN_PORTRAIT",
            "BUSINESS_NAME_IN_PORTRAIT",
            "BUSINESS_NAME",
            "MARKETING_IMAGE",
            "MARKETING_IMAGE_IN_PORTRAIT",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "CALL_TO_ACTION",
            "YOU_TUBE_VIDEO",
            "SITELINK",
            "CALL",
            "MOBILE_APP",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "PRICE",
            "PROMOTION",
            "AD_IMAGE",
            "LEAD_FORM",
            "BUSINESS_LOGO",
            "DESCRIPTION_PREFIX"
          ]
        },
        "assetPerformanceLabel": {
          "description": "The performance label of this text asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This asset does not yet have any performance informantion. This may be because it is still under review.",
            "The asset has started getting impressions but the stats are not statistically significant enough to get an asset performance label.",
            "Worst performing assets.",
            "Good performing assets.",
            "Best performing assets."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "LEARNING",
            "LOW",
            "GOOD",
            "BEST"
          ]
        },
        "policySummaryInfo": {
          "description": "The policy summary of this text asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdAssetPolicySummary"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdAssetPolicySummary": {
      "id": "GoogleAdsGoogleadsV21Common__AdAssetPolicySummary",
      "description": "Contains policy information for an asset inside an ad.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "The list of policy findings for this asset.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        },
        "reviewStatus": {
          "description": "Where in the review process this asset.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Currently under review.",
            "Primary review complete. Other reviews may be continuing.",
            "The resource has been resubmitted for approval or its policy decision has been appealed.",
            "The resource is eligible and may be serving but could still undergo further review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REVIEW_IN_PROGRESS",
            "REVIEWED",
            "UNDER_APPEAL",
            "ELIGIBLE_MAY_SERVE"
          ]
        },
        "approvalStatus": {
          "description": "The overall approval status of this asset, which is calculated based on the status of its individual policy topic entries.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Will not serve.",
            "Serves with restrictions.",
            "Serves without restrictions.",
            "Will not serve in targeted countries, but may serve for users who are searching for information about the targeted countries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISAPPROVED",
            "APPROVED_LIMITED",
            "APPROVED",
            "AREA_OF_INTEREST_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicyTopicEntry": {
      "id": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry",
      "description": "Policy finding attached to a resource (for example, alcohol policy associated with a site that sells alcohol). Each PolicyTopicEntry has a topic that indicates the specific ads policy the entry is about and a type to indicate the effect that the entry will have on serving. It may optionally have one or more evidences that indicate the reason for the finding. It may also optionally have one or more constraints that provide details about how serving may be restricted.",
      "type": "object",
      "properties": {
        "topic": {
          "description": "Policy topic this finding refers to. For example, \"ALCOHOL\", \"TRADEMARKS_IN_AD_TEXT\", or \"DESTINATION_NOT_WORKING\". The set of possible policy topics is not fixed for a particular API version and may change at any time.",
          "type": "string"
        },
        "type": {
          "description": "Describes the negative or positive effect this policy will have on serving.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The resource will not be served.",
            "The resource will not be served under some circumstances.",
            "The resource cannot serve at all because of the current targeting criteria.",
            "May be of interest, but does not limit how the resource is served.",
            "Could increase coverage beyond normal.",
            "Constrained for all targeted countries, but may serve in other countries through area of interest."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PROHIBITED",
            "LIMITED",
            "FULLY_LIMITED",
            "DESCRIPTIVE",
            "BROADENING",
            "AREA_OF_INTEREST_ONLY"
          ]
        },
        "evidences": {
          "description": "Additional information that explains policy finding (for example, the brand name for a trademark finding).",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEvidence"
          }
        },
        "constraints": {
          "description": "Indicates how serving of this resource may be affected (for example, not serving in a country).",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicConstraint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicyTopicEvidence": {
      "id": "GoogleAdsGoogleadsV21Common__PolicyTopicEvidence",
      "description": "Additional information that explains a policy finding.",
      "type": "object",
      "properties": {
        "websiteList": {
          "description": "List of websites linked with this resource.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_WebsiteList"
        },
        "textList": {
          "description": "List of evidence found in the text of a resource.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_TextList"
        },
        "languageCode": {
          "description": "The language the resource was detected to be written in. This is an IETF language tag such as \"en-US\".",
          "type": "string"
        },
        "destinationTextList": {
          "description": "The text in the destination of the resource that is causing a policy finding.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationTextList"
        },
        "destinationMismatch": {
          "description": "Mismatch between the destinations of a resource's URLs.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationMismatch"
        },
        "destinationNotWorking": {
          "description": "Details when the destination is returning an HTTP error code or isn't functional in all locations for commonly used devices.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationNotWorking"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_WebsiteList": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_WebsiteList",
      "description": "A list of websites that caused a policy finding. Used for ONE_WEBSITE_PER_AD_GROUP policy topic, for example. In case there are more than five websites, only the top five (those that appear in resources the most) will be listed here.",
      "type": "object",
      "properties": {
        "websites": {
          "description": "Websites that caused the policy finding.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_TextList": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_TextList",
      "description": "A list of fragments of text that violated a policy.",
      "type": "object",
      "properties": {
        "texts": {
          "description": "The fragments of text from the resource that caused the policy finding.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationTextList": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationTextList",
      "description": "A list of strings found in a destination page that caused a policy finding.",
      "type": "object",
      "properties": {
        "destinationTexts": {
          "description": "List of text found in the resource's destination page.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationMismatch": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationMismatch",
      "description": "Evidence of mismatches between the URLs of a resource.",
      "type": "object",
      "properties": {
        "urlTypes": {
          "description": "The set of URLs that did not match each other.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "No value has been specified.",
              "The received value is not known in this version. This is a response-only value.",
              "The display url.",
              "The final url.",
              "The final mobile url.",
              "The tracking url template, with substituted desktop url.",
              "The tracking url template, with substituted mobile url."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "DISPLAY_URL",
              "FINAL_URL",
              "FINAL_MOBILE_URL",
              "TRACKING_URL",
              "MOBILE_TRACKING_URL"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationNotWorking": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicEvidence_DestinationNotWorking",
      "description": "Evidence details when the destination is returning an HTTP error code or isn't functional in all locations for commonly used devices.",
      "type": "object",
      "properties": {
        "expandedUrl": {
          "description": "The full URL that didn't work.",
          "type": "string"
        },
        "device": {
          "description": "The type of device that failed to load the URL.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Landing page doesn't work on desktop device.",
            "Landing page doesn't work on Android device.",
            "Landing page doesn't work on iOS device."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DESKTOP",
            "ANDROID",
            "IOS"
          ]
        },
        "lastCheckedDateTime": {
          "description": "The time the URL was last checked. The format is \"YYYY-MM-DD HH:MM:SS\". Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "type": "string"
        },
        "dnsErrorType": {
          "description": "The type of DNS error.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Host name not found in DNS when fetching landing page.",
            "Google internal crawler issue when communicating with DNS. This error doesn't mean the landing page doesn't work. Google will recrawl the landing page."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HOSTNAME_NOT_FOUND",
            "GOOGLE_CRAWLER_DNS_ISSUE"
          ]
        },
        "httpErrorCode": {
          "description": "The HTTP error code.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicyTopicConstraint": {
      "id": "GoogleAdsGoogleadsV21Common__PolicyTopicConstraint",
      "description": "Describes the effect on serving that a policy topic entry will have.",
      "type": "object",
      "properties": {
        "countryConstraintList": {
          "description": "Countries where the resource cannot serve.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraintList"
        },
        "resellerConstraint": {
          "description": "Reseller constraint.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_ResellerConstraint"
        },
        "certificateMissingInCountryList": {
          "description": "Countries where a certificate is required for serving.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraintList"
        },
        "certificateDomainMismatchInCountryList": {
          "description": "Countries where the resource's domain is not covered by the certificates associated with it.",
          "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraintList"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraintList": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraintList",
      "description": "A list of countries where a resource's serving is constrained.",
      "type": "object",
      "properties": {
        "totalTargetedCountries": {
          "description": "Total number of countries targeted by the resource.",
          "type": "integer",
          "format": "int32"
        },
        "countries": {
          "description": "Countries in which serving is restricted.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraint": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_CountryConstraint",
      "description": "Indicates that a resource's ability to serve in a particular country is constrained.",
      "type": "object",
      "properties": {
        "countryCriterion": {
          "description": "Geo target constant resource name of the country in which serving is constrained.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_ResellerConstraint": {
      "id": "GoogleAdsGoogleadsV21Common_PolicyTopicConstraint_ResellerConstraint",
      "description": "Indicates that a policy topic was constrained due to disapproval of the website for reseller purposes.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ResponsiveSearchAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ResponsiveSearchAdInfo",
      "description": "A responsive search ad. Responsive search ads let you create an ad that adapts to show more text, and more relevant messages, to your customers. Enter multiple headlines and descriptions when creating a responsive search ad, and over time, Google Ads will automatically test different combinations and learn which combinations perform best. By adapting your ad's content to more closely match potential customers' search terms, responsive search ads may improve your campaign's performance. More information at https://support.google.com/google-ads/answer/7684791",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets for headlines. When the ad serves the headlines will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets for descriptions. When the ad serves the descriptions will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "path1": {
          "description": "First part of text that can be appended to the URL in the ad.",
          "type": "string"
        },
        "path2": {
          "description": "Second part of text that can be appended to the URL in the ad. This field can only be set when `path1` is also set.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LegacyResponsiveDisplayAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LegacyResponsiveDisplayAdInfo",
      "description": "A legacy responsive display ad. Ads of this type are labeled 'Responsive ads' in the Google Ads UI.",
      "type": "object",
      "properties": {
        "shortHeadline": {
          "description": "The short version of the ad's headline.",
          "type": "string"
        },
        "longHeadline": {
          "description": "The long version of the ad's headline.",
          "type": "string"
        },
        "description": {
          "description": "The description of the ad.",
          "type": "string"
        },
        "businessName": {
          "description": "The business name in the ad.",
          "type": "string"
        },
        "allowFlexibleColor": {
          "description": "Advertiser's consent to allow flexible color. When true, the ad may be served with different color if necessary. When false, the ad will be served with the specified colors or a neutral color. The default value is `true`. Must be true if `main_color` and `accent_color` are not set.",
          "type": "boolean"
        },
        "accentColor": {
          "description": "The accent color of the ad in hexadecimal, for example, #ffffff for white. If one of `main_color` and `accent_color` is set, the other is required as well.",
          "type": "string"
        },
        "mainColor": {
          "description": "The main color of the ad in hexadecimal, for example, #ffffff for white. If one of `main_color` and `accent_color` is set, the other is required as well.",
          "type": "string"
        },
        "callToActionText": {
          "description": "The call-to-action text for the ad.",
          "type": "string"
        },
        "logoImage": {
          "description": "The MediaFile resource name of the logo image used in the ad.",
          "type": "string"
        },
        "squareLogoImage": {
          "description": "The MediaFile resource name of the square logo image used in the ad.",
          "type": "string"
        },
        "marketingImage": {
          "description": "The MediaFile resource name of the marketing image used in the ad.",
          "type": "string"
        },
        "squareMarketingImage": {
          "description": "The MediaFile resource name of the square marketing image used in the ad.",
          "type": "string"
        },
        "formatSetting": {
          "description": "Specifies which format the ad will be served in. Default is ALL_FORMATS.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Text, image and native formats.",
            "Text and image formats.",
            "Native format, for example, the format rendering is controlled by the publisher and not by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_FORMATS",
            "NON_NATIVE",
            "NATIVE"
          ]
        },
        "pricePrefix": {
          "description": "Prefix before price. For example, 'as low as'.",
          "type": "string"
        },
        "promoText": {
          "description": "Promotion text used for dynamic formats of responsive ads. For example 'Free two-day shipping'.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AppAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AppAdInfo",
      "description": "An app ad.",
      "type": "object",
      "properties": {
        "mandatoryAdText": {
          "description": "Mandatory ad text.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "headlines": {
          "description": "List of text assets for headlines. When the ad serves the headlines will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets for descriptions. When the ad serves the descriptions will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "images": {
          "description": "List of image assets that may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "youtubeVideos": {
          "description": "List of YouTube video assets that may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        },
        "html5MediaBundles": {
          "description": "List of media bundle assets that may be used with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdMediaBundleAsset"
          }
        },
        "appDeepLink": {
          "description": "An app deep link asset that may be used with the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdAppDeepLinkAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdMediaBundleAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdMediaBundleAsset",
      "description": "A media bundle asset used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this media bundle.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdAppDeepLinkAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdAppDeepLinkAsset",
      "description": "An app deep link used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this app deep link asset.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LegacyAppInstallAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LegacyAppInstallAdInfo",
      "description": "A legacy app install ad that only can be used by a few select customers.",
      "type": "object",
      "properties": {
        "appId": {
          "description": "The ID of the mobile app.",
          "type": "string"
        },
        "appStore": {
          "description": "The app store the mobile app is available in.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Apple iTunes.",
            "Google Play.",
            "Windows Store.",
            "Windows Phone Store.",
            "The app is hosted in a Chinese app store."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLE_APP_STORE",
            "GOOGLE_PLAY",
            "WINDOWS_STORE",
            "WINDOWS_PHONE_STORE",
            "CN_APP_STORE"
          ]
        },
        "headline": {
          "description": "The headline of the ad.",
          "type": "string"
        },
        "description1": {
          "description": "The first description line of the ad.",
          "type": "string"
        },
        "description2": {
          "description": "The second description line of the ad.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdInfo",
      "description": "A responsive display ad.",
      "type": "object",
      "properties": {
        "marketingImages": {
          "description": "Marketing images to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 600x314 and the aspect ratio must be 1.91:1 (+-1%). At least one `marketing_image` is required. Combined with `square_marketing_images`, the maximum is 15.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "squareMarketingImages": {
          "description": "Square marketing images to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 300x300 and the aspect ratio must be 1:1 (+-1%). At least one square `marketing_image` is required. Combined with `marketing_images`, the maximum is 15.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "logoImages": {
          "description": "Logo images to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 512x128 and the aspect ratio must be 4:1 (+-1%). Combined with `square_logo_images`, the maximum is 5.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "squareLogoImages": {
          "description": "Square logo images to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%). Combined with `logo_images`, the maximum is 5.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "headlines": {
          "description": "Short format headlines for the ad. The maximum length is 30 characters. At least 1 and max 5 headlines can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "longHeadline": {
          "description": "A required long format headline. The maximum length is 90 characters.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "descriptions": {
          "description": "Descriptive texts for the ad. The maximum length is 90 characters. At least 1 and max 5 headlines can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "youtubeVideos": {
          "description": "Optional YouTube videos for the ad. A maximum of 5 videos can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        },
        "businessName": {
          "description": "The advertiser/brand name. Maximum display width is 25.",
          "type": "string"
        },
        "mainColor": {
          "description": "The main color of the ad in hexadecimal, for example, #ffffff for white. If one of `main_color` and `accent_color` is set, the other is required as well.",
          "type": "string"
        },
        "accentColor": {
          "description": "The accent color of the ad in hexadecimal, for example, #ffffff for white. If one of `main_color` and `accent_color` is set, the other is required as well.",
          "type": "string"
        },
        "allowFlexibleColor": {
          "description": "Advertiser's consent to allow flexible color. When true, the ad may be served with different color if necessary. When false, the ad will be served with the specified colors or a neutral color. The default value is `true`. Must be true if `main_color` and `accent_color` are not set.",
          "type": "boolean"
        },
        "callToActionText": {
          "description": "The call-to-action text for the ad. Maximum display width is 30.",
          "type": "string"
        },
        "pricePrefix": {
          "description": "Prefix before price. For example, 'as low as'.",
          "type": "string"
        },
        "promoText": {
          "description": "Promotion text used for dynamic formats of responsive ads. For example 'Free two-day shipping'.",
          "type": "string"
        },
        "formatSetting": {
          "description": "Specifies which format the ad will be served in. Default is ALL_FORMATS.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Text, image and native formats.",
            "Text and image formats.",
            "Native format, for example, the format rendering is controlled by the publisher and not by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_FORMATS",
            "NON_NATIVE",
            "NATIVE"
          ]
        },
        "controlSpec": {
          "description": "Specification for various creative controls.",
          "$ref": "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdControlSpec"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdControlSpec": {
      "id": "GoogleAdsGoogleadsV21Common__ResponsiveDisplayAdControlSpec",
      "description": "Specification for various creative controls for a responsive display ad.",
      "type": "object",
      "properties": {
        "enableAssetEnhancements": {
          "description": "Whether the advertiser has opted into the asset enhancements feature.",
          "type": "boolean"
        },
        "enableAutogenVideo": {
          "description": "Whether the advertiser has opted into auto-gen video feature.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocalAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LocalAdInfo",
      "description": "A local ad.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets for headlines. When the ad serves the headlines will be selected from this list. At least 1 and at most 5 headlines must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets for descriptions. When the ad serves the descriptions will be selected from this list. At least 1 and at most 5 descriptions must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "callToActions": {
          "description": "List of text assets for call-to-actions. When the ad serves the call-to-actions will be selected from this list. At least 1 and at most 5 call-to-actions must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "marketingImages": {
          "description": "List of marketing image assets that may be displayed with the ad. The images must be 314x600 pixels or 320x320 pixels. At least 1 and at most 20 image assets must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "logoImages": {
          "description": "List of logo image assets that may be displayed with the ad. The images must be 128x128 pixels and not larger than 120KB. At least 1 and at most 5 image assets must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "videos": {
          "description": "List of YouTube video assets that may be displayed with the ad. At least 1 and at most 20 video assets must be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        },
        "path1": {
          "description": "First part of optional text that can be appended to the URL in the ad.",
          "type": "string"
        },
        "path2": {
          "description": "Second part of optional text that can be appended to the URL in the ad. This field can only be set when `path1` is also set.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DisplayUploadAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DisplayUploadAdInfo",
      "description": "A generic type of display ad. The exact ad format is controlled by the `display_upload_product_type` field, which determines what kinds of data need to be included with the ad.",
      "type": "object",
      "properties": {
        "displayUploadProductType": {
          "description": "The product type of this ad. See comments on the enum for details.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "HTML5 upload ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set.",
            "Dynamic HTML5 education ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in an education campaign.",
            "Dynamic HTML5 flight ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a flight campaign.",
            "Dynamic HTML5 hotel and rental ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a hotel campaign.",
            "Dynamic HTML5 job ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a job campaign.",
            "Dynamic HTML5 local ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a local campaign.",
            "Dynamic HTML5 real estate ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a real estate campaign.",
            "Dynamic HTML5 custom ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a custom campaign.",
            "Dynamic HTML5 travel ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a travel campaign.",
            "Dynamic HTML5 hotel ad. This product type requires the upload_media_bundle field in DisplayUploadAdInfo to be set. Can only be used in a hotel campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HTML5_UPLOAD_AD",
            "DYNAMIC_HTML5_EDUCATION_AD",
            "DYNAMIC_HTML5_FLIGHT_AD",
            "DYNAMIC_HTML5_HOTEL_RENTAL_AD",
            "DYNAMIC_HTML5_JOB_AD",
            "DYNAMIC_HTML5_LOCAL_AD",
            "DYNAMIC_HTML5_REAL_ESTATE_AD",
            "DYNAMIC_HTML5_CUSTOM_AD",
            "DYNAMIC_HTML5_TRAVEL_AD",
            "DYNAMIC_HTML5_HOTEL_AD"
          ]
        },
        "mediaBundle": {
          "description": "A media bundle asset to be used in the ad. For information about the media bundle for HTML5_UPLOAD_AD, see https://support.google.com/google-ads/answer/1722096 Media bundles that are part of dynamic product types use a special format that needs to be created through the Google Web Designer. See https://support.google.com/webdesigner/answer/7543898 for more information.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdMediaBundleAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AppEngagementAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AppEngagementAdInfo",
      "description": "App engagement ads allow you to write text encouraging a specific action in the app, like checking in, making a purchase, or booking a flight. They allow you to send users to a specific part of your app where they can find what they're looking for easier and faster.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets for headlines. When the ad serves the headlines will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets for descriptions. When the ad serves the descriptions will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "images": {
          "description": "List of image assets that may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "videos": {
          "description": "List of video assets that may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ShoppingComparisonListingAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ShoppingComparisonListingAdInfo",
      "description": "A Shopping Comparison Listing ad.",
      "type": "object",
      "properties": {
        "headline": {
          "description": "Headline of the ad. This field is required. Allowed length is between 25 and 45 characters.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SmartCampaignAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__SmartCampaignAdInfo",
      "description": "A Smart campaign ad.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets, each of which corresponds to a headline when the ad serves. This list consists of a minimum of 3 and up to 15 text assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets, each of which corresponds to a description when the ad serves. This list consists of a minimum of 2 and up to 4 text assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AppPreRegistrationAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AppPreRegistrationAdInfo",
      "description": "App pre-registration ads link to your app or game listing on Google Play, and can run on Google Play, on YouTube (in-stream only), and within other apps and mobile websites on the Display Network. It will help capture people's interest in your app or game and generate an early install base for your app or game before a launch.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets for headlines. When the ad serves the headlines will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets for descriptions. When the ad serves the descriptions will be selected from this list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "images": {
          "description": "List of image asset IDs whose images may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "youtubeVideos": {
          "description": "List of YouTube video asset IDs whose videos may be displayed with the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DemandGenMultiAssetAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DemandGenMultiAssetAdInfo",
      "description": "A Demand Gen multi asset ad.",
      "type": "object",
      "properties": {
        "marketingImages": {
          "description": "Marketing image assets to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 600x314 and the aspect ratio must be 1.91:1 (+-1%). Required if square_marketing_images is not present. Combined with `square_marketing_images`, `portrait_marketing_images`, and `tall_portrait_marketing_images` the maximum is 20.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "squareMarketingImages": {
          "description": "Square marketing image assets to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 300x300 and the aspect ratio must be 1:1 (+-1%). Required if marketing_images is not present. Combined with `marketing_images`, `portrait_marketing_images`, and `tall_portrait_marketing_images` the maximum is 20.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "portraitMarketingImages": {
          "description": "Portrait marketing image assets to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 480x600 and the aspect ratio must be 4:5 (+-1%). Combined with `marketing_images`, `square_marketing_images`, and `tall_portrait_marketing_images` the maximum is 20.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "tallPortraitMarketingImages": {
          "description": "Tall portrait marketing image assets to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 600x1067 and the aspect ratio must be 9:16 (+-1%). Combined with `marketing_images`, `square_marketing_images`, and `portrait_marketing_images`, the maximum is 20.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "logoImages": {
          "description": "Logo image assets to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%). At least 1 and max 5 logo images can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "headlines": {
          "description": "Headline text asset of the ad. Maximum display width is 30. At least 1 and max 5 headlines can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "The descriptive text of the ad. Maximum display width is 90. At least 1 and max 5 descriptions can be specified.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "businessName": {
          "description": "The Advertiser/brand name. Maximum display width is 25. Required.",
          "type": "string"
        },
        "callToActionText": {
          "description": "Call to action text.",
          "type": "string"
        },
        "leadFormOnly": {
          "description": "Boolean option that indicates if this ad must be served with lead form.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DemandGenCarouselAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DemandGenCarouselAdInfo",
      "description": "A Demand Gen carousel ad.",
      "type": "object",
      "properties": {
        "businessName": {
          "description": "Required. The Advertiser/brand name.",
          "type": "string"
        },
        "logoImage": {
          "description": "Required. Logo image to be used in the ad. The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%).",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        },
        "headline": {
          "description": "Required. Headline of the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "description": {
          "description": "Required. The descriptive text of the ad.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "callToActionText": {
          "description": "Call to action text.",
          "type": "string"
        },
        "carouselCards": {
          "description": "Required. Carousel cards that will display with the ad. Min 2 max 10.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdDemandGenCarouselCardAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdDemandGenCarouselCardAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdDemandGenCarouselCardAsset",
      "description": "A Demand Gen carousel card asset used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this discovery carousel card.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DemandGenVideoResponsiveAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DemandGenVideoResponsiveAdInfo",
      "description": "A Demand Gen video responsive ad.",
      "type": "object",
      "properties": {
        "headlines": {
          "description": "List of text assets used for the short headline.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "longHeadlines": {
          "description": "List of text assets used for the long headline.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "descriptions": {
          "description": "List of text assets used for the description.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
          }
        },
        "videos": {
          "description": "List of YouTube video assets used for the ad.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        },
        "logoImages": {
          "description": "Logo image to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%).",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
          }
        },
        "breadcrumb1": {
          "description": "First part of text that appears in the ad with the displayed URL.",
          "type": "string"
        },
        "breadcrumb2": {
          "description": "Second part of text that appears in the ad with the displayed URL.",
          "type": "string"
        },
        "businessName": {
          "description": "Required. The advertiser/brand name.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "callToActions": {
          "description": "Assets of type CallToActionAsset used for the \"Call To Action\" button.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdCallToActionAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdCallToActionAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AdCallToActionAsset",
      "description": "A call to action asset used inside an ad.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The Asset resource name of this call to action asset.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DemandGenProductAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DemandGenProductAdInfo",
      "description": "A Demand Gen product ad.",
      "type": "object",
      "properties": {
        "headline": {
          "description": "Required. Text asset used for the short headline.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "description": {
          "description": "Required. Text asset used for the description.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "logoImage": {
          "description": "Required. Logo image to be used in the ad. Valid image types are GIF, JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%).",
          "$ref": "GoogleAdsGoogleadsV21Common__AdImageAsset"
        },
        "breadcrumb1": {
          "description": "First part of text that appears in the ad with the displayed URL.",
          "type": "string"
        },
        "breadcrumb2": {
          "description": "Second part of text that appears in the ad with the displayed URL.",
          "type": "string"
        },
        "businessName": {
          "description": "Required. The advertiser/brand name.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdTextAsset"
        },
        "callToAction": {
          "description": "Asset of type CallToActionAsset used for the \"Call To Action\" button.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdCallToActionAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TravelAdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__TravelAdInfo",
      "description": "A travel ad.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdPolicySummary": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdPolicySummary",
      "description": "Contains policy information for an ad.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "Output only. The list of policy findings for this ad.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        },
        "reviewStatus": {
          "description": "Output only. Where in the review process this ad is.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Currently under review.",
            "Primary review complete. Other reviews may be continuing.",
            "The resource has been resubmitted for approval or its policy decision has been appealed.",
            "The resource is eligible and may be serving but could still undergo further review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REVIEW_IN_PROGRESS",
            "REVIEWED",
            "UNDER_APPEAL",
            "ELIGIBLE_MAY_SERVE"
          ]
        },
        "approvalStatus": {
          "description": "Output only. The overall approval status of this ad, calculated based on the status of its individual policy topic entries.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Will not serve.",
            "Serves with restrictions.",
            "Serves without restrictions.",
            "Will not serve in targeted countries, but may serve for users who are searching for information about the targeted countries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISAPPROVED",
            "APPROVED_LIMITED",
            "APPROVED",
            "AREA_OF_INTEREST_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetAutomationSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetAutomationSetting",
      "description": "Asset automation setting for an AdGroupAd.",
      "type": "object",
      "properties": {
        "assetAutomationType": {
          "description": "The asset automation type that this setting configures.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "Text asset automation includes headlines and descriptions. By default, advertisers are opted-in for Performance Max and opted-out for Search.",
            "Converts horizontal video assets to vertical orientation using content-aware technology. By default, advertisers are opted in for DemandGenVideoResponsiveAd.",
            "Shortens video assets to better capture user attention using content-aware technology. By default, advertisers are opted in for DemandGenVideoResponsiveAd.",
            "Generates a preview of the landing page shown in the engagement panel. By using this feature, you confirm that you own all legal rights to the images on the landing page used by this account (or you have permission to share the images with Google). You hereby instruct Google to publish these images on your behalf for advertising or other commercial purposes.",
            "Generates video enhancements (vertical and shorter videos) for PMax campaigns. Opted in by default.",
            "Controls automation for text assets related to Final URL expansion. This includes automatically creating dynamic landing pages from the final URL and generating text assets from the content of those landing pages. This setting only applies to Search campaigns, and advertisers are opted-out by default."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TEXT_ASSET_AUTOMATION",
            "GENERATE_VERTICAL_YOUTUBE_VIDEOS",
            "GENERATE_SHORTER_YOUTUBE_VIDEOS",
            "GENERATE_LANDING_PAGE_PREVIEW",
            "GENERATE_ENHANCED_YOUTUBE_VIDEOS",
            "FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION"
          ]
        },
        "assetAutomationStatus": {
          "description": "The opt-in/out status for the specified asset automation type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "Opted-in will enable generating and serving an asset automation type.",
            "Opted-out will stop generating and serving an asset automation type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTED_IN",
            "OPTED_OUT"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdsResponse",
      "description": "Response message for an ad group ad mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAdResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdResult",
      "description": "The result for the ad mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name returned for successful operations.",
          "type": "string"
        },
        "adGroupAd": {
          "description": "The mutated ad group ad with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAd"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveAutomaticallyCreatedAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveAutomaticallyCreatedAssetsRequest",
      "description": "Request message for AdGroupAdService.RemoveAutomaticallyCreatedAssetsRequest.",
      "type": "object",
      "properties": {
        "assetsWithFieldType": {
          "description": "Required. List of assets with field type to be removed from the AdGroupAd.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetsWithFieldType"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetsWithFieldType": {
      "id": "GoogleAdsGoogleadsV21Services__AssetsWithFieldType",
      "description": "The combination of system asset and field type to remove.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "Required. The resource name of the asset to be removed.",
          "type": "string"
        },
        "assetFieldType": {
          "description": "Required. The asset field type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsRequest",
      "description": "Request message for AdGroupAssetService.MutateAdGroupAssets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad group assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupAssetOperation",
      "description": "A single operation (create, update, remove) on an ad group asset.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group asset.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAsset"
        },
        "update": {
          "description": "Update operation: The ad group asset is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAsset"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group asset is expected, in this format: `customers/{customer_id}/adGroupAssets/{ad_group_id}~{asset_id}~{field_type}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAsset": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAsset",
      "description": "A link between an ad group and an asset.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group asset. AdGroupAsset resource names have the form: `customers/{customer_id}/adGroupAssets/{ad_group_id}~{asset_id}~{field_type}`",
          "type": "string"
        },
        "adGroup": {
          "description": "Required. Immutable. The ad group to which the asset is linked.",
          "type": "string"
        },
        "asset": {
          "description": "Required. Immutable. The asset which is linked to the ad group.",
          "type": "string"
        },
        "fieldType": {
          "description": "Required. Immutable. Role that the asset takes under the linked ad group.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "source": {
          "description": "Output only. Source of the adgroup asset link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "status": {
          "description": "Status of the ad group asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Asset link is enabled.",
            "Asset link has been removed.",
            "Asset link is paused."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "primaryStatus": {
          "description": "Output only. Provides the PrimaryStatus of this asset link. Primary status is meant essentially to differentiate between the plain \"status\" field, which has advertiser set values of enabled, paused, or removed. The primary status takes into account other signals (for assets its mainly policy and quality approvals) to come up with a more comprehensive status to indicate its serving state.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is eligible to serve.",
            "The user-specified asset link status is paused.",
            "The user-specified asset link status is removed.",
            "The asset may serve in the future.",
            "The asset is serving in a partial capacity.",
            "The asset is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusDetails": {
          "description": "Output only. Provides the details of the primary status and its associated reasons.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails"
          }
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides a list of reasons for why an asset is not serving or not serving at full capacity.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is paused for its linked rollup level. Contributes to a PrimaryStatus of PAUSED.",
              "The asset is removed for its linked rollup level. Contributes to a PrimaryStatus of REMOVED.",
              "The asset has been marked as disapproved. Contributes to a PrimaryStatus of NOT_ELIGIBLE",
              "The asset has not completed policy review. Contributes to a PrimaryStatus of PENDING.",
              "The asset is approved with policies applied. Contributes to a PrimaryStatus of LIMITED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "ASSET_LINK_PAUSED",
              "ASSET_LINK_REMOVED",
              "ASSET_DISAPPROVED",
              "ASSET_UNDER_REVIEW",
              "ASSET_APPROVED_LABELED"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails": {
      "id": "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails",
      "description": "Provides the detail of a PrimaryStatus. Each asset link has a PrimaryStatus value (e.g. NOT_ELIGIBLE, meaning not serving), and list of corroborating PrimaryStatusReasons (e.g. [ASSET_DISAPPROVED]). Each reason may have some additional details annotated with it. For instance, when the reason is ASSET_DISAPPROVED, the details field will contain additional information about the offline evaluation errors which led to the asset being disapproved.",
      "type": "object",
      "properties": {
        "reason": {
          "description": "Provides the reason of this PrimaryStatus.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is paused for its linked rollup level. Contributes to a PrimaryStatus of PAUSED.",
            "The asset is removed for its linked rollup level. Contributes to a PrimaryStatus of REMOVED.",
            "The asset has been marked as disapproved. Contributes to a PrimaryStatus of NOT_ELIGIBLE",
            "The asset has not completed policy review. Contributes to a PrimaryStatus of PENDING.",
            "The asset is approved with policies applied. Contributes to a PrimaryStatus of LIMITED."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ASSET_LINK_PAUSED",
            "ASSET_LINK_REMOVED",
            "ASSET_DISAPPROVED",
            "ASSET_UNDER_REVIEW",
            "ASSET_APPROVED_LABELED"
          ]
        },
        "status": {
          "description": "Provides the PrimaryStatus of this status detail.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is eligible to serve.",
            "The user-specified asset link status is paused.",
            "The user-specified asset link status is removed.",
            "The asset may serve in the future.",
            "The asset is serving in a partial capacity.",
            "The asset is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "assetDisapproved": {
          "description": "Provides the details for AssetLinkPrimaryStatusReason.ASSET_DISAPPROVED",
          "$ref": "GoogleAdsGoogleadsV21Common__AssetDisapproved"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AssetDisapproved": {
      "id": "GoogleAdsGoogleadsV21Common__AssetDisapproved",
      "description": "Details related to AssetLinkPrimaryStatusReasonPB.ASSET_DISAPPROVED",
      "type": "object",
      "properties": {
        "offlineEvaluationErrorReasons": {
          "description": "Provides the quality evaluation disapproval reason of an asset.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "One or more descriptions repeats its corresponding row header.",
              "Price asset contains repetitive headers.",
              "Price item header is not relevant to the price type.",
              "Price item description is not relevant to the item header.",
              "Price asset has a price qualifier in a description.",
              "Unsupported language for price assets",
              "Human raters identified an issue with the price asset that isn't captured by other error reasons. The primary purpose of this value is to represent legacy FeedItem disapprovals that are no longer produced."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "PRICE_ASSET_DESCRIPTION_REPEATS_ROW_HEADER",
              "PRICE_ASSET_REPETITIVE_HEADERS",
              "PRICE_ASSET_HEADER_INCOMPATIBLE_WITH_PRICE_TYPE",
              "PRICE_ASSET_DESCRIPTION_INCOMPATIBLE_WITH_ITEM_HEADER",
              "PRICE_ASSET_DESCRIPTION_HAS_PRICE_QUALIFIER",
              "PRICE_ASSET_UNSUPPORTED_LANGUAGE",
              "PRICE_ASSET_OTHER_ERROR"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetsResponse",
      "description": "Response message for an ad group asset mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetResult",
      "description": "The result for the ad group asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupAsset": {
          "description": "The mutated ad group asset with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsRequest",
      "description": "Request message for AdGroupAssetSetService.MutateAdGroupAssetSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad group asset sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAssetSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupAssetSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupAssetSetOperation",
      "description": "A single operation (create, remove) on an ad group asset set.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group asset set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAssetSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group asset set is expected, in this format: `customers/{customer_id}/adGroupAssetSets/{ad_group_id}~{asset_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAssetSet": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAssetSet",
      "description": "AdGroupAssetSet is the linkage between an ad group and an asset set. Creating an AdGroupAssetSet links an asset set with an ad group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group asset set. Ad group asset set resource names have the form: `customers/{customer_id}/adGroupAssetSets/{ad_group_id}~{asset_set_id}`",
          "type": "string"
        },
        "adGroup": {
          "description": "Immutable. The ad group to which this asset set is linked.",
          "type": "string"
        },
        "assetSet": {
          "description": "Immutable. The asset set which is linked to the ad group.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the ad group asset set. Read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The linkage between asset set and its container is enabled.",
            "The linkage between asset set and its container is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetsResponse",
      "description": "Response message for an ad group asset set mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (e.g. auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetSetResult",
      "description": "The result for the ad group asset set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupAssetSet": {
          "description": "The mutated ad group asset set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAssetSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersRequest",
      "description": "Request message for AdGroupBidModifierService.MutateAdGroupBidModifiers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad group bid modifiers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupBidModifierOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupBidModifierOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupBidModifierOperation",
      "description": "A single operation (create, remove, update) on an ad group bid modifier.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group bid modifier.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier"
        },
        "update": {
          "description": "Update operation: The ad group bid modifier is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group bid modifier is expected, in this format: `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier",
      "description": "Represents an ad group bid modifier.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group bid modifier. Ad group bid modifier resource names have the form: `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}~{criterion_id}`",
          "type": "string"
        },
        "adGroup": {
          "description": "Immutable. The ad group to which this criterion belongs.",
          "type": "string"
        },
        "criterionId": {
          "description": "Output only. The ID of the criterion to bid modify. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "bidModifier": {
          "description": "The modifier for the bid when the criterion matches. The modifier must be in the range: 0.1 - 10.0. The range is 1.0 - 6.0 for PreferredContent. Use 0 to opt out of a Device type.",
          "type": "number",
          "format": "double"
        },
        "baseAdGroup": {
          "description": "Output only. The base ad group from which this draft/trial adgroup bid modifier was created. If ad_group is a base ad group then this field will be equal to ad_group. If the ad group was created in the draft or trial and has no corresponding base ad group, then this field will be null. This field is readonly.",
          "readOnly": true,
          "type": "string"
        },
        "bidModifierSource": {
          "description": "Output only. Bid modifier source.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The bid modifier is specified at the campaign level, on the campaign level criterion.",
            "The bid modifier is specified (overridden) at the ad group level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN",
            "AD_GROUP"
          ]
        },
        "hotelDateSelectionType": {
          "description": "Immutable. Criterion for hotel date selection (default dates versus user selected).",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelDateSelectionTypeInfo"
        },
        "hotelAdvanceBookingWindow": {
          "description": "Immutable. Criterion for number of days prior to the stay the booking is being made.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelAdvanceBookingWindowInfo"
        },
        "hotelLengthOfStay": {
          "description": "Immutable. Criterion for length of hotel stay in nights.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelLengthOfStayInfo"
        },
        "hotelCheckInDay": {
          "description": "Immutable. Criterion for day of the week the booking is for.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelCheckInDayInfo"
        },
        "device": {
          "description": "Immutable. A device criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__DeviceInfo"
        },
        "hotelCheckInDateRange": {
          "description": "Immutable. Criterion for a hotel check-in date range.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelCheckInDateRangeInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelDateSelectionTypeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelDateSelectionTypeInfo",
      "description": "Criterion for hotel date selection (default dates versus user selected).",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the hotel date selection",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Dates selected by default.",
            "Dates selected by the user."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT_SELECTION",
            "USER_SELECTED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelAdvanceBookingWindowInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelAdvanceBookingWindowInfo",
      "description": "Criterion for number of days prior to the stay the booking is being made.",
      "type": "object",
      "properties": {
        "minDays": {
          "description": "Low end of the number of days prior to the stay.",
          "type": "string",
          "format": "int64"
        },
        "maxDays": {
          "description": "High end of the number of days prior to the stay.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelLengthOfStayInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelLengthOfStayInfo",
      "description": "Criterion for length of hotel stay in nights.",
      "type": "object",
      "properties": {
        "minNights": {
          "description": "Low end of the number of nights in the stay.",
          "type": "string",
          "format": "int64"
        },
        "maxNights": {
          "description": "High end of the number of nights in the stay.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelCheckInDayInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelCheckInDayInfo",
      "description": "Criterion for day of the week the booking is for.",
      "type": "object",
      "properties": {
        "dayOfWeek": {
          "description": "The day of the week.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Monday.",
            "Tuesday.",
            "Wednesday.",
            "Thursday.",
            "Friday.",
            "Saturday.",
            "Sunday."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DeviceInfo": {
      "id": "GoogleAdsGoogleadsV21Common__DeviceInfo",
      "description": "A device criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the device.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Mobile devices with full browsers.",
            "Tablets with full browsers.",
            "Computers.",
            "Smart TVs and game consoles.",
            "Other device types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MOBILE",
            "TABLET",
            "DESKTOP",
            "CONNECTED_TV",
            "OTHER"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelCheckInDateRangeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelCheckInDateRangeInfo",
      "description": "Criterion for a check-in date range.",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "Start date in the YYYY-MM-DD format.",
          "type": "string"
        },
        "endDate": {
          "description": "End date in the YYYY-MM-DD format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifiersResponse",
      "description": "Response message for ad group bid modifiers mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifierResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifierResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifierResult",
      "description": "The result for the criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupBidModifier": {
          "description": "The mutated ad group bid modifier with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersRequest",
      "description": "Request message for AdGroupCriterionCustomizerService.MutateAdGroupCriterionCustomizers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad group criterion customizers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionCustomizerOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupCriterionCustomizerOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupCriterionCustomizerOperation",
      "description": "A single operation (create, remove) on a customizer attribute.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group criterion customizer.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionCustomizer"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group criterion customizer is expected, in this format: `customers/{customer_id}/adGroupCriterionCustomizers/{ad_group_id}~{criterion_id}~{customizer_attribute_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupCriterionCustomizer": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionCustomizer",
      "description": "A customizer value for the associated CustomizerAttribute at the AdGroupCriterion level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group criterion customizer. Ad group criterion customizer resource names have the form: `customers/{customer_id}/adGroupCriterionCustomizers/{ad_group_id}~{criterion_id}~{customizer_attribute_id}`",
          "type": "string"
        },
        "adGroupCriterion": {
          "description": "Immutable. The ad group criterion to which the customizer attribute is linked. It must be a keyword criterion.",
          "type": "string"
        },
        "customizerAttribute": {
          "description": "Required. Immutable. The customizer attribute which is linked to the ad group criterion.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the ad group criterion customizer.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The customizer value is enabled.",
            "The customizer value is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "value": {
          "description": "Required. The value to associate with the customizer attribute at this level. The value must be of the type specified for the CustomizerAttribute.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomizerValue"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomizerValue": {
      "id": "GoogleAdsGoogleadsV21Common__CustomizerValue",
      "description": "A customizer value that is referenced in customizer linkage entities like CustomerCustomizer, CampaignCustomizer, etc.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Required. The data type for the customizer value. It must match the attribute type. The string_value content must match the constraints associated with the type.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "Text customizer.",
            "Number customizer.",
            "Price customizer consisting of a number and a currency.",
            "Percentage customizer consisting of a number and a '%'."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TEXT",
            "NUMBER",
            "PRICE",
            "PERCENT"
          ]
        },
        "stringValue": {
          "description": "Required. Value to insert in creative text. Customizer values of all types are stored as string to make formatting unambiguous.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizersResponse",
      "description": "Response message for an ad group criterion customizer mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizerResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizerResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizerResult",
      "description": "The result for the ad group criterion customizer mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupCriterionCustomizer": {
          "description": "The mutated AdGroupCriterionCustomizer with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionCustomizer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsRequest",
      "description": "Request message for AdGroupCriterionLabelService.MutateAdGroupCriterionLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on ad group criterion labels.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionLabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupCriterionLabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupCriterionLabelOperation",
      "description": "A single operation (create, remove) on an ad group criterion label.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group label.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionLabel"
        },
        "remove": {
          "description": "Remove operation: A resource name for the ad group criterion label being removed, in this format: `customers/{customer_id}/adGroupCriterionLabels/{ad_group_id}~{criterion_id}~{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupCriterionLabel": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionLabel",
      "description": "A relationship between an ad group criterion and a label.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group criterion label. Ad group criterion label resource names have the form: `customers/{customer_id}/adGroupCriterionLabels/{ad_group_id}~{criterion_id}~{label_id}`",
          "type": "string"
        },
        "adGroupCriterion": {
          "description": "Immutable. The ad group criterion to which the label is attached.",
          "type": "string"
        },
        "label": {
          "description": "Immutable. The label assigned to the ad group criterion.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelsResponse",
      "description": "Response message for an ad group criterion labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelResult",
      "description": "The result for an ad group criterion label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaRequest",
      "description": "Request message for AdGroupCriterionService.MutateAdGroupCriteria.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupCriterionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupCriterionOperation",
      "description": "A single operation (create, remove, update) on an ad group criterion.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "exemptPolicyViolationKeys": {
          "description": "The list of policy violation keys that should not cause a PolicyViolationError to be reported. Not all policy violations are exemptable, refer to the is_exemptible field in the returned PolicyViolationError. Resources violating these polices will be saved, but will not be eligible to serve. They may begin serving at a later time due to a change in policies, re-review of the resource, or a change in advertiser certificates.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyViolationKey"
          }
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new criterion.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion"
        },
        "update": {
          "description": "Update operation: The criterion is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed criterion is expected, in this format: `customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupCriterion": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion",
      "description": "An ad group criterion. The ad_group_criterion report only returns criteria that were explicitly added to the ad group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group criterion. Ad group criterion resource names have the form: `customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id}`",
          "type": "string"
        },
        "criterionId": {
          "description": "Output only. The ID of the criterion. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "displayName": {
          "description": "Output only. The display name of the criterion. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "The status of the criterion. This is the status of the ad group criterion entity, set by the client. Note: UI reports may incorporate additional information that affects whether a criterion is eligible to run. In some cases a criterion that's REMOVED in the API can still show as enabled in the UI. For example, campaigns by default show to users of all age ranges unless excluded. The UI will show each age range as \"enabled\", since they're eligible to see the ads; but AdGroupCriterion.status will show \"removed\", since no positive criterion was added.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The ad group criterion is enabled.",
            "The ad group criterion is paused.",
            "The ad group criterion is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "qualityInfo": {
          "description": "Output only. Information regarding the quality of the criterion.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_QualityInfo"
        },
        "adGroup": {
          "description": "Immutable. The ad group to which the criterion belongs.",
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword, for example, 'mars cruise'.",
            "Placement, also known as Website, for example, 'www.flowers4sale.com'",
            "Mobile application categories to target.",
            "Mobile applications to target.",
            "Devices to target.",
            "Locations to target.",
            "Listing groups to target.",
            "Ad Schedule.",
            "Age range.",
            "Gender.",
            "Income Range.",
            "Parental status.",
            "YouTube Video.",
            "YouTube Channel.",
            "User list.",
            "Proximity.",
            "A topic target on the display network (for example, \"Pets & Animals\").",
            "Listing scope to target.",
            "Language.",
            "IpBlock.",
            "Content Label for category exclusion.",
            "Carrier.",
            "A category the user is interested in.",
            "Webpage criterion for dynamic search ads.",
            "Operating system version.",
            "App payment model.",
            "Mobile device.",
            "Custom affinity.",
            "Custom intent.",
            "Location group.",
            "Custom audience",
            "Combined audience",
            "Smart Campaign keyword theme",
            "Audience",
            "Negative Keyword List",
            "Local Services Ads Service ID.",
            "Search Theme.",
            "Brand",
            "Brand List",
            "Life Event",
            "Webpage List",
            "Video lineup",
            "Placement List"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "PLACEMENT",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "DEVICE",
            "LOCATION",
            "LISTING_GROUP",
            "AD_SCHEDULE",
            "AGE_RANGE",
            "GENDER",
            "INCOME_RANGE",
            "PARENTAL_STATUS",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "USER_LIST",
            "PROXIMITY",
            "TOPIC",
            "LISTING_SCOPE",
            "LANGUAGE",
            "IP_BLOCK",
            "CONTENT_LABEL",
            "CARRIER",
            "USER_INTEREST",
            "WEBPAGE",
            "OPERATING_SYSTEM_VERSION",
            "APP_PAYMENT_MODEL",
            "MOBILE_DEVICE",
            "CUSTOM_AFFINITY",
            "CUSTOM_INTENT",
            "LOCATION_GROUP",
            "CUSTOM_AUDIENCE",
            "COMBINED_AUDIENCE",
            "KEYWORD_THEME",
            "AUDIENCE",
            "NEGATIVE_KEYWORD_LIST",
            "LOCAL_SERVICE_ID",
            "SEARCH_THEME",
            "BRAND",
            "BRAND_LIST",
            "LIFE_EVENT",
            "WEBPAGE_LIST",
            "VIDEO_LINEUP",
            "PLACEMENT_LIST"
          ]
        },
        "negative": {
          "description": "Immutable. Whether to target (`false`) or exclude (`true`) the criterion. This field is immutable. To switch a criterion from positive to negative, remove then re-add it.",
          "type": "boolean"
        },
        "systemServingStatus": {
          "description": "Output only. Serving status of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Eligible.",
            "Low search volume."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "RARELY_SERVED"
          ]
        },
        "approvalStatus": {
          "description": "Output only. Approval status of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Approved.",
            "Disapproved.",
            "Pending Review.",
            "Under review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPROVED",
            "DISAPPROVED",
            "PENDING_REVIEW",
            "UNDER_REVIEW"
          ]
        },
        "disapprovalReasons": {
          "description": "Output only. List of disapproval reasons of the criterion. The different reasons for disapproving a criterion can be found here: https://support.google.com/adspolicy/answer/6008942 This field is read-only.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "labels": {
          "description": "Output only. The resource names of labels attached to this ad group criterion.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "bidModifier": {
          "description": "The modifier for the bid when the criterion matches. The modifier must be in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.",
          "type": "number",
          "format": "double"
        },
        "cpcBidMicros": {
          "description": "The CPC (cost-per-click) bid.",
          "type": "string",
          "format": "int64"
        },
        "cpmBidMicros": {
          "description": "The CPM (cost-per-thousand viewable impressions) bid.",
          "type": "string",
          "format": "int64"
        },
        "cpvBidMicros": {
          "description": "The CPV (cost-per-view) bid.",
          "type": "string",
          "format": "int64"
        },
        "percentCpcBidMicros": {
          "description": "The CPC bid amount, expressed as a fraction of the advertised price for some good or service. The valid range for the fraction is [0,1) and the value stored here is 1,000,000 * [fraction].",
          "type": "string",
          "format": "int64"
        },
        "effectiveCpcBidMicros": {
          "description": "Output only. The effective CPC (cost-per-click) bid.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "effectiveCpmBidMicros": {
          "description": "Output only. The effective CPM (cost-per-thousand viewable impressions) bid.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "effectiveCpvBidMicros": {
          "description": "Output only. The effective CPV (cost-per-view) bid.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "effectivePercentCpcBidMicros": {
          "description": "Output only. The effective Percent CPC bid amount.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "effectiveCpcBidSource": {
          "description": "Output only. Source of the effective CPC bid.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "effectiveCpmBidSource": {
          "description": "Output only. Source of the effective CPM bid.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "effectiveCpvBidSource": {
          "description": "Output only. Source of the effective CPV bid.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "effectivePercentCpcBidSource": {
          "description": "Output only. Source of the effective Percent CPC bid.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "positionEstimates": {
          "description": "Output only. Estimates for criterion bids at various positions.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_PositionEstimates"
        },
        "finalUrls": {
          "description": "The list of possible final URLs after all cross-domain redirects for the ad.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalMobileUrls": {
          "description": "The list of possible final mobile URLs after all cross-domain redirects.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalUrlSuffix": {
          "description": "URL template for appending params to final URL.",
          "type": "string"
        },
        "trackingUrlTemplate": {
          "description": "The URL template for constructing a tracking URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "The list of mappings used to substitute custom parameter tags in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "primaryStatus": {
          "description": "Output only. The primary status for the ad group criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad group criterion is eligible to serve.",
            "The ad group criterion is paused.",
            "The ad group criterion is removed.",
            "The ad group criterion is pending.",
            "The ad group criterion is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. The primary status reasons for the ad group criterion.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents unknown value in this version.",
              "The user-specified time for this campaign to start is in the future. Contributes to AdGroupCriterionPrimaryStatus.PENDING.",
              "The ad group criterion is overridden by negative campaign criterion. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified campaign status is paused. Contributes to AdGroupCriterionPrimaryStatus.PAUSED.",
              "The user-specified campaign status is removed. Contributes to AdGroupCriterionPrimaryStatus.REMOVED.",
              "The user-specified time for this campaign to end has passed. Contributes to AdGroupCriterionPrimaryStatus.ENDED.",
              "The user-specified ad group status is paused. Contributes to AdGroupCriterionPrimaryStatus.PAUSED.",
              "The user-specified ad group status is removed. Contributes to AdGroupCriterionPrimaryStatus.REMOVED.",
              "The ad group criterion is disapproved by the ads approval system. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The ad group criterion is rarely served. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The ad group criterion has a low quality score. Contributes to AdGroupCriterionPrimaryStatus.LIMITED.",
              "The ad group criterion is under review. Contributes to AdGroupCriterionPrimaryStatus.PENDING.",
              "The ad group criterion is pending review. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The ad group criterion's bid is below the value necessary to serve on the first page. Contributes to AdGroupCriterionPrimaryStatus.LIMITED.",
              "The ad group criterion is negative. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The ad group criterion is restricted. Contributes to AdGroupCriterionPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified ad group criterion status is paused. Contributes to AdGroupCriterionPrimaryStatus.PAUSED.",
              "The ad group criterion has been paused due to prolonged low activity in serving. Contributes to AdGroupCriterionPrimaryStatus.PAUSED.",
              "The user-specified ad group criterion status is removed. Contributes to AdGroupCriterionPrimaryStatus.REMOVED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CAMPAIGN_PENDING",
              "CAMPAIGN_CRITERION_NEGATIVE",
              "CAMPAIGN_PAUSED",
              "CAMPAIGN_REMOVED",
              "CAMPAIGN_ENDED",
              "AD_GROUP_PAUSED",
              "AD_GROUP_REMOVED",
              "AD_GROUP_CRITERION_DISAPPROVED",
              "AD_GROUP_CRITERION_RARELY_SERVED",
              "AD_GROUP_CRITERION_LOW_QUALITY",
              "AD_GROUP_CRITERION_UNDER_REVIEW",
              "AD_GROUP_CRITERION_PENDING_REVIEW",
              "AD_GROUP_CRITERION_BELOW_FIRST_PAGE_BID",
              "AD_GROUP_CRITERION_NEGATIVE",
              "AD_GROUP_CRITERION_RESTRICTED",
              "AD_GROUP_CRITERION_PAUSED",
              "AD_GROUP_CRITERION_PAUSED_DUE_TO_LOW_ACTIVITY",
              "AD_GROUP_CRITERION_REMOVED"
            ]
          }
        },
        "keyword": {
          "description": "Immutable. Keyword.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "placement": {
          "description": "Immutable. Placement.",
          "$ref": "GoogleAdsGoogleadsV21Common__PlacementInfo"
        },
        "mobileAppCategory": {
          "description": "Immutable. Mobile app category.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo"
        },
        "mobileApplication": {
          "description": "Immutable. Mobile application.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileApplicationInfo"
        },
        "listingGroup": {
          "description": "Immutable. Listing group.",
          "$ref": "GoogleAdsGoogleadsV21Common__ListingGroupInfo"
        },
        "ageRange": {
          "description": "Immutable. Age range.",
          "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
        },
        "gender": {
          "description": "Immutable. Gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "incomeRange": {
          "description": "Immutable. Income range.",
          "$ref": "GoogleAdsGoogleadsV21Common__IncomeRangeInfo"
        },
        "parentalStatus": {
          "description": "Immutable. Parental status.",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo"
        },
        "userList": {
          "description": "Immutable. User List.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
        },
        "youtubeVideo": {
          "description": "Immutable. YouTube Video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo"
        },
        "youtubeChannel": {
          "description": "Immutable. YouTube Channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "topic": {
          "description": "Immutable. Topic.",
          "$ref": "GoogleAdsGoogleadsV21Common__TopicInfo"
        },
        "userInterest": {
          "description": "Immutable. User Interest.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
        },
        "webpage": {
          "description": "Immutable. Webpage",
          "$ref": "GoogleAdsGoogleadsV21Common__WebpageInfo"
        },
        "appPaymentModel": {
          "description": "Immutable. App Payment Model.",
          "$ref": "GoogleAdsGoogleadsV21Common__AppPaymentModelInfo"
        },
        "customAffinity": {
          "description": "Immutable. Custom Affinity.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomAffinityInfo"
        },
        "customIntent": {
          "description": "Immutable. Custom Intent.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomIntentInfo"
        },
        "customAudience": {
          "description": "Immutable. Custom Audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomAudienceInfo"
        },
        "combinedAudience": {
          "description": "Immutable. Combined Audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__CombinedAudienceInfo"
        },
        "audience": {
          "description": "Immutable. Audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInfo"
        },
        "location": {
          "description": "Immutable. Location.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "language": {
          "description": "Immutable. Language.",
          "$ref": "GoogleAdsGoogleadsV21Common__LanguageInfo"
        },
        "lifeEvent": {
          "description": "Immutable. Life event campaign criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__LifeEventInfo"
        },
        "videoLineup": {
          "description": "Immutable. Video lineup criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoLineupInfo"
        },
        "extendedDemographic": {
          "description": "Immutable. Extended demographic criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__ExtendedDemographicInfo"
        },
        "brandList": {
          "description": "Immutable. Brand list criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__BrandListInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_QualityInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_QualityInfo",
      "description": "A container for ad group criterion quality information.",
      "type": "object",
      "properties": {
        "qualityScore": {
          "description": "Output only. The quality score. This field may not be populated if Google does not have enough information to determine a value.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "creativeQualityScore": {
          "description": "Output only. The performance of the ad compared to other advertisers.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        },
        "postClickQualityScore": {
          "description": "Output only. The quality score of the landing page.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        },
        "searchPredictedCtr": {
          "description": "Output only. The click-through rate compared to that of other advertisers.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_PositionEstimates": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroupCriterion_PositionEstimates",
      "description": "Estimates for criterion bids at various positions.",
      "type": "object",
      "properties": {
        "firstPageCpcMicros": {
          "description": "Output only. The estimate of the CPC bid required for ad to be shown on first page of search results.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "firstPositionCpcMicros": {
          "description": "Output only. The estimate of the CPC bid required for ad to be displayed in first position, at the top of the first page of search results.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "topOfPageCpcMicros": {
          "description": "Output only. The estimate of the CPC bid required for ad to be displayed at the top of the first page of search results.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "estimatedAddClicksAtFirstPositionCpc": {
          "description": "Output only. Estimate of how many clicks per week you might get by changing your keyword bid to the value in first_position_cpc_micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "estimatedAddCostAtFirstPositionCpc": {
          "description": "Output only. Estimate of how your cost per week might change when changing your keyword bid to the value in first_position_cpc_micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordInfo": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordInfo",
      "description": "A keyword criterion.",
      "type": "object",
      "properties": {
        "text": {
          "description": "The text of the keyword (at most 80 characters and 10 words).",
          "type": "string"
        },
        "matchType": {
          "description": "The match type of the keyword.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PlacementInfo": {
      "id": "GoogleAdsGoogleadsV21Common__PlacementInfo",
      "description": "A placement criterion. This can be used to modify bids for sites when targeting the content network.",
      "type": "object",
      "properties": {
        "url": {
          "description": "URL of the placement. For example, \"http://www.domain.com\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo": {
      "id": "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo",
      "description": "A mobile app category criterion.",
      "type": "object",
      "properties": {
        "mobileAppCategoryConstant": {
          "description": "The mobile app category constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MobileApplicationInfo": {
      "id": "GoogleAdsGoogleadsV21Common__MobileApplicationInfo",
      "description": "A mobile application criterion.",
      "type": "object",
      "properties": {
        "appId": {
          "description": "A string that uniquely identifies a mobile application to Google Ads API. The format of this string is \"{platform}-{platform_native_id}\", where platform is \"1\" for iOS apps and \"2\" for Android apps, and where platform_native_id is the mobile application identifier native to the corresponding platform. For iOS, this native identifier is the 9 digit string that appears at the end of an App Store URL (for example, \"476943146\" for \"Flood-It! 2\" whose App Store link is \"http://itunes.apple.com/us/app/flood-it!-2/id476943146\"). For Android, this native identifier is the application's package name (for example, \"com.labpixies.colordrips\" for \"Color Drips\" given Google Play link \"https://play.google.com/store/apps/details?id=com.labpixies.colordrips\"). A well formed app id for Google Ads API would thus be \"1-476943146\" for iOS and \"2-com.labpixies.colordrips\" for Android. This field is required and must be set in CREATE operations.",
          "type": "string"
        },
        "name": {
          "description": "Name of this mobile application.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ListingGroupInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ListingGroupInfo",
      "description": "A listing group criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the listing group.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Subdivision of products along some listing dimension. These nodes are not used by serving to target listing entries, but is purely to define the structure of the tree.",
            "Listing group unit that defines a bid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SUBDIVISION",
            "UNIT"
          ]
        },
        "caseValue": {
          "description": "Dimension value with which this listing group is refining its parent. Undefined for the root group.",
          "$ref": "GoogleAdsGoogleadsV21Common__ListingDimensionInfo"
        },
        "parentAdGroupCriterion": {
          "description": "Resource name of ad group criterion which is the parent listing group subdivision. Null for the root group.",
          "type": "string"
        },
        "path": {
          "description": "The path of dimensions defining this listing group.",
          "$ref": "GoogleAdsGoogleadsV21Common__ListingDimensionPath"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ListingDimensionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ListingDimensionInfo",
      "description": "Listing dimensions for listing group criterion.",
      "type": "object",
      "properties": {
        "hotelId": {
          "description": "Advertiser-specific hotel ID.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelIdInfo"
        },
        "hotelClass": {
          "description": "Class of the hotel as a number of stars 1 to 5.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelClassInfo"
        },
        "hotelCountryRegion": {
          "description": "Country or Region the hotel is located in.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelCountryRegionInfo"
        },
        "hotelState": {
          "description": "State the hotel is located in.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelStateInfo"
        },
        "hotelCity": {
          "description": "City the hotel is located in.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelCityInfo"
        },
        "productCategory": {
          "description": "Category of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductCategoryInfo"
        },
        "productBrand": {
          "description": "Brand of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductBrandInfo"
        },
        "productChannel": {
          "description": "Locality of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductChannelInfo"
        },
        "productChannelExclusivity": {
          "description": "Availability of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductChannelExclusivityInfo"
        },
        "productCondition": {
          "description": "Condition of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductConditionInfo"
        },
        "productCustomAttribute": {
          "description": "Custom attribute of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductCustomAttributeInfo"
        },
        "productItemId": {
          "description": "Item id of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductItemIdInfo"
        },
        "productType": {
          "description": "Type of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductTypeInfo"
        },
        "productGrouping": {
          "description": "Grouping of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductGroupingInfo"
        },
        "productLabels": {
          "description": "Labels of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductLabelsInfo"
        },
        "productLegacyCondition": {
          "description": "Legacy condition of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductLegacyConditionInfo"
        },
        "productTypeFull": {
          "description": "Full type of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProductTypeFullInfo"
        },
        "activityId": {
          "description": "Advertiser-specific activity ID.",
          "$ref": "GoogleAdsGoogleadsV21Common__ActivityIdInfo"
        },
        "activityRating": {
          "description": "Rating of the activity as a number 1 to 5, where 5 is the best.",
          "$ref": "GoogleAdsGoogleadsV21Common__ActivityRatingInfo"
        },
        "activityCountry": {
          "description": "The country where the travel activity is available.",
          "$ref": "GoogleAdsGoogleadsV21Common__ActivityCountryInfo"
        },
        "activityState": {
          "description": "The state where the travel activity is available.",
          "$ref": "GoogleAdsGoogleadsV21Common__ActivityStateInfo"
        },
        "activityCity": {
          "description": "The city where the travel activity is available.",
          "$ref": "GoogleAdsGoogleadsV21Common__ActivityCityInfo"
        },
        "unknownListingDimension": {
          "description": "Unknown dimension. Set when no other listing dimension is set.",
          "$ref": "GoogleAdsGoogleadsV21Common__UnknownListingDimensionInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelIdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelIdInfo",
      "description": "Advertiser-specific hotel ID.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the hotel ID.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelClassInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelClassInfo",
      "description": "Class of the hotel as a number of stars 1 to 5.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Long value of the hotel class.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelCountryRegionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelCountryRegionInfo",
      "description": "Country or Region the hotel is located in.",
      "type": "object",
      "properties": {
        "countryRegionCriterion": {
          "description": "The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelStateInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelStateInfo",
      "description": "State the hotel is located in.",
      "type": "object",
      "properties": {
        "stateCriterion": {
          "description": "The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelCityInfo": {
      "id": "GoogleAdsGoogleadsV21Common__HotelCityInfo",
      "description": "City the hotel is located in.",
      "type": "object",
      "properties": {
        "cityCriterion": {
          "description": "The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductCategoryInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductCategoryInfo",
      "description": "Category of a product offer.",
      "type": "object",
      "properties": {
        "categoryId": {
          "description": "ID of the product category. This ID is equivalent to the google_product_category ID as described in this article: https://support.google.com/merchants/answer/6324436",
          "type": "string",
          "format": "int64"
        },
        "level": {
          "description": "Level of the product category.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Level 1.",
            "Level 2.",
            "Level 3.",
            "Level 4.",
            "Level 5."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEVEL1",
            "LEVEL2",
            "LEVEL3",
            "LEVEL4",
            "LEVEL5"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductBrandInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductBrandInfo",
      "description": "Brand of the product.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product brand.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductChannelInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductChannelInfo",
      "description": "Locality of a product offer.",
      "type": "object",
      "properties": {
        "channel": {
          "description": "Value of the locality.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold online.",
            "The item is sold in local stores."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ONLINE",
            "LOCAL"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductChannelExclusivityInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductChannelExclusivityInfo",
      "description": "Availability of a product offer.",
      "type": "object",
      "properties": {
        "channelExclusivity": {
          "description": "Value of the availability.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold through one channel only, either local stores or online as indicated by its ProductChannel.",
            "The item is matched to its online or local stores counterpart, indicating it is available for purchase in both ShoppingProductChannels."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SINGLE_CHANNEL",
            "MULTI_CHANNEL"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductConditionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductConditionInfo",
      "description": "Condition of a product offer.",
      "type": "object",
      "properties": {
        "condition": {
          "description": "Value of the condition.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The product condition is new.",
            "The product condition is refurbished.",
            "The product condition is used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "REFURBISHED",
            "USED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductCustomAttributeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductCustomAttributeInfo",
      "description": "Custom attribute of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product custom attribute.",
          "type": "string"
        },
        "index": {
          "description": "Indicates the index of the custom attribute.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "First product custom attribute.",
            "Second product custom attribute.",
            "Third product custom attribute.",
            "Fourth product custom attribute.",
            "Fifth product custom attribute."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INDEX0",
            "INDEX1",
            "INDEX2",
            "INDEX3",
            "INDEX4"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductItemIdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductItemIdInfo",
      "description": "Item id of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value of the id.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductTypeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductTypeInfo",
      "description": "Type of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value of the type.",
          "type": "string"
        },
        "level": {
          "description": "Level of the type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Level 1.",
            "Level 2.",
            "Level 3.",
            "Level 4.",
            "Level 5."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEVEL1",
            "LEVEL2",
            "LEVEL3",
            "LEVEL4",
            "LEVEL5"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductGroupingInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductGroupingInfo",
      "description": "Grouping of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product grouping.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductLabelsInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductLabelsInfo",
      "description": "Labels of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product labels.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductLegacyConditionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductLegacyConditionInfo",
      "description": "Legacy condition of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product legacy condition.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProductTypeFullInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProductTypeFullInfo",
      "description": "Full type of a product offer. This listing dimension is deprecated and it is supported only in Display campaigns.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product full type.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ActivityIdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ActivityIdInfo",
      "description": "Advertiser-specific activity ID.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the activity ID.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ActivityRatingInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ActivityRatingInfo",
      "description": "Rating of the activity as a number 1 to 5, where 5 is the best.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Long value of the activity rating.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ActivityCountryInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ActivityCountryInfo",
      "description": "The country where the travel activity is available.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the activity country. The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ActivityStateInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ActivityStateInfo",
      "description": "The state where the travel activity is available.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the activity state. The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ActivityCityInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ActivityCityInfo",
      "description": "The city where the travel activity is available.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the activity city. The Geo Target Constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UnknownListingDimensionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UnknownListingDimensionInfo",
      "description": "Unknown listing dimension.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ListingDimensionPath": {
      "id": "GoogleAdsGoogleadsV21Common__ListingDimensionPath",
      "description": "The path of dimensions defining a listing group.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "The complete path of dimensions through the listing group hierarchy, from the root (excluding the root itself) to this listing group.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__ListingDimensionInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AgeRangeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AgeRangeInfo",
      "description": "An age range criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the age range.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Between 18 and 24 years old.",
            "Between 25 and 34 years old.",
            "Between 35 and 44 years old.",
            "Between 45 and 54 years old.",
            "Between 55 and 64 years old.",
            "65 years old and beyond.",
            "Undetermined age range."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AGE_RANGE_18_24",
            "AGE_RANGE_25_34",
            "AGE_RANGE_35_44",
            "AGE_RANGE_45_54",
            "AGE_RANGE_55_64",
            "AGE_RANGE_65_UP",
            "AGE_RANGE_UNDETERMINED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__GenderInfo": {
      "id": "GoogleAdsGoogleadsV21Common__GenderInfo",
      "description": "A gender criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the gender.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Male.",
            "Female.",
            "Undetermined gender."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MALE",
            "FEMALE",
            "UNDETERMINED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__IncomeRangeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__IncomeRangeInfo",
      "description": "An income range criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the income range.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "0%-50%.",
            "50% to 60%.",
            "60% to 70%.",
            "70% to 80%.",
            "80% to 90%.",
            "Greater than 90%.",
            "Undetermined income range."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INCOME_RANGE_0_50",
            "INCOME_RANGE_50_60",
            "INCOME_RANGE_60_70",
            "INCOME_RANGE_70_80",
            "INCOME_RANGE_80_90",
            "INCOME_RANGE_90_UP",
            "INCOME_RANGE_UNDETERMINED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ParentalStatusInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo",
      "description": "A parental status criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the parental status.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Parent.",
            "Not a parent.",
            "Undetermined parental status."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PARENT",
            "NOT_A_PARENT",
            "UNDETERMINED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListInfo",
      "description": "A User List criterion. Represents a user list that is defined by the advertiser to be targeted.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "The User List resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo",
      "description": "A YouTube Video criterion.",
      "type": "object",
      "properties": {
        "videoId": {
          "description": "YouTube video id as it appears on the YouTube watch page.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo",
      "description": "A YouTube Channel criterion.",
      "type": "object",
      "properties": {
        "channelId": {
          "description": "The YouTube uploader channel id or the channel code of a YouTube channel.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TopicInfo": {
      "id": "GoogleAdsGoogleadsV21Common__TopicInfo",
      "description": "A topic criterion. Use topics to target or exclude placements in the Google Display Network based on the category into which the placement falls (for example, \"Pets & Animals/Pets/Dogs\").",
      "type": "object",
      "properties": {
        "topicConstant": {
          "description": "The Topic Constant resource name.",
          "type": "string"
        },
        "path": {
          "description": "The category to target or exclude. Each subsequent element in the array describes a more specific sub-category. For example, \"Pets & Animals\", \"Pets\", \"Dogs\" represents the \"Pets & Animals/Pets/Dogs\" category.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserInterestInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserInterestInfo",
      "description": "Represents a particular interest-based topic to be targeted.",
      "type": "object",
      "properties": {
        "userInterestCategory": {
          "description": "The UserInterest resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WebpageInfo": {
      "id": "GoogleAdsGoogleadsV21Common__WebpageInfo",
      "description": "Represents a criterion for targeting webpages of an advertiser's website.",
      "type": "object",
      "properties": {
        "criterionName": {
          "description": "The name of the criterion that is defined by this parameter. The name value will be used for identifying, sorting and filtering criteria with this type of parameters. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "string"
        },
        "conditions": {
          "description": "Conditions, or logical expressions, for webpage targeting. The list of webpage targeting conditions are and-ed together when evaluated for targeting. An empty list of conditions indicates all pages of the campaign's website are targeted. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__WebpageConditionInfo"
          }
        },
        "coveragePercentage": {
          "description": "Website criteria coverage percentage. This is the computed percentage of website coverage based on the website target, negative website target and negative keywords in the ad group and campaign. For instance, when coverage returns as 1, it indicates it has 100% coverage. This field is read-only.",
          "type": "number",
          "format": "double"
        },
        "sample": {
          "description": "List of sample urls that match the website target. This field is read-only.",
          "$ref": "GoogleAdsGoogleadsV21Common__WebpageSampleInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WebpageConditionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__WebpageConditionInfo",
      "description": "Logical expression for targeting webpages of an advertiser's website.",
      "type": "object",
      "properties": {
        "operand": {
          "description": "Operand of webpage targeting condition.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Operand denoting a webpage URL targeting condition.",
            "Operand denoting a webpage category targeting condition.",
            "Operand denoting a webpage title targeting condition.",
            "Operand denoting a webpage content targeting condition.",
            "Operand denoting a webpage custom label targeting condition."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "URL",
            "CATEGORY",
            "PAGE_TITLE",
            "PAGE_CONTENT",
            "CUSTOM_LABEL"
          ]
        },
        "operator": {
          "description": "Operator of webpage targeting condition.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The argument web condition is equal to the compared web condition.",
            "The argument web condition is part of the compared web condition."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EQUALS",
            "CONTAINS"
          ]
        },
        "argument": {
          "description": "Argument of webpage targeting condition.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WebpageSampleInfo": {
      "id": "GoogleAdsGoogleadsV21Common__WebpageSampleInfo",
      "description": "List of sample urls that match the website target",
      "type": "object",
      "properties": {
        "sampleUrls": {
          "description": "Webpage sample urls",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AppPaymentModelInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AppPaymentModelInfo",
      "description": "An app payment model criterion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of the app payment model.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Represents paid-for apps."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PAID"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomAffinityInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CustomAffinityInfo",
      "description": "A custom affinity criterion. A criterion of this type is only targetable.",
      "type": "object",
      "properties": {
        "customAffinity": {
          "description": "The CustomInterest resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomIntentInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CustomIntentInfo",
      "description": "A custom intent criterion. A criterion of this type is only targetable.",
      "type": "object",
      "properties": {
        "customIntent": {
          "description": "The CustomInterest resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomAudienceInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CustomAudienceInfo",
      "description": "A custom audience criterion.",
      "type": "object",
      "properties": {
        "customAudience": {
          "description": "The CustomAudience resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CombinedAudienceInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CombinedAudienceInfo",
      "description": "A combined audience criterion.",
      "type": "object",
      "properties": {
        "combinedAudience": {
          "description": "The CombinedAudience resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInfo",
      "description": "An audience criterion.",
      "type": "object",
      "properties": {
        "audience": {
          "description": "The Audience resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocationInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LocationInfo",
      "description": "A location criterion.",
      "type": "object",
      "properties": {
        "geoTargetConstant": {
          "description": "The geo target constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LanguageInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LanguageInfo",
      "description": "A language criterion.",
      "type": "object",
      "properties": {
        "languageConstant": {
          "description": "The language constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LifeEventInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LifeEventInfo",
      "description": "Represents a life event criterion.",
      "type": "object",
      "properties": {
        "lifeEventId": {
          "description": "Taxonomy id of the life event.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__VideoLineupInfo": {
      "id": "GoogleAdsGoogleadsV21Common__VideoLineupInfo",
      "description": "A Video lineup criterion.",
      "type": "object",
      "properties": {
        "videoLineupId": {
          "description": "ID for a Video lineup. Contact your Google business development representative for details.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ExtendedDemographicInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ExtendedDemographicInfo",
      "description": "Represents an extended demographic criterion.",
      "type": "object",
      "properties": {
        "extendedDemographicId": {
          "description": "Taxonomy id of the extended demographic group.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BrandListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__BrandListInfo",
      "description": "A Brand List Criterion is used to specify a list of brands. The list is represented as a SharedSet id type BRAND_HINT. A criterion of this type can be either targeted or excluded.",
      "type": "object",
      "properties": {
        "sharedSet": {
          "description": "Shared set resource name of the brand list.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriteriaResponse",
      "description": "Response message for an ad group criterion mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionResult",
      "description": "The result for the criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupCriterion": {
          "description": "The mutated ad group criterion with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersRequest",
      "description": "Request message for AdGroupCustomizerService.MutateAdGroupCustomizers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad group customizers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCustomizerOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupCustomizerOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupCustomizerOperation",
      "description": "A single operation (create, remove) on a customizer attribute.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group customizer",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCustomizer"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group customizer is expected, in this format: `customers/{customer_id}/adGroupCustomizers/{ad_group_id}~{customizer_attribute_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupCustomizer": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupCustomizer",
      "description": "A customizer value for the associated CustomizerAttribute at the AdGroup level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group customizer. Ad group customizer resource names have the form: `customers/{customer_id}/adGroupCustomizers/{ad_group_id}~{customizer_attribute_id}`",
          "type": "string"
        },
        "adGroup": {
          "description": "Immutable. The ad group to which the customizer attribute is linked.",
          "type": "string"
        },
        "customizerAttribute": {
          "description": "Required. Immutable. The customizer attribute which is linked to the ad group.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the ad group customizer.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The customizer value is enabled.",
            "The customizer value is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "value": {
          "description": "Required. The value to associate with the customizer attribute at this level. The value must be of the type specified for the CustomizerAttribute.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomizerValue"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizersResponse",
      "description": "Response message for an ad group customizer mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizerResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizerResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizerResult",
      "description": "The result for the ad group customizer mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroupCustomizer": {
          "description": "The mutated AdGroupCustomizer with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCustomizer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsRequest",
      "description": "Request message for AdGroupLabelService.MutateAdGroupLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on ad group labels.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupLabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupLabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupLabelOperation",
      "description": "A single operation (create, remove) on an ad group label.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group label.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupLabel"
        },
        "remove": {
          "description": "Remove operation: A resource name for the ad group label being removed, in this format: `customers/{customer_id}/adGroupLabels/{ad_group_id}~{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupLabel": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupLabel",
      "description": "A relationship between an ad group and a label.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group label. Ad group label resource names have the form: `customers/{customer_id}/adGroupLabels/{ad_group_id}~{label_id}`",
          "type": "string"
        },
        "adGroup": {
          "description": "Immutable. The ad group to which the label is attached.",
          "type": "string"
        },
        "label": {
          "description": "Immutable. The label assigned to the ad group.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelsResponse",
      "description": "Response message for an ad group labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelResult",
      "description": "The result for an ad group label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupsRequest",
      "description": "Request message for AdGroupService.MutateAdGroups.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad groups.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupOperation",
      "description": "A single operation (create, update, remove) on an ad group.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new ad group.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroup"
        },
        "update": {
          "description": "Update operation: The ad group is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroup"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed ad group is expected, in this format: `customers/{customer_id}/adGroups/{ad_group_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroup": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroup",
      "description": "An ad group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad group. Ad group resource names have the form: `customers/{customer_id}/adGroups/{ad_group_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the ad group.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the ad group. This field is required and should not be empty when creating new ad groups. It must contain fewer than 255 UTF-8 full-width characters. It must not contain any null (code point 0x0), NL line feed (code point 0xA) or carriage return (code point 0xD) characters.",
          "type": "string"
        },
        "status": {
          "description": "The status of the ad group.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The ad group is enabled.",
            "The ad group is paused.",
            "The ad group is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "type": {
          "description": "Immutable. The type of the ad group.",
          "type": "string",
          "enumDescriptions": [
            "The type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The default ad group type for Search campaigns.",
            "The default ad group type for Display campaigns.",
            "The ad group type for Shopping campaigns serving standard product ads.",
            "The default ad group type for Hotel campaigns.",
            "The type for ad groups in Smart Shopping campaigns.",
            "Short unskippable in-stream video ads.",
            "TrueView (skippable) in-stream video ads.",
            "TrueView in-display video ads.",
            "Unskippable in-stream video ads.",
            "Ad group type for Dynamic Search Ads ad groups.",
            "The type for ad groups in Shopping Comparison Listing campaigns.",
            "The ad group type for Promoted Hotel ad groups.",
            "Video responsive ad groups.",
            "Video efficient reach ad groups.",
            "Ad group type for Smart campaigns.",
            "Ad group type for Travel campaigns.",
            "Ad group type for YouTube Audio campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH_STANDARD",
            "DISPLAY_STANDARD",
            "SHOPPING_PRODUCT_ADS",
            "HOTEL_ADS",
            "SHOPPING_SMART_ADS",
            "VIDEO_BUMPER",
            "VIDEO_TRUE_VIEW_IN_STREAM",
            "VIDEO_TRUE_VIEW_IN_DISPLAY",
            "VIDEO_NON_SKIPPABLE_IN_STREAM",
            "SEARCH_DYNAMIC_ADS",
            "SHOPPING_COMPARISON_LISTING_ADS",
            "PROMOTED_HOTEL_ADS",
            "VIDEO_RESPONSIVE",
            "VIDEO_EFFICIENT_REACH",
            "SMART_CAMPAIGN_ADS",
            "TRAVEL_ADS",
            "YOUTUBE_AUDIO"
          ]
        },
        "adRotationMode": {
          "description": "The ad rotation mode of the ad group.",
          "type": "string",
          "enumDescriptions": [
            "The ad rotation mode has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Optimize ad group ads based on clicks or conversions.",
            "Rotate evenly forever."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTIMIZE",
            "ROTATE_FOREVER"
          ]
        },
        "baseAdGroup": {
          "description": "Output only. For draft or experiment ad groups, this field is the resource name of the base ad group from which this ad group was created. If a draft or experiment ad group does not have a base ad group, then this field is null. For base ad groups, this field equals the ad group resource name. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "trackingUrlTemplate": {
          "description": "The URL template for constructing a tracking URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "The list of mappings used to substitute custom parameter tags in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "campaign": {
          "description": "Immutable. The campaign to which the ad group belongs.",
          "type": "string"
        },
        "cpcBidMicros": {
          "description": "The maximum CPC (cost-per-click) bid.",
          "type": "string",
          "format": "int64"
        },
        "effectiveCpcBidMicros": {
          "description": "Output only. Value will be same as that of the CPC (cost-per-click) bid value when the bidding strategy is one of manual cpc, enhanced cpc, page one promoted or target outrank share, otherwise the value will be null.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "cpmBidMicros": {
          "description": "The maximum CPM (cost-per-thousand viewable impressions) bid.",
          "type": "string",
          "format": "int64"
        },
        "targetCpaMicros": {
          "description": "The target CPA (cost-per-acquisition). If the ad group's campaign bidding strategy is TargetCpa or MaximizeConversions (with its target_cpa field set), then this field overrides the target CPA specified in the campaign's bidding strategy. Otherwise, this value is ignored.",
          "type": "string",
          "format": "int64"
        },
        "cpvBidMicros": {
          "description": "The CPV (cost-per-view) bid.",
          "type": "string",
          "format": "int64"
        },
        "targetCpmMicros": {
          "description": "Average amount in micros that the advertiser is willing to pay for every thousand times the ad is shown.",
          "type": "string",
          "format": "int64"
        },
        "targetRoas": {
          "description": "The target ROAS (return-on-ad-spend) override. If the ad group's campaign bidding strategy is TargetRoas or MaximizeConversionValue (with its target_roas field set), then this field overrides the target ROAS specified in the campaign's bidding strategy. Otherwise, this value is ignored.",
          "type": "number",
          "format": "double"
        },
        "percentCpcBidMicros": {
          "description": "The percent cpc bid amount, expressed as a fraction of the advertised price for some good or service. The valid range for the fraction is [0,1) and the value stored here is 1,000,000 * [fraction].",
          "type": "string",
          "format": "int64"
        },
        "fixedCpmMicros": {
          "description": "The fixed amount in micros that the advertiser pays for every thousand impressions of the ad.",
          "type": "string",
          "format": "int64"
        },
        "targetCpvMicros": {
          "description": "Average amount in micros that the advertiser is willing to pay for every ad view.",
          "type": "string",
          "format": "int64"
        },
        "optimizedTargetingEnabled": {
          "description": "True if optimized targeting is enabled. Optimized Targeting is the replacement for Audience Expansion.",
          "type": "boolean"
        },
        "excludeDemographicExpansion": {
          "description": "When this value is true, demographics will be excluded from the types of targeting which are expanded when optimized_targeting_enabled is true. When optimized_targeting_enabled is false, this field is ignored. Default is false.",
          "type": "boolean"
        },
        "displayCustomBidDimension": {
          "description": "Allows advertisers to specify a targeting dimension on which to place absolute bids. This is only applicable for campaigns that target only the display network and not search.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword criteria, for example, 'mars cruise'. KEYWORD may be used as a custom bid dimension. Keywords are always a targeting dimension, so may not be set as a target \"ALL\" dimension with TargetRestriction.",
            "Audience criteria, which include user list, user interest, custom affinity, and custom in market.",
            "Topic criteria for targeting categories of content, for example, 'category::Animals\u003ePets' Used for Display and Video targeting.",
            "Criteria for targeting gender.",
            "Criteria for targeting age ranges.",
            "Placement criteria, which include websites like 'www.flowers4sale.com', as well as mobile applications, mobile app categories, YouTube videos, and YouTube channels.",
            "Criteria for parental status targeting.",
            "Criteria for income range targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "AUDIENCE",
            "TOPIC",
            "GENDER",
            "AGE_RANGE",
            "PLACEMENT",
            "PARENTAL_STATUS",
            "INCOME_RANGE"
          ]
        },
        "finalUrlSuffix": {
          "description": "URL template for appending params to Final URL.",
          "type": "string"
        },
        "targetingSetting": {
          "description": "Setting for targeting related features.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetingSetting"
        },
        "audienceSetting": {
          "description": "Immutable. Setting for audience related features.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroup_AudienceSetting"
        },
        "effectiveTargetCpaMicros": {
          "description": "Output only. The effective target CPA (cost-per-acquisition). This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "effectiveTargetCpaSource": {
          "description": "Output only. Source of the effective target CPA. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "effectiveTargetRoas": {
          "description": "Output only. The effective target ROAS (return-on-ad-spend). This field is read-only.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "effectiveTargetRoasSource": {
          "description": "Output only. Source of the effective target ROAS. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Effective bid or target is inherited from campaign bidding strategy.",
            "The bid or target is defined on the ad group.",
            "The bid or target is defined on the ad group criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BIDDING_STRATEGY",
            "AD_GROUP",
            "AD_GROUP_CRITERION"
          ]
        },
        "labels": {
          "description": "Output only. The resource names of labels attached to this ad group.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "excludedParentAssetFieldTypes": {
          "description": "The asset field types that should be excluded from this ad group. Asset links with these field types will not be inherited by this ad group from the upper levels.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is linked for use as a headline.",
              "The asset is linked for use as a description.",
              "The asset is linked for use as mandatory ad text.",
              "The asset is linked for use as a marketing image.",
              "The asset is linked for use as a media bundle.",
              "The asset is linked for use as a YouTube video.",
              "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
              "The asset is linked for use as a Lead Form extension.",
              "The asset is linked for use as a Promotion extension.",
              "The asset is linked for use as a Callout extension.",
              "The asset is linked for use as a Structured Snippet extension.",
              "The asset is linked for use as a Sitelink.",
              "The asset is linked for use as a Mobile App extension.",
              "The asset is linked for use as a Hotel Callout extension.",
              "The asset is linked for use as a Call extension.",
              "The asset is linked for use as a Price extension.",
              "The asset is linked for use as a long headline.",
              "The asset is linked for use as a business name.",
              "The asset is linked for use as a square marketing image.",
              "The asset is linked for use as a portrait marketing image.",
              "The asset is linked for use as a logo.",
              "The asset is linked for use as a landscape logo.",
              "The asset is linked for use as a non YouTube logo.",
              "The asset is linked for use to select a call-to-action.",
              "The asset is linked for use to select an ad image.",
              "The asset is linked for use as a business logo.",
              "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
              "The asset is linked for use as a Demand Gen carousel card.",
              "The asset is linked for use as a Business Message.",
              "The asset is linked for use as a tall portrait marketing image.",
              "The asset is linked for use as related YouTube videos."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "HEADLINE",
              "DESCRIPTION",
              "MANDATORY_AD_TEXT",
              "MARKETING_IMAGE",
              "MEDIA_BUNDLE",
              "YOUTUBE_VIDEO",
              "BOOK_ON_GOOGLE",
              "LEAD_FORM",
              "PROMOTION",
              "CALLOUT",
              "STRUCTURED_SNIPPET",
              "SITELINK",
              "MOBILE_APP",
              "HOTEL_CALLOUT",
              "CALL",
              "PRICE",
              "LONG_HEADLINE",
              "BUSINESS_NAME",
              "SQUARE_MARKETING_IMAGE",
              "PORTRAIT_MARKETING_IMAGE",
              "LOGO",
              "LANDSCAPE_LOGO",
              "VIDEO",
              "CALL_TO_ACTION_SELECTION",
              "AD_IMAGE",
              "BUSINESS_LOGO",
              "HOTEL_PROPERTY",
              "DEMAND_GEN_CAROUSEL_CARD",
              "BUSINESS_MESSAGE",
              "TALL_PORTRAIT_MARKETING_IMAGE",
              "RELATED_YOUTUBE_VIDEOS"
            ]
          }
        },
        "excludedParentAssetSetTypes": {
          "description": "The asset set types that should be excluded from this ad group. Asset set links with these types will not be inherited by this ad group from the upper levels. Location group types (GMB_DYNAMIC_LOCATION_GROUP, CHAIN_DYNAMIC_LOCATION_GROUP, and STATIC_LOCATION_GROUP) are child types of LOCATION_SYNC. Therefore, if LOCATION_SYNC is set for this field, all location group asset sets are not allowed to be linked to this ad group, and all Location Extension (LE) and Affiliate Location Extensions (ALE) will not be served under this ad group. Only LOCATION_SYNC is currently supported.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Page asset set.",
              "Dynamic education asset set.",
              "Google Merchant Center asset set.",
              "Dynamic real estate asset set.",
              "Dynamic custom asset set.",
              "Dynamic hotels and rentals asset set.",
              "Dynamic flights asset set.",
              "Dynamic travel asset set.",
              "Dynamic local asset set.",
              "Dynamic jobs asset set.",
              "Location sync level asset set.",
              "Business Profile location group asset set.",
              "Chain location group asset set which can be used for both owned locations and affiliate locations.",
              "Static location group asset set which can be used for both owned locations and affiliate locations.",
              "Hotel Property asset set which is used to link a hotel property feed to Performance Max for travel goals campaigns.",
              "Travel Feed asset set type. Can represent either a Hotel feed or a Things to Do (activities) feed."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "PAGE_FEED",
              "DYNAMIC_EDUCATION",
              "MERCHANT_CENTER_FEED",
              "DYNAMIC_REAL_ESTATE",
              "DYNAMIC_CUSTOM",
              "DYNAMIC_HOTELS_AND_RENTALS",
              "DYNAMIC_FLIGHTS",
              "DYNAMIC_TRAVEL",
              "DYNAMIC_LOCAL",
              "DYNAMIC_JOBS",
              "LOCATION_SYNC",
              "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP",
              "CHAIN_DYNAMIC_LOCATION_GROUP",
              "STATIC_LOCATION_GROUP",
              "HOTEL_PROPERTY",
              "TRAVEL_FEED"
            ]
          }
        },
        "primaryStatus": {
          "description": "Output only. Provides aggregated view into why an ad group is not serving or not serving optimally.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad group is eligible to serve.",
            "The ad group is paused.",
            "The ad group is removed.",
            "The ad group may serve in the future.",
            "The ad group is not eligible to serve.",
            "The ad group has limited servability."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "NOT_ELIGIBLE",
            "LIMITED"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides reasons for why an ad group is not serving or not serving optimally.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The user-specified campaign status is removed. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified campaign status is paused. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified time for this campaign to start is in the future. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE",
              "The user-specified time for this campaign to end has passed. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified ad group status is paused. Contributes to AdGroupPrimaryStatus.PAUSED.",
              "The user-specified ad group status is removed. Contributes to AdGroupPrimaryStatus.REMOVED.",
              "The construction of this ad group is not yet complete. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified keyword statuses in this ad group are all paused. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "No eligible keywords exist in this ad group. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified ad group ads statuses in this ad group are all paused. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "No eligible ad group ads exist in this ad group. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "Policy status reason when at least one ad is disapproved. Contributes to multiple AdGroupPrimaryStatus.",
              "Policy status reason when at least one ad is limited by policy. Contributes to multiple AdGroupPrimaryStatus.",
              "Policy status reason when most ads are pending review. Contributes to AdGroupPrimaryStatus.PENDING.",
              "The AdGroup belongs to a Draft campaign. Contributes to AdGroupPrimaryStatus.NOT_ELIGIBLE.",
              "Ad group has been paused due to prolonged low activity in serving. Contributes to AdGroupPrimaryStatus.PAUSED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CAMPAIGN_REMOVED",
              "CAMPAIGN_PAUSED",
              "CAMPAIGN_PENDING",
              "CAMPAIGN_ENDED",
              "AD_GROUP_PAUSED",
              "AD_GROUP_REMOVED",
              "AD_GROUP_INCOMPLETE",
              "KEYWORDS_PAUSED",
              "NO_KEYWORDS",
              "AD_GROUP_ADS_PAUSED",
              "NO_AD_GROUP_ADS",
              "HAS_ADS_DISAPPROVED",
              "HAS_ADS_LIMITED_BY_POLICY",
              "MOST_ADS_UNDER_REVIEW",
              "CAMPAIGN_DRAFT",
              "AD_GROUP_PAUSED_DUE_TO_LOW_ACTIVITY"
            ]
          }
        },
        "demandGenAdGroupSettings": {
          "description": "Settings for Demand Gen ad groups.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroup_DemandGenAdGroupSettings"
        },
        "videoAdGroupSettings": {
          "description": "Settings for video ad groups.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroup_VideoAdGroupSettings"
        },
        "aiMaxAdGroupSetting": {
          "description": "Settings for AI Max feature in standard search adgroups.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroup_AiMaxAdGroupSetting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetingSetting": {
      "id": "GoogleAdsGoogleadsV21Common__TargetingSetting",
      "description": "Settings for the targeting-related features, at the campaign and ad group levels. For more details about the targeting setting, visit https://support.google.com/google-ads/answer/7365594",
      "type": "object",
      "properties": {
        "targetRestrictions": {
          "description": "The per-targeting-dimension setting to restrict the reach of your campaign or ad group.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TargetRestriction"
          }
        },
        "targetRestrictionOperations": {
          "description": "The list of operations changing the target restrictions. Adding a target restriction with a targeting dimension that already exists causes the existing target restriction to be replaced with the new value.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TargetRestrictionOperation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetRestriction": {
      "id": "GoogleAdsGoogleadsV21Common__TargetRestriction",
      "description": "The list of per-targeting-dimension targeting settings.",
      "type": "object",
      "properties": {
        "targetingDimension": {
          "description": "The targeting dimension that these settings apply to.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword criteria, for example, 'mars cruise'. KEYWORD may be used as a custom bid dimension. Keywords are always a targeting dimension, so may not be set as a target \"ALL\" dimension with TargetRestriction.",
            "Audience criteria, which include user list, user interest, custom affinity, and custom in market.",
            "Topic criteria for targeting categories of content, for example, 'category::Animals\u003ePets' Used for Display and Video targeting.",
            "Criteria for targeting gender.",
            "Criteria for targeting age ranges.",
            "Placement criteria, which include websites like 'www.flowers4sale.com', as well as mobile applications, mobile app categories, YouTube videos, and YouTube channels.",
            "Criteria for parental status targeting.",
            "Criteria for income range targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "AUDIENCE",
            "TOPIC",
            "GENDER",
            "AGE_RANGE",
            "PLACEMENT",
            "PARENTAL_STATUS",
            "INCOME_RANGE"
          ]
        },
        "bidOnly": {
          "description": "Indicates whether to restrict your ads to show only for the criteria you have selected for this targeting_dimension, or to target all values for this targeting_dimension and show ads based on your targeting in other TargetingDimensions. A value of `true` means that these criteria will only apply bid modifiers, and not affect targeting. A value of `false` means that these criteria will restrict targeting as well as applying bid modifiers.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetRestrictionOperation": {
      "id": "GoogleAdsGoogleadsV21Common__TargetRestrictionOperation",
      "description": "Operation to be performed on a target restriction list in a mutate.",
      "type": "object",
      "properties": {
        "operator": {
          "description": "Type of list operation to perform.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified.",
            "Used for return value only. Represents value unknown in this version.",
            "Add the restriction to the existing restrictions.",
            "Remove the restriction from the existing restrictions."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADD",
            "REMOVE"
          ]
        },
        "value": {
          "description": "The target restriction being added to or removed from the list.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRestriction"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroup_AudienceSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroup_AudienceSetting",
      "description": "Settings for the audience targeting.",
      "type": "object",
      "properties": {
        "useAudienceGrouped": {
          "description": "Immutable. If true, this ad group uses an Audience resource for audience targeting. If false, this ad group may use audience segment criteria instead.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroup_DemandGenAdGroupSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroup_DemandGenAdGroupSettings",
      "description": "Settings for Demand Gen ad groups.",
      "type": "object",
      "properties": {
        "channelControls": {
          "description": "Channel controls for Demand Gen ad groups.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettings_DemandGenChannelControls"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettings_DemandGenChannelControls": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettings_DemandGenChannelControls",
      "description": "Channel controls for Demand Gen ad groups.",
      "type": "object",
      "properties": {
        "channelConfig": {
          "description": "Output only. Channel configuration reflecting which field in the oneof is populated.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The channel controls configuration uses a general channel strategy; individual channels are not configured separately.",
            "The channel controls configuration explicitly defines the selected channels."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CHANNEL_STRATEGY",
            "SELECTED_CHANNELS"
          ]
        },
        "channelStrategy": {
          "description": "High level channel strategy.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "All channels are enabled.",
            "All Google-owned and operated channels are enabled; third-party channels (e.g., Display) are disabled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_CHANNELS",
            "ALL_OWNED_AND_OPERATED_CHANNELS"
          ]
        },
        "selectedChannels": {
          "description": "Explicitly selected channels. This field should be set with at least one true value when present.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettingsDemandGenChannelControls_DemandGenSelectedChannels"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettingsDemandGenChannelControls_DemandGenSelectedChannels": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroupDemandGenAdGroupSettingsDemandGenChannelControls_DemandGenSelectedChannels",
      "description": "Explicitly selected channels for channel controls in Demand Gen ad groups.",
      "type": "object",
      "properties": {
        "youtubeInStream": {
          "description": "Whether to enable ads on the YouTube In-Stream channel.",
          "type": "boolean"
        },
        "youtubeInFeed": {
          "description": "Whether to enable ads on the YouTube In-Feed channel.",
          "type": "boolean"
        },
        "youtubeShorts": {
          "description": "Whether to enable ads on the YouTube Shorts channel.",
          "type": "boolean"
        },
        "discover": {
          "description": "Whether to enable ads on the Discover channel.",
          "type": "boolean"
        },
        "gmail": {
          "description": "Whether to enable ads on the Gmail channel.",
          "type": "boolean"
        },
        "display": {
          "description": "Whether to enable ads on the Display channel.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroup_VideoAdGroupSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroup_VideoAdGroupSettings",
      "description": "Settings for video ad groups.",
      "type": "object",
      "properties": {
        "videoAdSequence": {
          "description": "The video ads sequence step settings containing step ID.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AdGroupVideoAdGroupSettings_VideoAdSequenceStepSetting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroupVideoAdGroupSettings_VideoAdSequenceStepSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroupVideoAdGroupSettings_VideoAdSequenceStepSetting",
      "description": "The video ads sequence step settings containing step ID.",
      "type": "object",
      "properties": {
        "stepId": {
          "description": "The ID of this sequence step from an existing `campaign.video_campaign_settings.video_ad_sequence` definition. Only one Ad Group can point to a given `step_id`.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdGroup_AiMaxAdGroupSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_AdGroup_AiMaxAdGroupSetting",
      "description": "Settings for AI Max feature in standard search adgroups.",
      "type": "object",
      "properties": {
        "disableSearchTermMatching": {
          "description": "Disable search term matching for this adgroup when AI Max is enabled. Search term matching uses broad match, asset-based, and landing page-based technology to improve reach.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupsResponse",
      "description": "Response message for an ad group mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdGroupResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdGroupResult",
      "description": "The result for the ad group mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "adGroup": {
          "description": "The mutated ad group with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroup"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdParametersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdParametersRequest",
      "description": "Request message for AdParameterService.MutateAdParameters",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ad parameters.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdParameterOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdParameterOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdParameterOperation",
      "description": "A single operation (create, update, remove) on ad parameter.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new ad parameter.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdParameter"
        },
        "update": {
          "description": "Update operation: The ad parameter is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdParameter"
        },
        "remove": {
          "description": "Remove operation: A resource name for the ad parameter to remove is expected in this format: `customers/{customer_id}/adParameters/{ad_group_id}~{criterion_id}~{parameter_index}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdParameter": {
      "id": "GoogleAdsGoogleadsV21Resources__AdParameter",
      "description": "An ad parameter that is used to update numeric values (such as prices or inventory levels) in any text line of an ad (including URLs). There can be a maximum of two AdParameters per ad group criterion. (One with parameter_index = 1 and one with parameter_index = 2.) In the ad the parameters are referenced by a placeholder of the form \"{param#:value}\". For example, \"{param1:$17}\"",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the ad parameter. Ad parameter resource names have the form: `customers/{customer_id}/adParameters/{ad_group_id}~{criterion_id}~{parameter_index}`",
          "type": "string"
        },
        "adGroupCriterion": {
          "description": "Immutable. The ad group criterion that this ad parameter belongs to.",
          "type": "string"
        },
        "parameterIndex": {
          "description": "Immutable. The unique index of this ad parameter. Must be either 1 or 2.",
          "type": "string",
          "format": "int64"
        },
        "insertionText": {
          "description": "Numeric value to insert into the ad text. The following restrictions apply: - Can use comma or period as a separator, with an optional period or comma (respectively) for fractional values. For example, 1,000,000.00 and 2.000.000,10 are valid. - Can be prepended or appended with a currency symbol. For example, $99.99 is valid. - Can be prepended or appended with a currency code. For example, 99.99USD and EUR200 are valid. - Can use '%'. For example, 1.0% and 1,0% are valid. - Can use plus or minus. For example, -10.99 and 25+ are valid. - Can use '/' between two numbers. For example 4/1 and 0.95/0.45 are valid.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdParametersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdParametersResponse",
      "description": "Response message for an ad parameter mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdParameterResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdParameterResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdParameterResult",
      "description": "The result for the ad parameter mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name returned for successful operations.",
          "type": "string"
        },
        "adParameter": {
          "description": "The mutated AdParameter with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdParameter"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdsRequest",
      "description": "Request message for AdService.MutateAds.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual ads.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AdOperation",
      "description": "A single update operation on an ad.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "policyValidationParameter": {
          "description": "Configuration for how policies are validated.",
          "$ref": "GoogleAdsGoogleadsV21Common__PolicyValidationParameter"
        },
        "update": {
          "description": "Update operation: The ad is expected to have a valid resource name in this format: `customers/{customer_id}/ads/{ad_id}`",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdsResponse",
      "description": "Response message for an ad mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAdResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAdResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAdResult",
      "description": "The result for the ad mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name returned for successful operations.",
          "type": "string"
        },
        "ad": {
          "description": "The mutated ad with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsRequest",
      "description": "Request message for AssetGroupAssetService.MutateAssetGroupAssets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset group assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupAssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetGroupAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetGroupAssetOperation",
      "description": "A single operation (create, remove) on an asset group asset.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset group asset.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupAsset"
        },
        "update": {
          "description": "Update operation: The asset group asset is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupAsset"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset group asset is expected, in this format: `customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupAsset": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupAsset",
      "description": "AssetGroupAsset is the link between an asset and an asset group. Adding an AssetGroupAsset links an asset with an asset group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset group asset. Asset group asset resource name have the form: `customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}`",
          "type": "string"
        },
        "assetGroup": {
          "description": "Immutable. The asset group which this asset group asset is linking.",
          "type": "string"
        },
        "asset": {
          "description": "Immutable. The asset which this asset group asset is linking.",
          "type": "string"
        },
        "fieldType": {
          "description": "The description of the placement of the asset within the asset group. For example: HEADLINE, YOUTUBE_VIDEO etc",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "status": {
          "description": "The status of the link between an asset and asset group.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Asset link is enabled.",
            "Asset link has been removed.",
            "Asset link is paused."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "primaryStatus": {
          "description": "Output only. Provides the PrimaryStatus of this asset link. Primary status is meant essentially to differentiate between the plain \"status\" field, which has advertiser set values of enabled, paused, or removed. The primary status takes into account other signals (for assets its mainly policy and quality approvals) to come up with a more comprehensive status to indicate its serving state.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is eligible to serve.",
            "The user-specified asset link status is paused.",
            "The user-specified asset link status is removed.",
            "The asset may serve in the future.",
            "The asset is serving in a partial capacity.",
            "The asset is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides a list of reasons for why an asset is not serving or not serving at full capacity.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is paused for its linked rollup level. Contributes to a PrimaryStatus of PAUSED.",
              "The asset is removed for its linked rollup level. Contributes to a PrimaryStatus of REMOVED.",
              "The asset has been marked as disapproved. Contributes to a PrimaryStatus of NOT_ELIGIBLE",
              "The asset has not completed policy review. Contributes to a PrimaryStatus of PENDING.",
              "The asset is approved with policies applied. Contributes to a PrimaryStatus of LIMITED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "ASSET_LINK_PAUSED",
              "ASSET_LINK_REMOVED",
              "ASSET_DISAPPROVED",
              "ASSET_UNDER_REVIEW",
              "ASSET_APPROVED_LABELED"
            ]
          }
        },
        "primaryStatusDetails": {
          "description": "Output only. Provides the details of the primary status and its associated reasons.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails"
          }
        },
        "performanceLabel": {
          "description": "Output only. The performance of this asset group asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This asset does not yet have any performance informantion. This may be because it is still under review.",
            "The asset has started getting impressions but the stats are not statistically significant enough to get an asset performance label.",
            "Worst performing assets.",
            "Good performing assets.",
            "Best performing assets."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "LEARNING",
            "LOW",
            "GOOD",
            "BEST"
          ]
        },
        "policySummary": {
          "description": "Output only. The policy information for this asset group asset.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__PolicySummary"
        },
        "source": {
          "description": "Output only. Source of the asset group asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PolicySummary": {
      "id": "GoogleAdsGoogleadsV21Common__PolicySummary",
      "description": "Contains policy summary information.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "The list of policy findings.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        },
        "reviewStatus": {
          "description": "Where in the review process the resource is.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Currently under review.",
            "Primary review complete. Other reviews may be continuing.",
            "The resource has been resubmitted for approval or its policy decision has been appealed.",
            "The resource is eligible and may be serving but could still undergo further review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REVIEW_IN_PROGRESS",
            "REVIEWED",
            "UNDER_APPEAL",
            "ELIGIBLE_MAY_SERVE"
          ]
        },
        "approvalStatus": {
          "description": "The overall approval status, which is calculated based on the status of its individual policy topic entries.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Will not serve.",
            "Serves with restrictions.",
            "Serves without restrictions.",
            "Will not serve in targeted countries, but may serve for users who are searching for information about the targeted countries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISAPPROVED",
            "APPROVED_LIMITED",
            "APPROVED",
            "AREA_OF_INTEREST_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetsResponse",
      "description": "Response message for an asset group asset mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetResult",
      "description": "The result for the asset group asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersRequest",
      "description": "Request message for AssetGroupListingGroupFilterService.MutateAssetGroupListingGroupFilters. partial_failure is not supported because the tree needs to be validated together.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset group listing group filters.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupListingGroupFilterOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetGroupListingGroupFilterOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetGroupListingGroupFilterOperation",
      "description": "A single operation (create, remove) on an asset group listing group filter.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset group listing group filter.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter"
        },
        "update": {
          "description": "Update operation: The asset group listing group filter is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset group listing group filter is expected, in this format: `customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}` An entity can be removed only if it's not referenced by other parent_listing_group_id. If multiple entities are being deleted, the mutates must be in the correct order.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter",
      "description": "AssetGroupListingGroupFilter represents a listing group filter tree node in an asset group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset group listing group filter. Asset group listing group filter resource name have the form: `customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}`",
          "type": "string"
        },
        "assetGroup": {
          "description": "Immutable. The asset group which this asset group listing group filter is part of.",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the ListingGroupFilter.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Immutable. Type of a listing group filter node.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Subdivision of products along some listing dimensions.",
            "An included listing group filter leaf node.",
            "An excluded listing group filter leaf node."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SUBDIVISION",
            "UNIT_INCLUDED",
            "UNIT_EXCLUDED"
          ]
        },
        "listingSource": {
          "description": "Immutable. The source of listings filtered by this listing group filter.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Listings from a Shopping source, like products from Google Merchant Center.",
            "Listings from a webpage source, like URLs from a page feed or from the advertiser web domain."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SHOPPING",
            "WEBPAGE"
          ]
        },
        "caseValue": {
          "description": "Dimension value with which this listing group is refining its parent. Undefined for the root group.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimension"
        },
        "parentListingGroupFilter": {
          "description": "Immutable. Resource name of the parent listing group subdivision. Null for the root listing group filter node.",
          "type": "string"
        },
        "path": {
          "description": "Output only. The path of dimensions defining this listing group filter.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimensionPath"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimension": {
      "id": "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimension",
      "description": "Listing dimensions for the asset group listing group filter.",
      "type": "object",
      "properties": {
        "productCategory": {
          "description": "Category of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCategory"
        },
        "productBrand": {
          "description": "Brand of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductBrand"
        },
        "productChannel": {
          "description": "Locality of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductChannel"
        },
        "productCondition": {
          "description": "Condition of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCondition"
        },
        "productCustomAttribute": {
          "description": "Custom attribute of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCustomAttribute"
        },
        "productItemId": {
          "description": "Item id of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductItemId"
        },
        "productType": {
          "description": "Type of a product offer.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductType"
        },
        "webpage": {
          "description": "Filters for URLs in a page feed and URLs from the advertiser web domain.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_Webpage"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCategory": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCategory",
      "description": "One element of a category at a certain level. Top-level categories are at level 1, their children at level 2, and so on. We currently support up to 5 levels. The user must specify a dimension type that indicates the level of the category. All cases of the same subdivision must have the same dimension type (category level).",
      "type": "object",
      "properties": {
        "categoryId": {
          "description": "ID of the product category. This ID is equivalent to the google_product_category ID as described in this article: https://support.google.com/merchants/answer/6324436",
          "type": "string",
          "format": "int64"
        },
        "level": {
          "description": "Indicates the level of the category in the taxonomy.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Level 1.",
            "Level 2.",
            "Level 3.",
            "Level 4.",
            "Level 5."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEVEL1",
            "LEVEL2",
            "LEVEL3",
            "LEVEL4",
            "LEVEL5"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductBrand": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductBrand",
      "description": "Brand of the product.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product brand.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductChannel": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductChannel",
      "description": "Locality of a product offer.",
      "type": "object",
      "properties": {
        "channel": {
          "description": "Value of the locality.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold online.",
            "The item is sold in local stores."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ONLINE",
            "LOCAL"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCondition",
      "description": "Condition of a product offer.",
      "type": "object",
      "properties": {
        "condition": {
          "description": "Value of the condition.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The product condition is new.",
            "The product condition is refurbished.",
            "The product condition is used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "REFURBISHED",
            "USED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCustomAttribute": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductCustomAttribute",
      "description": "Custom attribute of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "String value of the product custom attribute.",
          "type": "string"
        },
        "index": {
          "description": "Indicates the index of the custom attribute.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "First listing group filter custom attribute.",
            "Second listing group filter custom attribute.",
            "Third listing group filter custom attribute.",
            "Fourth listing group filter custom attribute.",
            "Fifth listing group filter custom attribute."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INDEX0",
            "INDEX1",
            "INDEX2",
            "INDEX3",
            "INDEX4"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductItemId": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductItemId",
      "description": "Item id of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value of the id.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductType": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_ProductType",
      "description": "Type of a product offer.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value of the type.",
          "type": "string"
        },
        "level": {
          "description": "Level of the type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Level 1.",
            "Level 2.",
            "Level 3.",
            "Level 4.",
            "Level 5."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEVEL1",
            "LEVEL2",
            "LEVEL3",
            "LEVEL4",
            "LEVEL5"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_Webpage": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_Webpage",
      "description": "Filters for URLs in a page feed and URLs from the advertiser web domain. Several root nodes with this dimension are allowed in an asset group and their conditions are considered in OR.",
      "type": "object",
      "properties": {
        "conditions": {
          "description": "The webpage conditions are case sensitive and these are and-ed together when evaluated for filtering. All the conditions should be of same type. Example1: for URL1 = www.ads.google.com?ocid=1&euid=2 and URL2 = www.ads.google.com?ocid=1 and with \"ocid\" and \"euid\" as url_contains conditions, URL1 will be matched, but URL2 not. Example2 : If URL1 has Label1, Label2 and URL2 has Label2, Label3, then with Label1 and Label2 as custom_label conditions, URL1 will be matched but not URL2. With Label2 as the only custom_label condition then both URL1 and URL2 will be matched.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_WebpageCondition"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_WebpageCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ListingGroupFilterDimension_WebpageCondition",
      "description": "Matching condition for URL filtering.",
      "type": "object",
      "properties": {
        "customLabel": {
          "description": "Filters the URLs in a page feed that have this custom label. A custom label can be added to a campaign by creating an AssetSet of type PAGE_FEED and linking it to the campaign using CampaignAssetSet.",
          "type": "string"
        },
        "urlContains": {
          "description": "Filters the URLs in a page feed and the URLs from the advertiser web domain that contain this string.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimensionPath": {
      "id": "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimensionPath",
      "description": "The path defining of dimensions defining a listing group filter.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "Output only. The complete path of dimensions through the listing group filter hierarchy (excluding the root node) to this listing group filter.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__ListingGroupFilterDimension"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFiltersResponse",
      "description": "Response message for an asset group listing group filter mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFilterResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFilterResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFilterResult",
      "description": "The result for the asset group listing group filter mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "assetGroupListingGroupFilter": {
          "description": "The mutated AssetGroupListingGroupFilter with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupsRequest",
      "description": "Request message for AssetGroupService.MutateAssetGroups.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset groups.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetGroupOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetGroupOperation",
      "description": "A single operation (create, remove) on an asset group.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset group",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroup"
        },
        "update": {
          "description": "Update operation: The asset group is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroup"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset group is expected, in this format: `customers/{customer_id}/assetGroups/{asset_group_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroup": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroup",
      "description": "An asset group. AssetGroupAsset is used to link an asset to the asset group. AssetGroupSignal is used to associate a signal to an asset group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset group. Asset group resource names have the form: `customers/{customer_id}/assetGroups/{asset_group_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the asset group.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "campaign": {
          "description": "Immutable. The campaign with which this asset group is associated. The asset which is linked to the asset group.",
          "type": "string"
        },
        "name": {
          "description": "Required. Name of the asset group. Required. It must have a minimum length of 1 and maximum length of 128. It must be unique under a campaign.",
          "type": "string"
        },
        "finalUrls": {
          "description": "A list of final URLs after all cross domain redirects. In performance max, by default, the urls are eligible for expansion unless opted out.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalMobileUrls": {
          "description": "A list of final mobile URLs after all cross domain redirects. In performance max, by default, the urls are eligible for expansion unless opted out.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "description": "The status of the asset group.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The asset group is enabled.",
            "The asset group is paused.",
            "The asset group is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "primaryStatus": {
          "description": "Output only. The primary status of the asset group. Provides insights into why an asset group is not serving or not serving optimally.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset group is eligible to serve.",
            "The asset group is paused.",
            "The asset group is removed.",
            "The asset group is not eligible to serve.",
            "The asset group has limited servability.",
            "The asset group is pending approval and may serve in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "NOT_ELIGIBLE",
            "LIMITED",
            "PENDING"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides reasons into why an asset group is not serving or not serving optimally. It will be empty when the asset group is serving without issues.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The user-specified asset group status is paused. Contributes to AssetGroupPrimaryStatus.PAUSED",
              "The user-specified asset group status is removed. Contributes to AssetGroupPrimaryStatus.REMOVED.",
              "The user-specified campaign status is removed. Contributes to AssetGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified campaign status is paused. Contributes to AssetGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified time for this campaign to start is in the future. Contributes to AssetGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The user-specified time for this campaign to end has passed. Contributes to AssetGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The asset group is approved but only serves in limited capacity due to policies. Contributes to AssetGroupPrimaryStatus.LIMITED.",
              "The asset group has been marked as disapproved. Contributes to AssetGroupPrimaryStatus.NOT_ELIGIBLE.",
              "The asset group has not completed policy review. Contributes to AssetGroupPrimaryStatus.PENDING."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "ASSET_GROUP_PAUSED",
              "ASSET_GROUP_REMOVED",
              "CAMPAIGN_REMOVED",
              "CAMPAIGN_PAUSED",
              "CAMPAIGN_PENDING",
              "CAMPAIGN_ENDED",
              "ASSET_GROUP_LIMITED",
              "ASSET_GROUP_DISAPPROVED",
              "ASSET_GROUP_UNDER_REVIEW"
            ]
          }
        },
        "path1": {
          "description": "First part of text that may appear appended to the url displayed in the ad.",
          "type": "string"
        },
        "path2": {
          "description": "Second part of text that may appear appended to the url displayed in the ad. This field can only be set when path1 is set.",
          "type": "string"
        },
        "adStrength": {
          "description": "Output only. Overall ad strength of this asset group.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad strength is currently pending.",
            "No ads could be generated.",
            "Poor strength.",
            "Average strength.",
            "Good strength.",
            "Excellent strength."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "NO_ADS",
            "POOR",
            "AVERAGE",
            "GOOD",
            "EXCELLENT"
          ]
        },
        "assetCoverage": {
          "description": "Output only. The asset coverage of this asset group.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetCoverage"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetCoverage": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetCoverage",
      "description": "Information about the asset coverage of an asset group.",
      "type": "object",
      "properties": {
        "adStrengthActionItems": {
          "description": "Output only. A list of action items to improve the ad strength of an asset group.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__AdStrengthActionItem"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdStrengthActionItem": {
      "id": "GoogleAdsGoogleadsV21Resources__AdStrengthActionItem",
      "description": "An action item to improve the ad strength of an asset group.",
      "type": "object",
      "properties": {
        "actionItemType": {
          "description": "Output only. The action item type.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This action item suggests adding an asset to the asset group."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADD_ASSET"
          ]
        },
        "addAssetDetails": {
          "description": "Output only. The action item details for action item type ADD_ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AdStrengthActionItem_AddAssetDetails"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AdStrengthActionItem_AddAssetDetails": {
      "id": "GoogleAdsGoogleadsV21Resources_AdStrengthActionItem_AddAssetDetails",
      "description": "The details of the asset to add.",
      "type": "object",
      "properties": {
        "assetFieldType": {
          "description": "Output only. The asset field type of the asset(s) to add.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "assetCount": {
          "description": "Output only. The number of assets to add.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "videoAspectRatioRequirement": {
          "description": "Output only. For video field types, the required aspect ratio of the video. When unset and asset_field_type is YOUTUBE_VIDEO, the system recommends the advertiser upload any YouTube video, regardless of aspect ratio.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The received value is not known in this version.",
            "The video requires a horizontal aspect ratio.",
            "The video requires a square aspect ratio.",
            "The video requires a vertical aspect ratio."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HORIZONTAL",
            "SQUARE",
            "VERTICAL"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupsResponse",
      "description": "Response message for an asset group mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupResult",
      "description": "The result for the asset group mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsRequest",
      "description": "Request message for AssetGroupSignalService.MutateAssetGroupSignals.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset group signals.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupSignalOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetGroupSignalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetGroupSignalOperation",
      "description": "A single operation (create, remove) on an asset group signal.",
      "type": "object",
      "properties": {
        "exemptPolicyViolationKeys": {
          "description": "Optional. The list of policy violation keys that should not cause a PolicyViolationError to be reported. Not all policy violations are exemptable, refer to the is_exemptible field in the returned PolicyViolationError. Resources violating these polices will be saved, but will not be eligible to serve. They may begin serving at a later time due to a change in policies, re-review of the resource, or a change in advertiser certificates.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyViolationKey"
          }
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset group signal.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupSignal"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset group signal is expected, in this format: `customers/{customer_id}/assetGroupSignals/{asset_group_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupSignal": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupSignal",
      "description": "AssetGroupSignal represents a signal in an asset group. The existence of a signal tells the performance max campaign who's most likely to convert. Performance Max uses the signal to look for new people with similar or stronger intent to find conversions across Search, Display, Video, and more.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset group signal. Asset group signal resource name have the form: `customers/{customer_id}/assetGroupSignals/{asset_group_id}~{signal_id}`",
          "type": "string"
        },
        "assetGroup": {
          "description": "Immutable. The asset group which this asset group signal belongs to.",
          "type": "string"
        },
        "approvalStatus": {
          "description": "Output only. Approval status is the output value for search theme signal after Google ads policy review. When using Audience signal, this field is not used and will be absent.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Search Theme is eligible to show ads.",
            "Low search volume; Below first page bid estimate.",
            "Search Theme is inactive and isn't showing ads. A disapproved Search Theme usually means there's an issue with one or more of our advertising policies.",
            "Search Theme is under review. It won’t be able to trigger ads until it's been reviewed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPROVED",
            "LIMITED",
            "DISAPPROVED",
            "UNDER_REVIEW"
          ]
        },
        "disapprovalReasons": {
          "description": "Output only. Computed for SearchTheme signals. When using Audience signal, this field is not used and will be absent.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "audience": {
          "description": "Immutable. The audience signal to be used by the performance max campaign.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInfo"
        },
        "searchTheme": {
          "description": "Immutable. The search_theme signal to be used by the performance max campaign. Mutate errors of search_theme criterion includes AssetGroupSignalError.UNSPECIFIED AssetGroupSignalError.UNKNOWN AssetGroupSignalError.TOO_MANY_WORDS AssetGroupSignalError.SEARCH_THEME_POLICY_VIOLATION FieldError.REQUIRED StringFormatError.ILLEGAL_CHARS StringLengthError.TOO_LONG ResourceCountLimitExceededError.RESOURCE_LIMIT",
          "$ref": "GoogleAdsGoogleadsV21Common__SearchThemeInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SearchThemeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__SearchThemeInfo",
      "description": "A Search Theme criterion only on Performance Max campaign. Represents a keyword-like advertiser input.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Each Search Theme has a value of a simple string, like keywords. There are limits on overall length, allowed characters, and number of words.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalsResponse",
      "description": "Response message for an asset group signal mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalResult",
      "description": "The result for the asset group signal mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "assetGroupSignal": {
          "description": "The mutated AssetGroupSignal with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupSignal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetsRequest",
      "description": "Request message for AssetService.MutateAssets",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetOperation",
      "description": "A single operation to create an asset. Supported asset types are YoutubeVideoAsset, MediaBundleAsset, ImageAsset, LeadFormAsset, LocationAsset, and ImageAsset. TextAsset can be created with an Ad inline, but it can also be created apart from an Ad like other assets.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
        },
        "update": {
          "description": "Update operation: The asset is expected to have a valid resource name in this format: `customers/{customer_id}/assets/{asset_id}`",
          "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Asset": {
      "id": "GoogleAdsGoogleadsV21Resources__Asset",
      "description": "Asset is a part of an ad which can be shared across multiple ads. It can be an image (ImageAsset), a video (YoutubeVideoAsset), etc. Assets are immutable and cannot be removed. To stop an asset from serving, remove the asset from the entity that is using it.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset. Asset resource names have the form: `customers/{customer_id}/assets/{asset_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the asset.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Optional name of the asset.",
          "type": "string"
        },
        "type": {
          "description": "Output only. Type of the asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "YouTube video asset.",
            "Media bundle asset.",
            "Image asset.",
            "Text asset.",
            "Lead form asset.",
            "Book on Google asset.",
            "Promotion asset.",
            "Callout asset.",
            "Structured Snippet asset.",
            "Sitelink asset.",
            "Page Feed asset.",
            "Dynamic Education asset.",
            "Mobile app asset.",
            "Hotel callout asset.",
            "Call asset.",
            "Price asset.",
            "Call to action asset.",
            "Dynamic real estate asset.",
            "Dynamic custom asset.",
            "Dynamic hotels and rentals asset.",
            "Dynamic flights asset.",
            "Dynamic travel asset.",
            "Dynamic local asset.",
            "Dynamic jobs asset.",
            "Location asset.",
            "Hotel property asset.",
            "Demand Gen Carousel Card asset.",
            "Business message asset.",
            "App deep link asset.",
            "YouTube video list asset."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "YOUTUBE_VIDEO",
            "MEDIA_BUNDLE",
            "IMAGE",
            "TEXT",
            "LEAD_FORM",
            "BOOK_ON_GOOGLE",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "PAGE_FEED",
            "DYNAMIC_EDUCATION",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "CALL_TO_ACTION",
            "DYNAMIC_REAL_ESTATE",
            "DYNAMIC_CUSTOM",
            "DYNAMIC_HOTELS_AND_RENTALS",
            "DYNAMIC_FLIGHTS",
            "DYNAMIC_TRAVEL",
            "DYNAMIC_LOCAL",
            "DYNAMIC_JOBS",
            "LOCATION",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "APP_DEEP_LINK",
            "YOUTUBE_VIDEO_LIST"
          ]
        },
        "finalUrls": {
          "description": "A list of possible final URLs after all cross domain redirects.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalMobileUrls": {
          "description": "A list of possible final mobile URLs after all cross domain redirects.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "trackingUrlTemplate": {
          "description": "URL template for constructing a tracking URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "A list of mappings to be used for substituting URL custom parameter tags in the tracking_url_template, final_urls, and/or final_mobile_urls.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "finalUrlSuffix": {
          "description": "URL template for appending params to landing page URLs served with parallel tracking.",
          "type": "string"
        },
        "source": {
          "description": "Output only. Source of the asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "policySummary": {
          "description": "Output only. Policy information for the asset.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetPolicySummary"
        },
        "fieldTypePolicySummaries": {
          "description": "Output only. Policy information for the asset for each FieldType.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__AssetFieldTypePolicySummary"
          }
        },
        "youtubeVideoAsset": {
          "description": "Immutable. A YouTube video asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__YoutubeVideoAsset"
        },
        "mediaBundleAsset": {
          "description": "Immutable. A media bundle asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__MediaBundleAsset"
        },
        "imageAsset": {
          "description": "Output only. An image asset.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__ImageAsset"
        },
        "textAsset": {
          "description": "Immutable. A text asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__TextAsset"
        },
        "leadFormAsset": {
          "description": "A lead form asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__LeadFormAsset"
        },
        "bookOnGoogleAsset": {
          "description": "A book on google asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__BookOnGoogleAsset"
        },
        "promotionAsset": {
          "description": "A promotion asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__PromotionAsset"
        },
        "calloutAsset": {
          "description": "A callout asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__CalloutAsset"
        },
        "structuredSnippetAsset": {
          "description": "A structured snippet asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__StructuredSnippetAsset"
        },
        "sitelinkAsset": {
          "description": "A sitelink asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__SitelinkAsset"
        },
        "pageFeedAsset": {
          "description": "A page feed asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__PageFeedAsset"
        },
        "dynamicEducationAsset": {
          "description": "A dynamic education asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicEducationAsset"
        },
        "mobileAppAsset": {
          "description": "A mobile app asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileAppAsset"
        },
        "hotelCalloutAsset": {
          "description": "A hotel callout asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelCalloutAsset"
        },
        "callAsset": {
          "description": "A call asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__CallAsset"
        },
        "priceAsset": {
          "description": "A price asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__PriceAsset"
        },
        "callToActionAsset": {
          "description": "Immutable. A call to action asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__CallToActionAsset"
        },
        "dynamicRealEstateAsset": {
          "description": "A dynamic real estate asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicRealEstateAsset"
        },
        "dynamicCustomAsset": {
          "description": "A dynamic custom asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicCustomAsset"
        },
        "dynamicHotelsAndRentalsAsset": {
          "description": "A dynamic hotels and rentals asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicHotelsAndRentalsAsset"
        },
        "dynamicFlightsAsset": {
          "description": "A dynamic flights asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicFlightsAsset"
        },
        "demandGenCarouselCardAsset": {
          "description": "Immutable. A Demand Gen carousel card asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DemandGenCarouselCardAsset"
        },
        "dynamicTravelAsset": {
          "description": "A dynamic travel asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicTravelAsset"
        },
        "dynamicLocalAsset": {
          "description": "A dynamic local asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicLocalAsset"
        },
        "dynamicJobsAsset": {
          "description": "A dynamic jobs asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicJobsAsset"
        },
        "locationAsset": {
          "description": "Output only. A location asset.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LocationAsset"
        },
        "hotelPropertyAsset": {
          "description": "Immutable. A hotel property asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__HotelPropertyAsset"
        },
        "businessMessageAsset": {
          "description": "A business message asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__BusinessMessageAsset"
        },
        "appDeepLinkAsset": {
          "description": "Immutable. An app deep link asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__AppDeepLinkAsset"
        },
        "youtubeVideoListAsset": {
          "description": "Immutable. A YouTube video list asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoListAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetPolicySummary": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetPolicySummary",
      "description": "Contains policy information for an asset.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "Output only. The list of policy findings for this asset.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        },
        "reviewStatus": {
          "description": "Output only. Where in the review process this asset is.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Currently under review.",
            "Primary review complete. Other reviews may be continuing.",
            "The resource has been resubmitted for approval or its policy decision has been appealed.",
            "The resource is eligible and may be serving but could still undergo further review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REVIEW_IN_PROGRESS",
            "REVIEWED",
            "UNDER_APPEAL",
            "ELIGIBLE_MAY_SERVE"
          ]
        },
        "approvalStatus": {
          "description": "Output only. The overall approval status of this asset, calculated based on the status of its individual policy topic entries.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Will not serve.",
            "Serves with restrictions.",
            "Serves without restrictions.",
            "Will not serve in targeted countries, but may serve for users who are searching for information about the targeted countries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISAPPROVED",
            "APPROVED_LIMITED",
            "APPROVED",
            "AREA_OF_INTEREST_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetFieldTypePolicySummary": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetFieldTypePolicySummary",
      "description": "Contains policy information for an asset under AssetFieldType context.",
      "type": "object",
      "properties": {
        "assetFieldType": {
          "description": "Output only. FieldType of this asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "assetSource": {
          "description": "Output only. Source of this asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "policySummaryInfo": {
          "description": "Output only. Policy summary.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetPolicySummary"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YoutubeVideoAsset": {
      "id": "GoogleAdsGoogleadsV21Common__YoutubeVideoAsset",
      "description": "A YouTube asset.",
      "type": "object",
      "properties": {
        "youtubeVideoId": {
          "description": "YouTube video id. This is the 11 character string value used in the YouTube video URL.",
          "type": "string"
        },
        "youtubeVideoTitle": {
          "description": "YouTube video title.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MediaBundleAsset": {
      "id": "GoogleAdsGoogleadsV21Common__MediaBundleAsset",
      "description": "A MediaBundle asset.",
      "type": "object",
      "properties": {
        "data": {
          "description": "Media bundle (ZIP file) asset data. The format of the uploaded ZIP file depends on the ad field where it will be used. For more information on the format, see the documentation of the ad field where you plan on using the MediaBundleAsset. This field is mutate only.",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ImageAsset": {
      "id": "GoogleAdsGoogleadsV21Common__ImageAsset",
      "description": "An Image asset.",
      "type": "object",
      "properties": {
        "data": {
          "description": "The raw bytes data of an image. This field is mutate only.",
          "type": "string",
          "format": "byte"
        },
        "fileSize": {
          "description": "File size of the image asset in bytes.",
          "type": "string",
          "format": "int64"
        },
        "mimeType": {
          "description": "MIME type of the image asset.",
          "type": "string",
          "enumDescriptions": [
            "The mime type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "MIME type of image/jpeg.",
            "MIME type of image/gif.",
            "MIME type of image/png.",
            "MIME type of application/x-shockwave-flash.",
            "MIME type of text/html.",
            "MIME type of application/pdf.",
            "MIME type of application/msword.",
            "MIME type of application/vnd.ms-excel.",
            "MIME type of application/rtf.",
            "MIME type of audio/wav.",
            "MIME type of audio/mp3.",
            "MIME type of application/x-html5-ad-zip."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMAGE_JPEG",
            "IMAGE_GIF",
            "IMAGE_PNG",
            "FLASH",
            "TEXT_HTML",
            "PDF",
            "MSWORD",
            "MSEXCEL",
            "RTF",
            "AUDIO_WAV",
            "AUDIO_MP3",
            "HTML5_AD_ZIP"
          ]
        },
        "fullSize": {
          "description": "Metadata for this image at its original size.",
          "$ref": "GoogleAdsGoogleadsV21Common__ImageDimension"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ImageDimension": {
      "id": "GoogleAdsGoogleadsV21Common__ImageDimension",
      "description": "Metadata for an image at a certain size, either original or resized.",
      "type": "object",
      "properties": {
        "heightPixels": {
          "description": "Height of the image.",
          "type": "string",
          "format": "int64"
        },
        "widthPixels": {
          "description": "Width of the image.",
          "type": "string",
          "format": "int64"
        },
        "url": {
          "description": "A URL that returns the image with this height and width.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TextAsset": {
      "id": "GoogleAdsGoogleadsV21Common__TextAsset",
      "description": "A Text asset.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Text content of the text asset.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LeadFormAsset": {
      "id": "GoogleAdsGoogleadsV21Common__LeadFormAsset",
      "description": "A Lead Form asset.",
      "type": "object",
      "properties": {
        "businessName": {
          "description": "Required. The name of the business being advertised.",
          "type": "string"
        },
        "callToActionType": {
          "description": "Required. Pre-defined display text that encourages user to expand the form.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Learn more.",
            "Get quote.",
            "Apply now.",
            "Sign Up.",
            "Contact us.",
            "Subscribe.",
            "Download.",
            "Book now.",
            "Get offer.",
            "Register.",
            "Get info.",
            "Request a demo.",
            "Join now.",
            "Get started."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEARN_MORE",
            "GET_QUOTE",
            "APPLY_NOW",
            "SIGN_UP",
            "CONTACT_US",
            "SUBSCRIBE",
            "DOWNLOAD",
            "BOOK_NOW",
            "GET_OFFER",
            "REGISTER",
            "GET_INFO",
            "REQUEST_DEMO",
            "JOIN_NOW",
            "GET_STARTED"
          ]
        },
        "callToActionDescription": {
          "description": "Required. Text giving a clear value proposition of what users expect once they expand the form.",
          "type": "string"
        },
        "headline": {
          "description": "Required. Headline of the expanded form to describe what the form is asking for or facilitating.",
          "type": "string"
        },
        "description": {
          "description": "Required. Detailed description of the expanded form to describe what the form is asking for or facilitating.",
          "type": "string"
        },
        "privacyPolicyUrl": {
          "description": "Required. Link to a page describing the policy on how the collected data is handled by the advertiser/business.",
          "type": "string"
        },
        "postSubmitHeadline": {
          "description": "Headline of text shown after form submission that describes how the advertiser will follow up with the user.",
          "type": "string"
        },
        "postSubmitDescription": {
          "description": "Detailed description shown after form submission that describes how the advertiser will follow up with the user.",
          "type": "string"
        },
        "fields": {
          "description": "Ordered list of input fields. This field can be updated by reordering questions, but not by adding or removing questions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LeadFormField"
          }
        },
        "customQuestionFields": {
          "description": "Ordered list of custom question fields. This field is subject to a limit of 5 qualifying questions per form.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LeadFormCustomQuestionField"
          }
        },
        "deliveryMethods": {
          "description": "Configured methods for collected lead data to be delivered to advertiser. Only one method typed as WebhookDelivery can be configured.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LeadFormDeliveryMethod"
          }
        },
        "postSubmitCallToActionType": {
          "description": "Pre-defined display text that encourages user action after the form is submitted.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Visit site.",
            "Download.",
            "Learn more.",
            "Shop now."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VISIT_SITE",
            "DOWNLOAD",
            "LEARN_MORE",
            "SHOP_NOW"
          ]
        },
        "backgroundImageAsset": {
          "description": "Asset resource name of the background image. The image dimensions must be exactly 1200x628.",
          "type": "string"
        },
        "desiredIntent": {
          "description": "Chosen intent for the lead form, for example, more volume or more qualified.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Deliver more leads at a potentially lower quality.",
            "Deliver leads that are more qualified."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LOW_INTENT",
            "HIGH_INTENT"
          ]
        },
        "customDisclosure": {
          "description": "Custom disclosure shown along with Google disclaimer on the lead form. Accessible to allowed customers only.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LeadFormField": {
      "id": "GoogleAdsGoogleadsV21Common__LeadFormField",
      "description": "One input field instance within a form.",
      "type": "object",
      "properties": {
        "inputType": {
          "description": "Describes the input type, which may be a predefined type such as \"full name\" or a pre-vetted question like \"What kind of vehicle do you have?\".",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The user will be asked to fill in their given and family name. This field cannot be set at the same time as GIVEN_NAME or FAMILY_NAME.",
            "The user will be asked to fill in their email address.",
            "The user will be asked to fill in their phone number.",
            "The user will be asked to fill in their zip code.",
            "The user will be asked to fill in their street address.",
            "The user will be asked to fill in their city.",
            "The user will be asked to fill in their region part of the address (for example, state for US, province for Canada).",
            "The user will be asked to fill in their country.",
            "The user will be asked to fill in their work email address.",
            "The user will be asked to fill in their company name.",
            "The user will be asked to fill in their work phone.",
            "The user will be asked to fill in their job title.",
            "The user will be asked to fill in their CPF for Brazil users.",
            "The user will be asked to fill in their DNI for Argentina users.",
            "The user will be asked to fill in their DNI for Peru users.",
            "The user will be asked to fill in their RUT for Chile users.",
            "The user will be asked to fill in their CC for Colombia users.",
            "The user will be asked to fill in their CI for Ecuador users.",
            "The user will be asked to fill in their RFC for Mexico users.",
            "The user will be asked to fill in their first name. This field can not be set at the same time as FULL_NAME.",
            "The user will be asked to fill in their last name. This field can not be set at the same time as FULL_NAME.",
            "Question: \"Which model are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which type of vehicle are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred dealership?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"When do you plan on purchasing a vehicle?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Do you own a vehicle?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What vehicle ownership option are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What type of vehicle condition are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What size is your company?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your annual sales volume?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many years have you been in business?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your job department?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your job role?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 18 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 19 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 20 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 21 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 22 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 23 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 24 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 25 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 26 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 27 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 28 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 29 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 30 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 31 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 32 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 33 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 34 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 35 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 36 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 37 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 38 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 39 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 40 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 41 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 42 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 43 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 44 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 45 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 46 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 47 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 48 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 49 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 50 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 51 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 52 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 53 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 54 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 55 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 56 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 57 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 58 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 59 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 60 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 61 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 62 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 63 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 64 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 65 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which program are you interested in?\" Category: \"Education\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which course are you interested in?\" Category: \"Education\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which product are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which service are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which offer are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which category are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred method of contact?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred location?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is the best time to contact you?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"When are you looking to make a purchase?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many years of work experience do you have?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What industry do you work in?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your highest level of education?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What type of property are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What do you need a realtor's help with?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What neighborhood are you interested in?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What price range are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many bedrooms are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you looking for a fully furnished property?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you looking for properties that allow pets?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is the next product you plan to purchase?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Would you like to sign up for an event?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Where are you interested in shopping?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your favorite brand?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which type of valid commercial license do you have?\" Category: \"Transportation\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Interested in booking an event?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your destination country?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your destination city?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure country?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure city?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure date?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your return date?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many people are you traveling with?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your travel budget?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Where do you want to stay during your travel?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FULL_NAME",
            "EMAIL",
            "PHONE_NUMBER",
            "POSTAL_CODE",
            "STREET_ADDRESS",
            "CITY",
            "REGION",
            "COUNTRY",
            "WORK_EMAIL",
            "COMPANY_NAME",
            "WORK_PHONE",
            "JOB_TITLE",
            "GOVERNMENT_ISSUED_ID_CPF_BR",
            "GOVERNMENT_ISSUED_ID_DNI_AR",
            "GOVERNMENT_ISSUED_ID_DNI_PE",
            "GOVERNMENT_ISSUED_ID_RUT_CL",
            "GOVERNMENT_ISSUED_ID_CC_CO",
            "GOVERNMENT_ISSUED_ID_CI_EC",
            "GOVERNMENT_ISSUED_ID_RFC_MX",
            "FIRST_NAME",
            "LAST_NAME",
            "VEHICLE_MODEL",
            "VEHICLE_TYPE",
            "PREFERRED_DEALERSHIP",
            "VEHICLE_PURCHASE_TIMELINE",
            "VEHICLE_OWNERSHIP",
            "VEHICLE_PAYMENT_TYPE",
            "VEHICLE_CONDITION",
            "COMPANY_SIZE",
            "ANNUAL_SALES",
            "YEARS_IN_BUSINESS",
            "JOB_DEPARTMENT",
            "JOB_ROLE",
            "OVER_18_AGE",
            "OVER_19_AGE",
            "OVER_20_AGE",
            "OVER_21_AGE",
            "OVER_22_AGE",
            "OVER_23_AGE",
            "OVER_24_AGE",
            "OVER_25_AGE",
            "OVER_26_AGE",
            "OVER_27_AGE",
            "OVER_28_AGE",
            "OVER_29_AGE",
            "OVER_30_AGE",
            "OVER_31_AGE",
            "OVER_32_AGE",
            "OVER_33_AGE",
            "OVER_34_AGE",
            "OVER_35_AGE",
            "OVER_36_AGE",
            "OVER_37_AGE",
            "OVER_38_AGE",
            "OVER_39_AGE",
            "OVER_40_AGE",
            "OVER_41_AGE",
            "OVER_42_AGE",
            "OVER_43_AGE",
            "OVER_44_AGE",
            "OVER_45_AGE",
            "OVER_46_AGE",
            "OVER_47_AGE",
            "OVER_48_AGE",
            "OVER_49_AGE",
            "OVER_50_AGE",
            "OVER_51_AGE",
            "OVER_52_AGE",
            "OVER_53_AGE",
            "OVER_54_AGE",
            "OVER_55_AGE",
            "OVER_56_AGE",
            "OVER_57_AGE",
            "OVER_58_AGE",
            "OVER_59_AGE",
            "OVER_60_AGE",
            "OVER_61_AGE",
            "OVER_62_AGE",
            "OVER_63_AGE",
            "OVER_64_AGE",
            "OVER_65_AGE",
            "EDUCATION_PROGRAM",
            "EDUCATION_COURSE",
            "PRODUCT",
            "SERVICE",
            "OFFER",
            "CATEGORY",
            "PREFERRED_CONTACT_METHOD",
            "PREFERRED_LOCATION",
            "PREFERRED_CONTACT_TIME",
            "PURCHASE_TIMELINE",
            "YEARS_OF_EXPERIENCE",
            "JOB_INDUSTRY",
            "LEVEL_OF_EDUCATION",
            "PROPERTY_TYPE",
            "REALTOR_HELP_GOAL",
            "PROPERTY_COMMUNITY",
            "PRICE_RANGE",
            "NUMBER_OF_BEDROOMS",
            "FURNISHED_PROPERTY",
            "PETS_ALLOWED_PROPERTY",
            "NEXT_PLANNED_PURCHASE",
            "EVENT_SIGNUP_INTEREST",
            "PREFERRED_SHOPPING_PLACES",
            "FAVORITE_BRAND",
            "TRANSPORTATION_COMMERCIAL_LICENSE_TYPE",
            "EVENT_BOOKING_INTEREST",
            "DESTINATION_COUNTRY",
            "DESTINATION_CITY",
            "DEPARTURE_COUNTRY",
            "DEPARTURE_CITY",
            "DEPARTURE_DATE",
            "RETURN_DATE",
            "NUMBER_OF_TRAVELERS",
            "TRAVEL_BUDGET",
            "TRAVEL_ACCOMMODATION"
          ]
        },
        "singleChoiceAnswers": {
          "description": "Answer configuration for a single choice question. Can be set only for pre-vetted question fields. Minimum of 2 answers required and maximum of 12 allowed.",
          "$ref": "GoogleAdsGoogleadsV21Common__LeadFormSingleChoiceAnswers"
        },
        "hasLocationAnswer": {
          "description": "Answer configuration for location question. If true, campaign/account level location data (state, city, business name etc) will be rendered on the Lead Form. Starting V13.1, has_location_answer can only be set for \"What is your preferred dealership?\" question, for advertisers with Location Assets setup at campaign/account level.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LeadFormSingleChoiceAnswers": {
      "id": "GoogleAdsGoogleadsV21Common__LeadFormSingleChoiceAnswers",
      "description": "Defines possible answers for a single choice question, usually presented as a single-choice drop-down list.",
      "type": "object",
      "properties": {
        "answers": {
          "description": "List of choices for a single question field. The order of entries defines UI order. Minimum of 2 answers required and maximum of 12 allowed.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LeadFormCustomQuestionField": {
      "id": "GoogleAdsGoogleadsV21Common__LeadFormCustomQuestionField",
      "description": "One custom question input field instance within a form.",
      "type": "object",
      "properties": {
        "customQuestionText": {
          "description": "The exact custom question field text (for example, \"What kind of vehicle do you have?\").",
          "type": "string"
        },
        "singleChoiceAnswers": {
          "description": "Answer configuration for a single choice question. Minimum of 2 answers and maximum of 12 allowed.",
          "$ref": "GoogleAdsGoogleadsV21Common__LeadFormSingleChoiceAnswers"
        },
        "hasLocationAnswer": {
          "description": "Answer configuration for location question. If true, campaign/account level location data (state, city, business name etc) will be rendered on the Lead Form. Starting V13.1, has_location_answer can only be set for \"What is your preferred dealership?\" question, for advertisers with Location Assets setup at campaign/account level.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LeadFormDeliveryMethod": {
      "id": "GoogleAdsGoogleadsV21Common__LeadFormDeliveryMethod",
      "description": "A configuration of how leads are delivered to the advertiser.",
      "type": "object",
      "properties": {
        "webhook": {
          "description": "Webhook method of delivery.",
          "$ref": "GoogleAdsGoogleadsV21Common__WebhookDelivery"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WebhookDelivery": {
      "id": "GoogleAdsGoogleadsV21Common__WebhookDelivery",
      "description": "Google notifies the advertiser of leads by making HTTP calls to an endpoint they specify. The requests contain JSON matching a schema that Google publishes as part of form ads documentation.",
      "type": "object",
      "properties": {
        "advertiserWebhookUrl": {
          "description": "Webhook url specified by advertiser to send the lead.",
          "type": "string"
        },
        "googleSecret": {
          "description": "Anti-spoofing secret set by the advertiser as part of the webhook payload.",
          "type": "string"
        },
        "payloadSchemaVersion": {
          "description": "The schema version that this delivery instance will use.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BookOnGoogleAsset": {
      "id": "GoogleAdsGoogleadsV21Common__BookOnGoogleAsset",
      "description": "A Book on Google asset. Used to redirect user to book through Google. Book on Google will change the redirect url to book directly through Google.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__PromotionAsset": {
      "id": "GoogleAdsGoogleadsV21Common__PromotionAsset",
      "description": "A Promotion asset.",
      "type": "object",
      "properties": {
        "promotionTarget": {
          "description": "Required. A freeform description of what the promotion is targeting.",
          "type": "string"
        },
        "discountModifier": {
          "description": "A modifier for qualification of the discount.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "'Up to'."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UP_TO"
          ]
        },
        "redemptionStartDate": {
          "description": "Start date of when the promotion is eligible to be redeemed, in yyyy-MM-dd format.",
          "type": "string"
        },
        "redemptionEndDate": {
          "description": "Last date of when the promotion is eligible to be redeemed, in yyyy-MM-dd format.",
          "type": "string"
        },
        "occasion": {
          "description": "The occasion the promotion was intended for. If an occasion is set, the redemption window will need to fall within the date range associated with the occasion.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "New Year's.",
            "Chinese New Year.",
            "Valentine's Day.",
            "Easter.",
            "Mother's Day.",
            "Father's Day.",
            "Labor Day.",
            "Back To School.",
            "Halloween.",
            "Black Friday.",
            "Cyber Monday.",
            "Christmas.",
            "Boxing Day.",
            "Independence Day in any country.",
            "National Day in any country.",
            "End of any season.",
            "Winter Sale.",
            "Summer sale.",
            "Fall Sale.",
            "Spring Sale.",
            "Ramadan.",
            "Eid al-Fitr.",
            "Eid al-Adha.",
            "Singles Day.",
            "Women's Day.",
            "Holi.",
            "Parent's Day.",
            "St. Nicholas Day.",
            "Carnival.",
            "Epiphany, also known as Three Kings' Day.",
            "Rosh Hashanah.",
            "Passover.",
            "Hanukkah.",
            "Diwali.",
            "Navratri.",
            "Available in Thai: Songkran.",
            "Available in Japanese: Year-end Gift."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW_YEARS",
            "CHINESE_NEW_YEAR",
            "VALENTINES_DAY",
            "EASTER",
            "MOTHERS_DAY",
            "FATHERS_DAY",
            "LABOR_DAY",
            "BACK_TO_SCHOOL",
            "HALLOWEEN",
            "BLACK_FRIDAY",
            "CYBER_MONDAY",
            "CHRISTMAS",
            "BOXING_DAY",
            "INDEPENDENCE_DAY",
            "NATIONAL_DAY",
            "END_OF_SEASON",
            "WINTER_SALE",
            "SUMMER_SALE",
            "FALL_SALE",
            "SPRING_SALE",
            "RAMADAN",
            "EID_AL_FITR",
            "EID_AL_ADHA",
            "SINGLES_DAY",
            "WOMENS_DAY",
            "HOLI",
            "PARENTS_DAY",
            "ST_NICHOLAS_DAY",
            "CARNIVAL",
            "EPIPHANY",
            "ROSH_HASHANAH",
            "PASSOVER",
            "HANUKKAH",
            "DIWALI",
            "NAVRATRI",
            "SONGKRAN",
            "YEAR_END_GIFT"
          ]
        },
        "languageCode": {
          "description": "The language of the promotion. Represented as BCP 47 language tag.",
          "type": "string"
        },
        "startDate": {
          "description": "Start date of when this asset is effective and can begin serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "endDate": {
          "description": "Last date of when this asset is effective and still serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "adScheduleTargets": {
          "description": "List of non-overlapping schedules specifying all time intervals for which the asset may serve. There can be a maximum of 6 schedules per day, 42 in total.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
          }
        },
        "termsAndConditionsText": {
          "description": "Terms and conditions of the promotion.",
          "type": "string"
        },
        "termsAndConditionsUri": {
          "description": "URI to the terms and conditions of the promotion.",
          "type": "string"
        },
        "percentOff": {
          "description": "Percentage off discount in the promotion. 1,000,000 = 100%. Either this or money_amount_off is required.",
          "type": "string",
          "format": "int64"
        },
        "moneyAmountOff": {
          "description": "Money amount off for discount in the promotion. Either this or percent_off is required.",
          "$ref": "GoogleAdsGoogleadsV21Common__Money"
        },
        "promotionCode": {
          "description": "A code the user should use in order to be eligible for the promotion.",
          "type": "string"
        },
        "ordersOverAmount": {
          "description": "The amount the total order needs to be for the user to be eligible for the promotion.",
          "$ref": "GoogleAdsGoogleadsV21Common__Money"
        },
        "promotionBarcodeInfo": {
          "description": "Barcode info used to generate promotion barcode for user to be eligible for the promotion.",
          "$ref": "GoogleAdsGoogleadsV21Common__PromotionBarcodeInfo"
        },
        "promotionQrCodeInfo": {
          "description": "QR code info used to generate promotion QR code for user to be eligible for the promotion.",
          "$ref": "GoogleAdsGoogleadsV21Common__PromotionQrCodeInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdScheduleInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AdScheduleInfo",
      "description": "Represents an AdSchedule criterion. AdSchedule is specified as the day of the week and a time interval within which ads will be shown. No more than six AdSchedules can be added for the same day.",
      "type": "object",
      "properties": {
        "startMinute": {
          "description": "Minutes after the start hour at which this schedule starts. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Zero minutes past the hour.",
            "Fifteen minutes past the hour.",
            "Thirty minutes past the hour.",
            "Forty-five minutes past the hour."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ZERO",
            "FIFTEEN",
            "THIRTY",
            "FORTY_FIVE"
          ]
        },
        "endMinute": {
          "description": "Minutes after the end hour at which this schedule ends. The schedule is exclusive of the end minute. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Zero minutes past the hour.",
            "Fifteen minutes past the hour.",
            "Thirty minutes past the hour.",
            "Forty-five minutes past the hour."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ZERO",
            "FIFTEEN",
            "THIRTY",
            "FORTY_FIVE"
          ]
        },
        "startHour": {
          "description": "Starting hour in 24 hour time. This field must be between 0 and 23, inclusive. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "integer",
          "format": "int32"
        },
        "endHour": {
          "description": "Ending hour in 24 hour time; 24 signifies end of the day. This field must be between 0 and 24, inclusive. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "integer",
          "format": "int32"
        },
        "dayOfWeek": {
          "description": "Day of the week the schedule applies to. This field is required for CREATE operations and is prohibited on UPDATE operations.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Monday.",
            "Tuesday.",
            "Wednesday.",
            "Thursday.",
            "Friday.",
            "Saturday.",
            "Sunday."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Money": {
      "id": "GoogleAdsGoogleadsV21Common__Money",
      "description": "Represents a price in a particular currency.",
      "type": "object",
      "properties": {
        "currencyCode": {
          "description": "Three-character ISO 4217 currency code.",
          "type": "string"
        },
        "amountMicros": {
          "description": "Amount in micros. One million is equivalent to one unit.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PromotionBarcodeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__PromotionBarcodeInfo",
      "description": "Barcode info to generate promotion barcode.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Barcode type used to generate barcode with the correct format.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Aztec 2D barcode format. Max 350 characters and no links",
            "CODABAR 1D format. Max 12 characters and no links. Supported characters include 0123456789-$:/.+ and optional start and end guards from ABCD.",
            "Code 39 1D format. Max 8 characters and no links. Supported characters include 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%.",
            "Code 128 1D format. Max 18 ASCII characters only and no links",
            "Data Matrix 2D barcode format. Max 525 ISO-8859-1 characters only and no links",
            "EAN-8 1D format. The barcode value should be 7 digits (the check digit will be computed automatically) or 8 digits (if you are providing your own check digit).",
            "EAN-13 1D format. The barcode value should be 12 digits (the check digit will be computed automatically) or 13 digits (if you are providing your own check digit).",
            "ITF (Interleaved Two of Five) 1D format. Must be 14 digits long",
            "PDF417 format. Max 140 characters and no links",
            "UPC-A 1D format. The barcode value should be 11 digits (the check digit will be computed automatically) or 12 digits (if you are providing your own check digit)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AZTEC",
            "CODABAR",
            "CODE39",
            "CODE128",
            "DATA_MATRIX",
            "EAN8",
            "EAN13",
            "ITF",
            "PDF417",
            "UPC_A"
          ]
        },
        "barcodeContent": {
          "description": "Promotion message to be encoded in the barcode.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PromotionQrCodeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__PromotionQrCodeInfo",
      "description": "QR code info to generate promotion QR code.",
      "type": "object",
      "properties": {
        "qrCodeContent": {
          "description": "Promotion message to be encoded in the QR code.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CalloutAsset": {
      "id": "GoogleAdsGoogleadsV21Common__CalloutAsset",
      "description": "A Callout asset.",
      "type": "object",
      "properties": {
        "calloutText": {
          "description": "Required. The callout text. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "startDate": {
          "description": "Start date of when this asset is effective and can begin serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "endDate": {
          "description": "Last date of when this asset is effective and still serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "adScheduleTargets": {
          "description": "List of non-overlapping schedules specifying all time intervals for which the asset may serve. There can be a maximum of 6 schedules per day, 42 in total.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__StructuredSnippetAsset": {
      "id": "GoogleAdsGoogleadsV21Common__StructuredSnippetAsset",
      "description": "A Structured Snippet asset.",
      "type": "object",
      "properties": {
        "header": {
          "description": "Required. The header of the snippet. This string should be one of the predefined values at https://developers.google.com/google-ads/api/reference/data/structured-snippet-headers",
          "type": "string"
        },
        "values": {
          "description": "Required. The values in the snippet. The size of this collection should be between 3 and 10, inclusive. The length of each value should be between 1 and 25 characters, inclusive.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SitelinkAsset": {
      "id": "GoogleAdsGoogleadsV21Common__SitelinkAsset",
      "description": "A Sitelink asset.",
      "type": "object",
      "properties": {
        "linkText": {
          "description": "Required. URL display text for the sitelink. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "description1": {
          "description": "First line of the description for the sitelink. If set, the length should be between 1 and 35, inclusive, and description2 must also be set.",
          "type": "string"
        },
        "description2": {
          "description": "Second line of the description for the sitelink. If set, the length should be between 1 and 35, inclusive, and description1 must also be set.",
          "type": "string"
        },
        "startDate": {
          "description": "Start date of when this asset is effective and can begin serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "endDate": {
          "description": "Last date of when this asset is effective and still serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "adScheduleTargets": {
          "description": "List of non-overlapping schedules specifying all time intervals for which the asset may serve. There can be a maximum of 6 schedules per day, 42 in total.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PageFeedAsset": {
      "id": "GoogleAdsGoogleadsV21Common__PageFeedAsset",
      "description": "A Page Feed asset.",
      "type": "object",
      "properties": {
        "pageUrl": {
          "description": "Required. The webpage that advertisers want to target.",
          "type": "string"
        },
        "labels": {
          "description": "Labels used to group the page urls.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicEducationAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicEducationAsset",
      "description": "A Dynamic Education asset.",
      "type": "object",
      "properties": {
        "programId": {
          "description": "Required. Program ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "locationId": {
          "description": "Location ID which can be any sequence of letters and digits and must be unique.",
          "type": "string"
        },
        "programName": {
          "description": "Required. Program name, for example, Nursing. Required.",
          "type": "string"
        },
        "subject": {
          "description": "Subject of study, for example, Health.",
          "type": "string"
        },
        "programDescription": {
          "description": "Program description, for example, Nursing Certification.",
          "type": "string"
        },
        "schoolName": {
          "description": "School name, for example, Mountain View School of Nursing.",
          "type": "string"
        },
        "address": {
          "description": "School address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Nursing certification, Health, Mountain View.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "similarProgramIds": {
          "description": "Similar program IDs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        },
        "thumbnailImageUrl": {
          "description": "Thumbnail image url, for example, http://www.example.com/thumbnail.png. The thumbnail image will not be uploaded as image asset.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image url, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MobileAppAsset": {
      "id": "GoogleAdsGoogleadsV21Common__MobileAppAsset",
      "description": "An asset representing a mobile app.",
      "type": "object",
      "properties": {
        "appId": {
          "description": "Required. A string that uniquely identifies a mobile application. It should just contain the platform native id, like \"com.android.ebay\" for Android or \"12345689\" for iOS.",
          "type": "string"
        },
        "appStore": {
          "description": "Required. The application store that distributes this specific app.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Mobile app vendor for Apple app store.",
            "Mobile app vendor for Google app store."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLE_APP_STORE",
            "GOOGLE_APP_STORE"
          ]
        },
        "linkText": {
          "description": "Required. The visible text displayed when the link is rendered in an ad. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "startDate": {
          "description": "Start date of when this asset is effective and can begin serving, in yyyy-MM-dd format.",
          "type": "string"
        },
        "endDate": {
          "description": "Last date of when this asset is effective and still serving, in yyyy-MM-dd format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelCalloutAsset": {
      "id": "GoogleAdsGoogleadsV21Common__HotelCalloutAsset",
      "description": "An asset representing a hotel callout.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Required. The text of the hotel callout asset. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "languageCode": {
          "description": "Required. The language of the hotel callout. Represented as BCP 47 language tag.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CallAsset": {
      "id": "GoogleAdsGoogleadsV21Common__CallAsset",
      "description": "A Call asset.",
      "type": "object",
      "properties": {
        "countryCode": {
          "description": "Required. Two-letter country code of the phone number. Examples: 'US', 'us'.",
          "type": "string"
        },
        "phoneNumber": {
          "description": "Required. The advertiser's raw phone number. Examples: '1234567890', '(123)456-7890'",
          "type": "string"
        },
        "callConversionReportingState": {
          "description": "Indicates whether this CallAsset should use its own call conversion setting, follow the account level setting, or disable call conversion.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Call conversion action is disabled.",
            "Call conversion action will use call conversion type set at the account level.",
            "Call conversion action will use call conversion type set at the resource (call only ads/call extensions) level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISABLED",
            "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION",
            "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION"
          ]
        },
        "callConversionAction": {
          "description": "The conversion action to attribute a call conversion to. If not set, the default conversion action is used. This field only has effect if call_conversion_reporting_state is set to USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION.",
          "type": "string"
        },
        "adScheduleTargets": {
          "description": "List of non-overlapping schedules specifying all time intervals for which the asset may serve. There can be a maximum of 6 schedules per day, 42 in total.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PriceAsset": {
      "id": "GoogleAdsGoogleadsV21Common__PriceAsset",
      "description": "An asset representing a list of price offers.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Required. The type of the price asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The type for showing a list of brands.",
            "The type for showing a list of events.",
            "The type for showing locations relevant to your business.",
            "The type for showing sub-regions or districts within a city or region.",
            "The type for showing a collection of product categories.",
            "The type for showing a collection of related product tiers.",
            "The type for showing a collection of services offered by your business.",
            "The type for showing a collection of service categories.",
            "The type for showing a collection of related service tiers."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BRANDS",
            "EVENTS",
            "LOCATIONS",
            "NEIGHBORHOODS",
            "PRODUCT_CATEGORIES",
            "PRODUCT_TIERS",
            "SERVICES",
            "SERVICE_CATEGORIES",
            "SERVICE_TIERS"
          ]
        },
        "priceQualifier": {
          "description": "The price qualifier of the price asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "'From' qualifier for the price.",
            "'Up to' qualifier for the price.",
            "'Average' qualifier for the price."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FROM",
            "UP_TO",
            "AVERAGE"
          ]
        },
        "languageCode": {
          "description": "Required. The language of the price asset. Represented as BCP 47 language tag.",
          "type": "string"
        },
        "priceOfferings": {
          "description": "The price offerings of the price asset. The size of this collection should be between 3 and 8, inclusive.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PriceOffering"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PriceOffering": {
      "id": "GoogleAdsGoogleadsV21Common__PriceOffering",
      "description": "A single price offering within a PriceAsset.",
      "type": "object",
      "properties": {
        "header": {
          "description": "Required. The header of the price offering. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "description": {
          "description": "Required. The description of the price offering. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "price": {
          "description": "Required. The price value of the price offering.",
          "$ref": "GoogleAdsGoogleadsV21Common__Money"
        },
        "unit": {
          "description": "The price unit of the price offering.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Per hour.",
            "Per day.",
            "Per week.",
            "Per month.",
            "Per year.",
            "Per night."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PER_HOUR",
            "PER_DAY",
            "PER_WEEK",
            "PER_MONTH",
            "PER_YEAR",
            "PER_NIGHT"
          ]
        },
        "finalUrl": {
          "description": "Required. The final URL after all cross domain redirects.",
          "type": "string"
        },
        "finalMobileUrl": {
          "description": "The final mobile URL after all cross domain redirects.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CallToActionAsset": {
      "id": "GoogleAdsGoogleadsV21Common__CallToActionAsset",
      "description": "A call to action asset.",
      "type": "object",
      "properties": {
        "callToAction": {
          "description": "Call to action.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The call to action type is learn more.",
            "The call to action type is get quote.",
            "The call to action type is apply now.",
            "The call to action type is sign up.",
            "The call to action type is contact us.",
            "The call to action type is subscribe.",
            "The call to action type is download.",
            "The call to action type is book now.",
            "The call to action type is shop now.",
            "The call to action type is buy now.",
            "The call to action type is donate now.",
            "The call to action type is order now.",
            "The call to action type is play now.",
            "The call to action type is see more.",
            "The call to action type is start now.",
            "The call to action type is visit site.",
            "The call to action type is watch now."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEARN_MORE",
            "GET_QUOTE",
            "APPLY_NOW",
            "SIGN_UP",
            "CONTACT_US",
            "SUBSCRIBE",
            "DOWNLOAD",
            "BOOK_NOW",
            "SHOP_NOW",
            "BUY_NOW",
            "DONATE_NOW",
            "ORDER_NOW",
            "PLAY_NOW",
            "SEE_MORE",
            "START_NOW",
            "VISIT_SITE",
            "WATCH_NOW"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicRealEstateAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicRealEstateAsset",
      "description": "A dynamic real estate asset.",
      "type": "object",
      "properties": {
        "listingId": {
          "description": "Required. Listing ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "listingName": {
          "description": "Required. Listing name, for example, Boulevard Bungalow. Required.",
          "type": "string"
        },
        "cityName": {
          "description": "City name, for example, Mountain View, California.",
          "type": "string"
        },
        "description": {
          "description": "Description, for example, 3 beds, 2 baths, 1568 sq. ft.",
          "type": "string"
        },
        "address": {
          "description": "Address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403",
          "type": "string"
        },
        "price": {
          "description": "Price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 200,000.00 USD.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "propertyType": {
          "description": "Property type, for example, House.",
          "type": "string"
        },
        "listingType": {
          "description": "Listing type, for example, For sale.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, For sale; Houses for sale.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $200,000.00.",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        },
        "similarListingIds": {
          "description": "Similar listing IDs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicCustomAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicCustomAsset",
      "description": "A dynamic custom asset.",
      "type": "object",
      "properties": {
        "id": {
          "description": "Required. ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag, for example, sedan. Required.",
          "type": "string"
        },
        "id2": {
          "description": "ID2 which can be any sequence of letters and digits, for example, red. ID sequence (ID + ID2) must be unique.",
          "type": "string"
        },
        "itemTitle": {
          "description": "Required. Item title, for example, Mid-size sedan. Required.",
          "type": "string"
        },
        "itemSubtitle": {
          "description": "Item subtitle, for example, At your Mountain View dealership.",
          "type": "string"
        },
        "itemDescription": {
          "description": "Item description, for example, Best selling mid-size car.",
          "type": "string"
        },
        "itemAddress": {
          "description": "Item address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403",
          "type": "string"
        },
        "itemCategory": {
          "description": "Item category, for example, Sedans.",
          "type": "string"
        },
        "price": {
          "description": "Price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 20,000.00 USD.",
          "type": "string"
        },
        "salePrice": {
          "description": "Sale price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 15,000.00 USD. Must be less than the 'price' field.",
          "type": "string"
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $20,000.00.",
          "type": "string"
        },
        "formattedSalePrice": {
          "description": "Formatted sale price which can be any characters. If set, this attribute will be used instead of 'sale price', for example, On sale for $15,000.00.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Sedans, 4 door sedans.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        },
        "similarIds": {
          "description": "Similar IDs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicHotelsAndRentalsAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicHotelsAndRentalsAsset",
      "description": "A dynamic hotels and rentals asset.",
      "type": "object",
      "properties": {
        "propertyId": {
          "description": "Required. Property ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "propertyName": {
          "description": "Required. Property name, for example, Mountain View Hotel. Required.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "destinationName": {
          "description": "Destination name, for example, Downtown Mountain View.",
          "type": "string"
        },
        "description": {
          "description": "Description, for example, Close to SJC Airport.",
          "type": "string"
        },
        "price": {
          "description": "Price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.",
          "type": "string"
        },
        "salePrice": {
          "description": "ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD. Must be less than the 'price' field.",
          "type": "string"
        },
        "starRating": {
          "description": "Star rating. Must be a number between 1 to 5, inclusive.",
          "type": "string",
          "format": "int64"
        },
        "category": {
          "description": "Category, for example, Hotel suite.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Mountain View \"Hotels\", South Bay hotels.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "address": {
          "description": "Address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $100.00.",
          "type": "string"
        },
        "formattedSalePrice": {
          "description": "Formatted sale price which can be any characters. If set, this attribute will be used instead of 'sale price', for example, On sale for $80.00.",
          "type": "string"
        },
        "similarPropertyIds": {
          "description": "Similar property IDs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicFlightsAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicFlightsAsset",
      "description": "A dynamic flights asset.",
      "type": "object",
      "properties": {
        "destinationId": {
          "description": "Required. Destination ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "originId": {
          "description": "Origin ID which can be any sequence of letters and digits. The ID sequence (destination ID + origin ID) must be unique.",
          "type": "string"
        },
        "flightDescription": {
          "description": "Required. Flight description, for example, Book your ticket. Required.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "destinationName": {
          "description": "Destination name, for example, Paris.",
          "type": "string"
        },
        "originName": {
          "description": "Origin name, for example, London.",
          "type": "string"
        },
        "flightPrice": {
          "description": "Flight price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.",
          "type": "string"
        },
        "flightSalePrice": {
          "description": "Flight sale price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD. Must be less than the 'flight_price' field.",
          "type": "string"
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $100.00.",
          "type": "string"
        },
        "formattedSalePrice": {
          "description": "Formatted sale price which can be any characters. If set, this attribute will be used instead of 'sale price', for example, On sale for $80.00.",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        },
        "similarDestinationIds": {
          "description": "Similar destination IDs, for example, PAR,LON.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "customMapping": {
          "description": "A custom field which can be multiple key to values mapping separated by delimiters (\",\", \"|\" and \":\"), in the forms of \": , , ... , | : , ... , | ... | : , ... ,\" for example, wifi: most | aircraft: 320, 77W | flights: 42 | legroom: 32\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DemandGenCarouselCardAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DemandGenCarouselCardAsset",
      "description": "A Demand Gen Carousel Card asset.",
      "type": "object",
      "properties": {
        "marketingImageAsset": {
          "description": "Asset resource name of the associated 1.91:1 marketing image. This and/or square marketing image asset is required.",
          "type": "string"
        },
        "squareMarketingImageAsset": {
          "description": "Asset resource name of the associated square marketing image. This and/or a marketing image asset is required.",
          "type": "string"
        },
        "portraitMarketingImageAsset": {
          "description": "Asset resource name of the associated 4:5 portrait marketing image.",
          "type": "string"
        },
        "headline": {
          "description": "Required. Headline of the carousel card.",
          "type": "string"
        },
        "callToActionText": {
          "description": "Call to action text.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicTravelAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicTravelAsset",
      "description": "A dynamic travel asset.",
      "type": "object",
      "properties": {
        "destinationId": {
          "description": "Required. Destination ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "originId": {
          "description": "Origin ID which can be any sequence of letters and digits. The ID sequence (destination ID + origin ID) must be unique.",
          "type": "string"
        },
        "title": {
          "description": "Required. Title, for example, Book your train ticket. Required.",
          "type": "string"
        },
        "destinationName": {
          "description": "Destination name, for example, Paris.",
          "type": "string"
        },
        "destinationAddress": {
          "description": "Destination address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403.",
          "type": "string"
        },
        "originName": {
          "description": "Origin name, for example, London.",
          "type": "string"
        },
        "price": {
          "description": "Price which can be a number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.",
          "type": "string"
        },
        "salePrice": {
          "description": "Sale price which can be a number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD. Must be less than the 'price' field.",
          "type": "string"
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $100.00.",
          "type": "string"
        },
        "formattedSalePrice": {
          "description": "Formatted sale price which can be any characters. If set, this attribute will be used instead of 'sale price', for example, On sale for $80.00.",
          "type": "string"
        },
        "category": {
          "description": "Category, for example, Express.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Paris trains.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "similarDestinationIds": {
          "description": "Similar destination IDs, for example, NYC.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicLocalAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicLocalAsset",
      "description": "A dynamic local asset.",
      "type": "object",
      "properties": {
        "dealId": {
          "description": "Required. Deal ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "dealName": {
          "description": "Required. Deal name, for example, 50% off at Mountain View Grocers. Required.",
          "type": "string"
        },
        "subtitle": {
          "description": "Subtitle, for example, Groceries.",
          "type": "string"
        },
        "description": {
          "description": "Description, for example, Save on your weekly bill.",
          "type": "string"
        },
        "price": {
          "description": "Price which can be a number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.",
          "type": "string"
        },
        "salePrice": {
          "description": "Sale price which can be number followed by the alphabetic currency code, ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD. Must be less than the 'price' field.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "address": {
          "description": "Address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403.",
          "type": "string"
        },
        "category": {
          "description": "Category, for example, Food.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Save groceries coupons.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "formattedPrice": {
          "description": "Formatted price which can be any characters. If set, this attribute will be used instead of 'price', for example, Starting at $100.00.",
          "type": "string"
        },
        "formattedSalePrice": {
          "description": "Formatted sale price which can be any characters. If set, this attribute will be used instead of 'sale price', for example, On sale for $80.00.",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "similarDealIds": {
          "description": "Similar deal IDs, for example, 1275.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicJobsAsset": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicJobsAsset",
      "description": "A dynamic jobs asset.",
      "type": "object",
      "properties": {
        "jobId": {
          "description": "Required. Job ID which can be any sequence of letters and digits, and must be unique and match the values of remarketing tag. Required.",
          "type": "string"
        },
        "locationId": {
          "description": "Location ID which can be any sequence of letters and digits. The ID sequence (job ID + location ID) must be unique.",
          "type": "string"
        },
        "jobTitle": {
          "description": "Required. Job title, for example, Software engineer. Required.",
          "type": "string"
        },
        "jobSubtitle": {
          "description": "Job subtitle, for example, Level II.",
          "type": "string"
        },
        "description": {
          "description": "Description, for example, Apply your technical skills.",
          "type": "string"
        },
        "imageUrl": {
          "description": "Image URL, for example, http://www.example.com/image.png. The image will not be uploaded as image asset.",
          "type": "string"
        },
        "jobCategory": {
          "description": "Job category, for example, Technical.",
          "type": "string"
        },
        "contextualKeywords": {
          "description": "Contextual keywords, for example, Software engineering job.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "address": {
          "description": "Address which can be specified in one of the following formats. (1) City, state, code, country, for example, Mountain View, CA, USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338, 2.17403.",
          "type": "string"
        },
        "salary": {
          "description": "Salary, for example, $100,000.",
          "type": "string"
        },
        "androidAppLink": {
          "description": "Android deep link, for example, android-app://com.example.android/http/example.com/gizmos?1234.",
          "type": "string"
        },
        "similarJobIds": {
          "description": "Similar job IDs, for example, 1275.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "iosAppLink": {
          "description": "iOS deep link, for example, exampleApp://content/page.",
          "type": "string"
        },
        "iosAppStoreId": {
          "description": "iOS app store ID. This is used to check if the user has the app installed on their device before deep linking. If this field is set, then the ios_app_link field must also be present.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocationAsset": {
      "id": "GoogleAdsGoogleadsV21Common__LocationAsset",
      "description": "A location asset.",
      "type": "object",
      "properties": {
        "placeId": {
          "description": "Place IDs uniquely identify a place in the Google Places database and on Google Maps. This field is unique for a given customer ID and asset type. See https://developers.google.com/places/web-service/place-id to learn more about Place ID.",
          "type": "string"
        },
        "businessProfileLocations": {
          "description": "The list of business locations for the customer. This will only be returned if the Location Asset is syncing from the Business Profile account. It is possible to have multiple Business Profile listings under the same account that point to the same Place ID.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__BusinessProfileLocation"
          }
        },
        "locationOwnershipType": {
          "description": "The type of location ownership. If the type is BUSINESS_OWNER, it will be served as a location extension. If the type is AFFILIATE, it will be served as an affiliate location.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Business Owner of location(legacy location extension - LE).",
            "Affiliate location(Third party location extension - ALE)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_OWNER",
            "AFFILIATE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessProfileLocation": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessProfileLocation",
      "description": "Business Profile location data synced from the linked Business Profile account.",
      "type": "object",
      "properties": {
        "labels": {
          "description": "Advertiser specified label for the location on the Business Profile account. This is synced from the Business Profile account.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "storeCode": {
          "description": "Business Profile store code of this location. This is synced from the Business Profile account.",
          "type": "string"
        },
        "listingId": {
          "description": "Listing ID of this Business Profile location. This is synced from the linked Business Profile account.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HotelPropertyAsset": {
      "id": "GoogleAdsGoogleadsV21Common__HotelPropertyAsset",
      "description": "A hotel property asset.",
      "type": "object",
      "properties": {
        "placeId": {
          "description": "Place IDs uniquely identify a place in the Google Places database and on Google Maps. See https://developers.google.com/places/web-service/place-id to learn more.",
          "type": "string"
        },
        "hotelAddress": {
          "description": "Address of the hotel. Read-only.",
          "type": "string"
        },
        "hotelName": {
          "description": "Name of the hotel. Read-only.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessMessageAsset": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessMessageAsset",
      "description": "A business message asset.",
      "type": "object",
      "properties": {
        "messageProvider": {
          "description": "Required. Message provider of the business message asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "WhatsApp message provider"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WHATSAPP"
          ]
        },
        "starterMessage": {
          "description": "Required. A welcome message to prompt the user to initiate a conversation.",
          "type": "string"
        },
        "callToAction": {
          "description": "A call to action for the business message asset.",
          "$ref": "GoogleAdsGoogleadsV21Common__BusinessMessageCallToActionInfo"
        },
        "whatsappInfo": {
          "description": "Whatsapp.",
          "$ref": "GoogleAdsGoogleadsV21Common__WhatsappBusinessMessageInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessMessageCallToActionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessMessageCallToActionInfo",
      "description": "Display information that encourages the user to take action.",
      "type": "object",
      "properties": {
        "callToActionSelection": {
          "description": "Required. Pre-defined call to action text.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Apply now.",
            "Book now.",
            "Contact us.",
            "Get info.",
            "Get offer.",
            "Get quote.",
            "Get started.",
            "Learn more."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLY_NOW",
            "BOOK_NOW",
            "CONTACT_US",
            "GET_INFO",
            "GET_OFFER",
            "GET_QUOTE",
            "GET_STARTED",
            "LEARN_MORE"
          ]
        },
        "callToActionDescription": {
          "description": "Required. Text providing a clear value proposition of what users expect once they take the action. Examples: 'Message us for a quote', 'Ask our expert team'.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WhatsappBusinessMessageInfo": {
      "id": "GoogleAdsGoogleadsV21Common__WhatsappBusinessMessageInfo",
      "description": "Whatsapp information to use for messaging.",
      "type": "object",
      "properties": {
        "countryCode": {
          "description": "Required. Two-letter country code of the phone number. Examples: 'US', 'us'.",
          "type": "string"
        },
        "phoneNumber": {
          "description": "Required. Whatsapp phone number of the business. Examples: '1234567890', '(123)456-7890'.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AppDeepLinkAsset": {
      "id": "GoogleAdsGoogleadsV21Common__AppDeepLinkAsset",
      "description": "An app deep link asset",
      "type": "object",
      "properties": {
        "appDeepLinkUri": {
          "description": "The uri for the app deep link, The uri can be either a custom scheme uri (e.g. mystore://shoes) or universal uri (e.g. http://www.mystore.com/shoes).",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeVideoListAsset": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeVideoListAsset",
      "description": "A YouTube video list asset.",
      "type": "object",
      "properties": {
        "youtubeVideos": {
          "description": "List of videos. Each is a reference to a YouTube video asset. Minimum of 2 videos required and maximum of 5 allowed.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdVideoAsset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetsResponse",
      "description": "Response message for an asset mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetResult",
      "description": "The result for the asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name returned for successful operations.",
          "type": "string"
        },
        "asset": {
          "description": "The mutated asset with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsRequest",
      "description": "Request message for AssetSetAssetService.MutateAssetSetAssets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset set assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetSetAssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetSetAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetSetAssetOperation",
      "description": "A single operation (create, remove) on an asset set asset.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new asset set asset",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSetAsset"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset set asset is expected, in this format: `customers/{customer_id}/assetSetAssets/{asset_set_id}~{asset_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetSetAsset": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetSetAsset",
      "description": "AssetSetAsset is the link between an asset and an asset set. Adding an AssetSetAsset links an asset with an asset set.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the asset set asset. Asset set asset resource names have the form: `customers/{customer_id}/assetSetAssets/{asset_set_id}~{asset_id}`",
          "type": "string"
        },
        "assetSet": {
          "description": "Immutable. The asset set which this asset set asset is linking to.",
          "type": "string"
        },
        "asset": {
          "description": "Immutable. The asset which this asset set asset is linking to.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the asset set asset. Read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The asset set asset is enabled.",
            "The asset set asset is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetsResponse",
      "description": "Response message for an asset set asset mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetResult",
      "description": "The result for the asset set asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "assetSetAsset": {
          "description": "The mutated asset set asset with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSetAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetsRequest",
      "description": "Request message for AssetSetService.MutateAssetSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual asset sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AssetSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AssetSetOperation",
      "description": "A single operation (create, remove) on an asset set.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new asset set",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSet"
        },
        "update": {
          "description": "Update operation: The asset set is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed asset set is expected, in this format: `customers/{customer_id}/assetSets/{asset_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetSet": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetSet",
      "description": "An asset set representing a collection of assets. Use AssetSetAsset to link an asset to the asset set.",
      "type": "object",
      "properties": {
        "id": {
          "description": "Output only. The ID of the asset set.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "resourceName": {
          "description": "Immutable. The resource name of the asset set. Asset set resource names have the form: `customers/{customer_id}/assetSets/{asset_set_id}`",
          "type": "string"
        },
        "name": {
          "description": "Required. Name of the asset set. Required. It must have a minimum length of 1 and maximum length of 128.",
          "type": "string"
        },
        "type": {
          "description": "Required. Immutable. The type of the asset set. Required.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Page asset set.",
            "Dynamic education asset set.",
            "Google Merchant Center asset set.",
            "Dynamic real estate asset set.",
            "Dynamic custom asset set.",
            "Dynamic hotels and rentals asset set.",
            "Dynamic flights asset set.",
            "Dynamic travel asset set.",
            "Dynamic local asset set.",
            "Dynamic jobs asset set.",
            "Location sync level asset set.",
            "Business Profile location group asset set.",
            "Chain location group asset set which can be used for both owned locations and affiliate locations.",
            "Static location group asset set which can be used for both owned locations and affiliate locations.",
            "Hotel Property asset set which is used to link a hotel property feed to Performance Max for travel goals campaigns.",
            "Travel Feed asset set type. Can represent either a Hotel feed or a Things to Do (activities) feed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PAGE_FEED",
            "DYNAMIC_EDUCATION",
            "MERCHANT_CENTER_FEED",
            "DYNAMIC_REAL_ESTATE",
            "DYNAMIC_CUSTOM",
            "DYNAMIC_HOTELS_AND_RENTALS",
            "DYNAMIC_FLIGHTS",
            "DYNAMIC_TRAVEL",
            "DYNAMIC_LOCAL",
            "DYNAMIC_JOBS",
            "LOCATION_SYNC",
            "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP",
            "CHAIN_DYNAMIC_LOCATION_GROUP",
            "STATIC_LOCATION_GROUP",
            "HOTEL_PROPERTY",
            "TRAVEL_FEED"
          ]
        },
        "status": {
          "description": "Output only. The status of the asset set. Read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The asset set is enabled.",
            "The asset set is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "merchantCenterFeed": {
          "description": "Merchant ID and Feed Label from Google Merchant Center.",
          "$ref": "GoogleAdsGoogleadsV21Resources_AssetSet_MerchantCenterFeed"
        },
        "locationGroupParentAssetSetId": {
          "description": "Immutable. Parent asset set id for the asset set where the elements of this asset set come from. For example: the sync level location AssetSet id where the the elements in LocationGroup AssetSet come from. This field is required and only applicable for Location Group typed AssetSet.",
          "type": "string",
          "format": "int64"
        },
        "hotelPropertyData": {
          "description": "Output only. For Performance Max for travel goals campaigns with a Hotel Center account link. Read-only.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AssetSet_HotelPropertyData"
        },
        "locationSet": {
          "description": "Location asset set data. This will be used for sync level location set. This can only be set if AssetSet's type is LOCATION_SYNC.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationSet"
        },
        "businessProfileLocationGroup": {
          "description": "Business Profile location group asset set data.",
          "$ref": "GoogleAdsGoogleadsV21Common__BusinessProfileLocationGroup"
        },
        "chainLocationGroup": {
          "description": "Represents information about a Chain dynamic location group. Only applicable if the sync level AssetSet's type is LOCATION_SYNC and sync source is chain.",
          "$ref": "GoogleAdsGoogleadsV21Common__ChainLocationGroup"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AssetSet_MerchantCenterFeed": {
      "id": "GoogleAdsGoogleadsV21Resources_AssetSet_MerchantCenterFeed",
      "description": "Merchant ID and Feed Label from Google Merchant Center.",
      "type": "object",
      "properties": {
        "merchantId": {
          "description": "Required. Merchant ID from Google Merchant Center",
          "type": "string",
          "format": "int64"
        },
        "feedLabel": {
          "description": "Optional. Feed Label from Google Merchant Center.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AssetSet_HotelPropertyData": {
      "id": "GoogleAdsGoogleadsV21Resources_AssetSet_HotelPropertyData",
      "description": "For Performance Max for travel goals campaigns with a Hotel Center account link. Read-only.",
      "type": "object",
      "properties": {
        "hotelCenterId": {
          "description": "Output only. The hotel center ID of the partner.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "partnerName": {
          "description": "Output only. Name of the hotel partner.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocationSet": {
      "id": "GoogleAdsGoogleadsV21Common__LocationSet",
      "description": "Data related to location set. One of the Google Business Profile (previously known as Google My Business) data, Chain data, and map location data need to be specified.",
      "type": "object",
      "properties": {
        "locationOwnershipType": {
          "description": "Required. Immutable. Location Ownership Type (owned location or affiliate location).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Business Owner of location(legacy location extension - LE).",
            "Affiliate location(Third party location extension - ALE)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_OWNER",
            "AFFILIATE"
          ]
        },
        "businessProfileLocationSet": {
          "description": "Data used to configure a location set populated from Google Business Profile locations.",
          "$ref": "GoogleAdsGoogleadsV21Common__BusinessProfileLocationSet"
        },
        "chainLocationSet": {
          "description": "Data used to configure a location on chain set populated with the specified chains.",
          "$ref": "GoogleAdsGoogleadsV21Common__ChainSet"
        },
        "mapsLocationSet": {
          "description": "Only set if locations are synced based on selected maps locations",
          "$ref": "GoogleAdsGoogleadsV21Common__MapsLocationSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessProfileLocationSet": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessProfileLocationSet",
      "description": "Data used to configure a location set populated from Google Business Profile locations. Different types of filters are AND'ed together, if they are specified.",
      "type": "object",
      "properties": {
        "httpAuthorizationToken": {
          "description": "Required. Immutable. The HTTP authorization token used to obtain authorization.",
          "type": "string"
        },
        "emailAddress": {
          "description": "Required. Immutable. Email address of a Google Business Profile account or email address of a manager of the Google Business Profile account.",
          "type": "string"
        },
        "businessNameFilter": {
          "description": "Used to filter Google Business Profile listings by business name. If businessNameFilter is set, only listings with a matching business name are candidates to be sync'd into Assets.",
          "type": "string"
        },
        "labelFilters": {
          "description": "Used to filter Google Business Profile listings by labels. If entries exist in labelFilters, only listings that have any of the labels set are candidates to be synchronized into Assets. If no entries exist in labelFilters, then all listings are candidates for syncing. Label filters are OR'ed together.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "listingIdFilters": {
          "description": "Used to filter Google Business Profile listings by listing id. If entries exist in listingIdFilters, only listings specified by the filters are candidates to be synchronized into Assets. If no entries exist in listingIdFilters, then all listings are candidates for syncing. Listing ID filters are OR'ed together.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "businessAccountId": {
          "description": "Immutable. The account ID of the managed business whose locations are to be used. If this field is not set, then all businesses accessible by the user (specified by the emailAddress) are used.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ChainSet": {
      "id": "GoogleAdsGoogleadsV21Common__ChainSet",
      "description": "Data used to configure a location set populated with the specified chains.",
      "type": "object",
      "properties": {
        "relationshipType": {
          "description": "Required. Immutable. Relationship type the specified chains have with this advertiser.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Auto dealer relationship.",
            "General retailer relationship."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AUTO_DEALERS",
            "GENERAL_RETAILERS"
          ]
        },
        "chains": {
          "description": "Required. A list of chain level filters, all filters are OR'ed together.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__ChainFilter"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ChainFilter": {
      "id": "GoogleAdsGoogleadsV21Common__ChainFilter",
      "description": "One chain level filter on location in a feed item set. The filtering logic among all the fields is AND.",
      "type": "object",
      "properties": {
        "chainId": {
          "description": "Required. Used to filter chain locations by chain id. Only chain locations that belong to the specified chain will be in the asset set.",
          "type": "string",
          "format": "int64"
        },
        "locationAttributes": {
          "description": "Used to filter chain locations by location attributes. Only chain locations that belong to all of the specified attribute(s) will be in the asset set. If this field is empty, it means no filtering on this field.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MapsLocationSet": {
      "id": "GoogleAdsGoogleadsV21Common__MapsLocationSet",
      "description": "Wrapper for multiple maps location sync data",
      "type": "object",
      "properties": {
        "mapsLocations": {
          "description": "Required. A list of maps location info that user manually synced in.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__MapsLocationInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MapsLocationInfo": {
      "id": "GoogleAdsGoogleadsV21Common__MapsLocationInfo",
      "description": "Wrapper for place ids",
      "type": "object",
      "properties": {
        "placeId": {
          "description": "Place ID of the Maps location.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessProfileLocationGroup": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessProfileLocationGroup",
      "description": "Information about a Business Profile dynamic location group. Only applicable if the sync level AssetSet's type is LOCATION_SYNC and sync source is Business Profile.",
      "type": "object",
      "properties": {
        "dynamicBusinessProfileLocationGroupFilter": {
          "description": "Filter for dynamic Business Profile location sets.",
          "$ref": "GoogleAdsGoogleadsV21Common__DynamicBusinessProfileLocationGroupFilter"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DynamicBusinessProfileLocationGroupFilter": {
      "id": "GoogleAdsGoogleadsV21Common__DynamicBusinessProfileLocationGroupFilter",
      "description": "Represents a filter on Business Profile locations in an asset set. If multiple filters are provided, they are AND'ed together.",
      "type": "object",
      "properties": {
        "labelFilters": {
          "description": "Used to filter Business Profile locations by label. Only locations that have any of the listed labels will be in the asset set. Label filters are OR'ed together.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "businessNameFilter": {
          "description": "Used to filter Business Profile locations by business name.",
          "$ref": "GoogleAdsGoogleadsV21Common__BusinessProfileBusinessNameFilter"
        },
        "listingIdFilters": {
          "description": "Used to filter Business Profile locations by listing ids.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BusinessProfileBusinessNameFilter": {
      "id": "GoogleAdsGoogleadsV21Common__BusinessProfileBusinessNameFilter",
      "description": "Business Profile location group business name filter.",
      "type": "object",
      "properties": {
        "businessName": {
          "description": "Business name string to use for filtering.",
          "type": "string"
        },
        "filterType": {
          "description": "The type of string matching to use when filtering with business_name.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The filter will use exact string matching."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ChainLocationGroup": {
      "id": "GoogleAdsGoogleadsV21Common__ChainLocationGroup",
      "description": "Represents information about a Chain dynamic location group. Only applicable if the sync level AssetSet's type is LOCATION_SYNC and sync source is chain.",
      "type": "object",
      "properties": {
        "dynamicChainLocationGroupFilters": {
          "description": "Used to filter chain locations by chain ids. Only Locations that belong to the specified chain(s) will be in the asset set.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__ChainFilter"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetsResponse",
      "description": "Response message for an asset set mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAssetSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAssetSetResult",
      "description": "The result for the asset set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "assetSet": {
          "description": "The mutated asset set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportRequest",
      "description": "Request message for AudienceInsightsService.GenerateInsightsFinderReport.",
      "type": "object",
      "properties": {
        "baselineAudience": {
          "description": "Required. A baseline audience for this report, typically all people in a region.",
          "$ref": "GoogleAdsGoogleadsV21Services__BasicInsightsAudience"
        },
        "specificAudience": {
          "description": "Required. The specific audience of interest for this report. The insights in the report will be based on attributes more prevalent in this audience than in the report's baseline audience.",
          "$ref": "GoogleAdsGoogleadsV21Services__BasicInsightsAudience"
        },
        "customerInsightsGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BasicInsightsAudience": {
      "id": "GoogleAdsGoogleadsV21Services__BasicInsightsAudience",
      "description": "A description of an audience used for requesting insights.",
      "type": "object",
      "properties": {
        "countryLocation": {
          "description": "Required. The countries for this audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "subCountryLocations": {
          "description": "Sub-country geographic location attributes. If present, each of these must be contained in one of the countries in this audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "gender": {
          "description": "Gender for the audience. If absent, the audience does not restrict by gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "ageRanges": {
          "description": "Age ranges for the audience. If absent, the audience represents all people over 18 that match the other attributes.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
          }
        },
        "userInterests": {
          "description": "User interests defining this audience. Affinity and In-Market audiences are supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
          }
        },
        "topics": {
          "description": "Topics, represented by Knowledge Graph entities and/or Product & Service categories, that this audience is interested in.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsTopic"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsTopic": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsTopic",
      "description": "An entity or category representing a topic that defines an audience.",
      "type": "object",
      "properties": {
        "entity": {
          "description": "A Knowledge Graph entity",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsEntity"
        },
        "category": {
          "description": "A Product & Service category",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsCategory"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsEntity": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsEntity",
      "description": "A Knowledge Graph entity, represented by its machine id.",
      "type": "object",
      "properties": {
        "knowledgeGraphMachineId": {
          "description": "Required. The machine ID (mid) of the Knowledge Graph entity.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsCategory": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsCategory",
      "description": "A Product and Service category.",
      "type": "object",
      "properties": {
        "categoryId": {
          "description": "Required. The criterion ID of the category.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo",
      "description": "Additional information about the application/tool issuing the request. This field is only used by [ContentCreatorInsightsService], [AudienceInsightsService], and [ReachPlanService] APIs.",
      "type": "object",
      "properties": {
        "applicationId": {
          "description": "The unique identifier of the agency proprietary application. This identifier is generated by Google. Reach out to your Google representative to request an application_id for each new application being integrated.",
          "type": "string"
        },
        "applicationInstance": {
          "description": "The instance type of the application sending the request.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The instance is for development and testing purposes.",
            "The instance is for production purposes."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEVELOPMENT_AND_TESTING",
            "PRODUCTION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateInsightsFinderReportResponse",
      "description": "The response message for AudienceInsightsService.GenerateInsightsFinderReport, containing the shareable URL for the report.",
      "type": "object",
      "properties": {
        "savedReportUrl": {
          "description": "An HTTPS URL providing a deep link into the Insights Finder UI with the report inputs filled in according to the request.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesRequest",
      "description": "Request message for AudienceInsightsService.ListAudienceInsightsAttributes.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "Required. The types of attributes to be returned. Supported dimensions are CATEGORY, KNOWLEDGE_GRAPH, DEVICE, GEO_TARGET_COUNTRY, SUB_COUNTRY_LOCATION, YOUTUBE_LINEUP, AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, PARENTAL_STATUS, INCOME_RANGE, AGE_RANGE, and GENDER.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "A Product & Service category.",
              "A Knowledge Graph entity.",
              "A country, represented by a geo target.",
              "A geographic location within a country.",
              "A YouTube channel.",
              "An Affinity UserInterest.",
              "An In-Market UserInterest.",
              "A Parental Status value (parent, or not a parent).",
              "A household income percentile range.",
              "An age range.",
              "A gender.",
              "A YouTube video.",
              "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
              "A YouTube Lineup.",
              "A User List."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CATEGORY",
              "KNOWLEDGE_GRAPH",
              "GEO_TARGET_COUNTRY",
              "SUB_COUNTRY_LOCATION",
              "YOUTUBE_CHANNEL",
              "AFFINITY_USER_INTEREST",
              "IN_MARKET_USER_INTEREST",
              "PARENTAL_STATUS",
              "INCOME_RANGE",
              "AGE_RANGE",
              "GENDER",
              "YOUTUBE_VIDEO",
              "DEVICE",
              "YOUTUBE_LINEUP",
              "USER_LIST"
            ]
          }
        },
        "queryText": {
          "description": "Required. A free text query. If the requested dimensions include Attributes CATEGORY or KNOWLEDGE_GRAPH, then the attributes returned for those dimensions will match or be related to this string. For other dimensions, this field is ignored and all available attributes are returned.",
          "type": "string"
        },
        "customerInsightsGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        },
        "locationCountryFilters": {
          "description": "If SUB_COUNTRY_LOCATION attributes are one of the requested dimensions and this field is present, then the SUB_COUNTRY_LOCATION attributes returned will be located in these countries. If this field is absent, then location attributes are not filtered by country. Setting this field when SUB_COUNTRY_LOCATION attributes are not requested will return an error.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "youtubeReachLocation": {
          "description": "If present, potential YouTube reach estimates within the specified market will be returned for attributes for which they are available. Reach is only available for the AGE_RANGE, GENDER, AFFINITY_USER_INTEREST and IN_MARKET_USER_INTEREST dimensions, and may not be available for every attribute of those dimensions in every market.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListAudienceInsightsAttributesResponse",
      "description": "Response message for AudienceInsightsService.ListAudienceInsightsAttributes.",
      "type": "object",
      "properties": {
        "attributes": {
          "description": "The attributes matching the search query.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata",
      "description": "An audience attribute, with metadata about it, returned in response to a search.",
      "type": "object",
      "properties": {
        "dimension": {
          "description": "The type of the attribute.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "A Product & Service category.",
            "A Knowledge Graph entity.",
            "A country, represented by a geo target.",
            "A geographic location within a country.",
            "A YouTube channel.",
            "An Affinity UserInterest.",
            "An In-Market UserInterest.",
            "A Parental Status value (parent, or not a parent).",
            "A household income percentile range.",
            "An age range.",
            "A gender.",
            "A YouTube video.",
            "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
            "A YouTube Lineup.",
            "A User List."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CATEGORY",
            "KNOWLEDGE_GRAPH",
            "GEO_TARGET_COUNTRY",
            "SUB_COUNTRY_LOCATION",
            "YOUTUBE_CHANNEL",
            "AFFINITY_USER_INTEREST",
            "IN_MARKET_USER_INTEREST",
            "PARENTAL_STATUS",
            "INCOME_RANGE",
            "AGE_RANGE",
            "GENDER",
            "YOUTUBE_VIDEO",
            "DEVICE",
            "YOUTUBE_LINEUP",
            "USER_LIST"
          ]
        },
        "attribute": {
          "description": "The attribute itself.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
        },
        "displayName": {
          "description": "The human-readable name of the attribute.",
          "type": "string"
        },
        "displayInfo": {
          "description": "A string that supplements the display_name to identify the attribute. If the dimension is TOPIC, this is a brief description of the Knowledge Graph entity, such as \"American singer-songwriter\". If the dimension is CATEGORY, this is the complete path to the category in The Product & Service taxonomy, for example \"/Apparel/Clothing/Outerwear\".",
          "type": "string"
        },
        "potentialYoutubeReach": {
          "description": "An estimate of the number of reachable YouTube users matching this attribute in the requested location, or zero if that information is not available for this attribute. This field is not populated in every response.",
          "type": "string",
          "format": "int64"
        },
        "subscriberShare": {
          "description": "The share of subscribers within this attribute, between and including 0 and 1. This field is not populated in every response.",
          "type": "number",
          "format": "double"
        },
        "viewerShare": {
          "description": "The share of viewers within this attribute, between and including 0 and 1. This field is not populated in every response.",
          "type": "number",
          "format": "double"
        },
        "youtubeChannelMetadata": {
          "description": "Special metadata for a YouTube channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelAttributeMetadata"
        },
        "youtubeVideoMetadata": {
          "description": "Special metadata for a YouTube video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoAttributeMetadata"
        },
        "lineupAttributeMetadata": {
          "description": "Special metadata for a YouTube Lineup.",
          "$ref": "GoogleAdsGoogleadsV21Common__LineupAttributeMetadata"
        },
        "locationAttributeMetadata": {
          "description": "Special metadata for a Location.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationAttributeMetadata"
        },
        "userInterestAttributeMetadata": {
          "description": "Special metadata for a User Interest.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestAttributeMetadata"
        },
        "knowledgeGraphAttributeMetadata": {
          "description": "Special metadata for a Knowledge Graph Entity.",
          "$ref": "GoogleAdsGoogleadsV21Common__KnowledgeGraphAttributeMetadata"
        },
        "userListAttributeMetadata": {
          "description": "Special metadata for a User List.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListAttributeMetadata"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute",
      "description": "An audience attribute that can be used to request insights about the audience. Valid inputs for these fields are available from AudienceInsightsService.ListAudienceInsightsAttributes.",
      "type": "object",
      "properties": {
        "ageRange": {
          "description": "An audience attribute defined by an age range.",
          "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
        },
        "gender": {
          "description": "An audience attribute defined by a gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "location": {
          "description": "An audience attribute defined by a geographic location.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "userInterest": {
          "description": "An Affinity or In-Market audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
        },
        "entity": {
          "description": "An audience attribute defined by interest in a topic represented by a Knowledge Graph entity.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsEntity"
        },
        "category": {
          "description": "An audience attribute defined by interest in a Product & Service category.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsCategory"
        },
        "lineup": {
          "description": "A YouTube Lineup.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsLineup"
        },
        "parentalStatus": {
          "description": "A Parental Status value (parent, or not a parent).",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo"
        },
        "incomeRange": {
          "description": "A household income percentile range.",
          "$ref": "GoogleAdsGoogleadsV21Common__IncomeRangeInfo"
        },
        "youtubeChannel": {
          "description": "A YouTube channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "youtubeVideo": {
          "description": "A YouTube video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo"
        },
        "device": {
          "description": "A device type. (Mobile, Desktop, Tablet)",
          "$ref": "GoogleAdsGoogleadsV21Common__DeviceInfo"
        },
        "userList": {
          "description": "A User List.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsLineup": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsLineup",
      "description": "A YouTube Lineup.",
      "type": "object",
      "properties": {
        "lineupId": {
          "description": "Required. The numeric ID of the lineup.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeChannelAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeChannelAttributeMetadata",
      "description": "Metadata associated with a YouTube channel attribute.",
      "type": "object",
      "properties": {
        "subscriberCount": {
          "description": "The approximate number of subscribers to the YouTube channel.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YouTubeVideoAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__YouTubeVideoAttributeMetadata",
      "description": "Metadata for a YouTube video attribute.",
      "type": "object",
      "properties": {
        "thumbnailUrl": {
          "description": "The URL of the video thumbnail, prefixed by \"https://img.youtube.com/\".",
          "type": "string"
        },
        "videoUrl": {
          "description": "The URL of the video, prefixed by \"https://www.youtube.com/\".",
          "type": "string"
        },
        "viewsCount": {
          "description": "The total number of views.",
          "type": "string",
          "format": "int64"
        },
        "likesCount": {
          "description": "The total number of likes.",
          "type": "string",
          "format": "int64"
        },
        "commentsCount": {
          "description": "The total number of comments.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LineupAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__LineupAttributeMetadata",
      "description": "Metadata associated with a Lineup attribute.",
      "type": "object",
      "properties": {
        "inventoryCountry": {
          "description": "The national market associated with the lineup.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "medianMonthlyInventory": {
          "description": "The median number of impressions per month on this lineup.",
          "type": "string",
          "format": "int64"
        },
        "channelCountLowerBound": {
          "description": "The lower end of a range containing the number of channels in the lineup.",
          "type": "string",
          "format": "int64"
        },
        "channelCountUpperBound": {
          "description": "The upper end of a range containing the number of channels in the lineup.",
          "type": "string",
          "format": "int64"
        },
        "sampleChannels": {
          "description": "Examples of channels that are included in the lineup.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common_LineupAttributeMetadata_SampleChannel"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common_LineupAttributeMetadata_SampleChannel": {
      "id": "GoogleAdsGoogleadsV21Common_LineupAttributeMetadata_SampleChannel",
      "description": "A YouTube channel returned as an example of the content in a lineup.",
      "type": "object",
      "properties": {
        "youtubeChannel": {
          "description": "A YouTube channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "displayName": {
          "description": "The name of the sample channel.",
          "type": "string"
        },
        "youtubeChannelMetadata": {
          "description": "Metadata for the sample channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelAttributeMetadata"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocationAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__LocationAttributeMetadata",
      "description": "Metadata associated with a Location attribute.",
      "type": "object",
      "properties": {
        "countryLocation": {
          "description": "The country location that this attribute’s sub country location is located in.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserInterestAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__UserInterestAttributeMetadata",
      "description": "Metadata associated with a User Interest attribute.",
      "type": "object",
      "properties": {
        "userInterestDescription": {
          "description": "English language text description of the user interest category (200 characters max).",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KnowledgeGraphAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__KnowledgeGraphAttributeMetadata",
      "description": "Metadata associated with a Knowledge Graph Entity attribute.",
      "type": "object",
      "properties": {
        "entityCapabilities": {
          "description": "The capabilities of the entity used in ContentCreatorInsightsService.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "An entity that is supported to use as a trending topic in [ContentCreatorInsightsService.GenerateTrendingInsights].",
              "An entity that is supported to use as a creator attribute in [ContentCreatorInsightsService.GenerateCreatorInsights]."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CONTENT_TRENDING_INSIGHTS",
              "CREATOR_ATTRIBUTE"
            ]
          }
        },
        "relatedCategories": {
          "description": "A list of CATEGORY attributes related to this entity.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListAttributeMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__UserListAttributeMetadata",
      "description": "Metadata associated with a User List attribute.",
      "type": "object",
      "properties": {
        "userListType": {
          "description": "The user list type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "UserList represented as a collection of conversion types.",
            "UserList represented as a combination of other user lists/interests.",
            "UserList created in the Google Ad Manager platform.",
            "UserList associated with a rule.",
            "UserList with users similar to users of another UserList.",
            "UserList of first-party CRM data provided by advertiser in the form of emails or other formats.",
            "LookalikeUserlist, composed of users similar to those of a configurable seed (set of UserLists)"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REMARKETING",
            "LOGICAL",
            "EXTERNAL_REMARKETING",
            "RULE_BASED",
            "SIMILAR",
            "CRM_BASED",
            "LOOKALIKE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesRequest",
      "description": "Request message for AudienceInsightsService.ListInsightsEligibleDates.",
      "type": "object",
      "properties": {
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListInsightsEligibleDatesResponse",
      "description": "Response message for AudienceInsightsService.ListInsightsEligibleDates.",
      "type": "object",
      "properties": {
        "dataMonths": {
          "description": "The months for which AudienceInsights data is currently available, each represented as a string in the form \"YYYY-MM\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lastThirtyDays": {
          "description": "The actual dates covered by the \"last 30 days\" date range that will be used implicitly for AudienceInsightsService.GenerateAudienceCompositionInsights requests that have no data_month set.",
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DateRange": {
      "id": "GoogleAdsGoogleadsV21Common__DateRange",
      "description": "A date range.",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "The start date, in yyyy-mm-dd format. This date is inclusive.",
          "type": "string"
        },
        "endDate": {
          "description": "The end date, in yyyy-mm-dd format. This date is inclusive.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsRequest",
      "description": "Request message for AudienceInsightsService.GenerateAudienceCompositionInsights.",
      "type": "object",
      "properties": {
        "audience": {
          "description": "Required. The audience of interest for which insights are being requested.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudience"
        },
        "baselineAudience": {
          "description": "The baseline audience to which the audience of interest is being compared.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudience"
        },
        "dataMonth": {
          "description": "The one-month range of historical data to use for insights, in the format \"yyyy-mm\". If unset, insights will be returned for the last thirty days of data.",
          "type": "string"
        },
        "dimensions": {
          "description": "Required. The audience dimensions for which composition insights should be returned. Supported dimensions are KNOWLEDGE_GRAPH, GEO_TARGET_COUNTRY, SUB_COUNTRY_LOCATION, YOUTUBE_CHANNEL, YOUTUBE_LINEUP, AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, PARENTAL_STATUS, INCOME_RANGE, AGE_RANGE, and GENDER.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "A Product & Service category.",
              "A Knowledge Graph entity.",
              "A country, represented by a geo target.",
              "A geographic location within a country.",
              "A YouTube channel.",
              "An Affinity UserInterest.",
              "An In-Market UserInterest.",
              "A Parental Status value (parent, or not a parent).",
              "A household income percentile range.",
              "An age range.",
              "A gender.",
              "A YouTube video.",
              "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
              "A YouTube Lineup.",
              "A User List."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CATEGORY",
              "KNOWLEDGE_GRAPH",
              "GEO_TARGET_COUNTRY",
              "SUB_COUNTRY_LOCATION",
              "YOUTUBE_CHANNEL",
              "AFFINITY_USER_INTEREST",
              "IN_MARKET_USER_INTEREST",
              "PARENTAL_STATUS",
              "INCOME_RANGE",
              "AGE_RANGE",
              "GENDER",
              "YOUTUBE_VIDEO",
              "DEVICE",
              "YOUTUBE_LINEUP",
              "USER_LIST"
            ]
          }
        },
        "customerInsightsGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__InsightsAudience": {
      "id": "GoogleAdsGoogleadsV21Services__InsightsAudience",
      "description": "A set of users, defined by various characteristics, for which insights can be requested in AudienceInsightsService.",
      "type": "object",
      "properties": {
        "countryLocations": {
          "description": "Required. The countries for the audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "subCountryLocations": {
          "description": "Sub-country geographic location attributes. If present, each of these must be contained in one of the countries in this audience. If absent, the audience is geographically to the country_locations and no further.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "gender": {
          "description": "Gender for the audience. If absent, the audience does not restrict by gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "ageRanges": {
          "description": "Age ranges for the audience. If absent, the audience represents all people over 18 that match the other attributes.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
          }
        },
        "parentalStatus": {
          "description": "Parental status for the audience. If absent, the audience does not restrict by parental status.",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo"
        },
        "incomeRanges": {
          "description": "Household income percentile ranges for the audience. If absent, the audience does not restrict by household income range.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__IncomeRangeInfo"
          }
        },
        "lineups": {
          "description": "Lineups representing the YouTube content viewed by the audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsLineup"
          }
        },
        "userList": {
          "description": "User list to be targeted by the audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
        },
        "topicAudienceCombinations": {
          "description": "A combination of entity, category and user interest attributes defining the audience. The combination has a logical AND-of-ORs structure: Attributes within each InsightsAudienceAttributeGroup are combined with OR, and the combinations themselves are combined together with AND. For example, the expression (Entity OR Affinity) AND (In-Market OR Category) can be formed using two InsightsAudienceAttributeGroups with two Attributes each.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudienceAttributeGroup"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__InsightsAudienceAttributeGroup": {
      "id": "GoogleAdsGoogleadsV21Services__InsightsAudienceAttributeGroup",
      "description": "A list of AudienceInsightsAttributes.",
      "type": "object",
      "properties": {
        "attributes": {
          "description": "Required. A collection of audience attributes to be combined with logical OR. Attributes need not all be the same dimension. Only Knowledge Graph entities, Product & Service Categories, and Affinity and In-Market audiences are supported in this context.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAudienceCompositionInsightsResponse",
      "description": "Response message for AudienceInsightsService.GenerateAudienceCompositionInsights.",
      "type": "object",
      "properties": {
        "sections": {
          "description": "The contents of the insights report, organized into sections. Each section is associated with one of the AudienceInsightsDimension values in the request. There may be more than one section per dimension.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionSection"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceCompositionSection": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceCompositionSection",
      "description": "A collection of related attributes of the same type in an audience composition insights report.",
      "type": "object",
      "properties": {
        "dimension": {
          "description": "The type of the attributes in this section.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "A Product & Service category.",
            "A Knowledge Graph entity.",
            "A country, represented by a geo target.",
            "A geographic location within a country.",
            "A YouTube channel.",
            "An Affinity UserInterest.",
            "An In-Market UserInterest.",
            "A Parental Status value (parent, or not a parent).",
            "A household income percentile range.",
            "An age range.",
            "A gender.",
            "A YouTube video.",
            "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
            "A YouTube Lineup.",
            "A User List."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CATEGORY",
            "KNOWLEDGE_GRAPH",
            "GEO_TARGET_COUNTRY",
            "SUB_COUNTRY_LOCATION",
            "YOUTUBE_CHANNEL",
            "AFFINITY_USER_INTEREST",
            "IN_MARKET_USER_INTEREST",
            "PARENTAL_STATUS",
            "INCOME_RANGE",
            "AGE_RANGE",
            "GENDER",
            "YOUTUBE_VIDEO",
            "DEVICE",
            "YOUTUBE_LINEUP",
            "USER_LIST"
          ]
        },
        "topAttributes": {
          "description": "The most relevant segments for this audience. If dimension is GENDER, AGE_RANGE or PARENTAL_STATUS, then this list of attributes is exhaustive.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionAttribute"
          }
        },
        "clusteredAttributes": {
          "description": "Additional attributes for this audience, grouped into clusters. Only populated if dimension is YOUTUBE_CHANNEL.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionAttributeCluster"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceCompositionAttribute": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceCompositionAttribute",
      "description": "An audience attribute with metadata and metrics.",
      "type": "object",
      "properties": {
        "attributeMetadata": {
          "description": "The attribute with its metadata.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
        },
        "metrics": {
          "description": "Share and index metrics for the attribute.",
          "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionMetrics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceCompositionMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceCompositionMetrics",
      "description": "The share and index metrics associated with an attribute in an audience composition insights report.",
      "type": "object",
      "properties": {
        "baselineAudienceShare": {
          "description": "The fraction (from 0 to 1 inclusive) of the baseline audience that match the attribute.",
          "type": "number",
          "format": "double"
        },
        "audienceShare": {
          "description": "The fraction (from 0 to 1 inclusive) of the specific audience that match the attribute.",
          "type": "number",
          "format": "double"
        },
        "index": {
          "description": "The ratio of audience_share to baseline_audience_share, or zero if this ratio is undefined or is not meaningful.",
          "type": "number",
          "format": "double"
        },
        "score": {
          "description": "A relevance score from 0 to 1 inclusive.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceCompositionAttributeCluster": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceCompositionAttributeCluster",
      "description": "A collection of related attributes, with metadata and metrics, in an audience composition insights report.",
      "type": "object",
      "properties": {
        "clusterDisplayName": {
          "description": "The name of this cluster of attributes",
          "type": "string"
        },
        "clusterMetrics": {
          "description": "If the dimension associated with this cluster is YOUTUBE_CHANNEL, then cluster_metrics are metrics associated with the cluster as a whole. For other dimensions, this field is unset.",
          "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionMetrics"
        },
        "attributes": {
          "description": "The individual attributes that make up this cluster, with metadata and metrics.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceCompositionAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsRequest",
      "description": "Request message for AudienceInsightsService.GenerateSuggestedTargetingInsights.",
      "type": "object",
      "properties": {
        "customerInsightsGroup": {
          "description": "Optional. The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        },
        "audienceDefinition": {
          "description": "Provide a seed audience to get suggestions for.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudienceDefinition"
        },
        "audienceDescription": {
          "description": "Provide a text description of an audience to get AI-generated targeting suggestions. This can take around 5 or more seconds to complete.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudienceDescription"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__InsightsAudienceDefinition": {
      "id": "GoogleAdsGoogleadsV21Services__InsightsAudienceDefinition",
      "description": "A structured definition of the audience of interest for which insights are being requested in AudienceInsightsService.",
      "type": "object",
      "properties": {
        "audience": {
          "description": "Required. The audience of interest for which insights are being requested.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudience"
        },
        "baselineAudience": {
          "description": "Optional. The baseline audience. The default, if unspecified, is all people in the same country as the audience of interest.",
          "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudience"
        },
        "dataMonth": {
          "description": "Optional. The one-month range of historical data to use for insights, in the format \"yyyy-mm\". If unset, insights will be returned for the last thirty days of data.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__InsightsAudienceDescription": {
      "id": "GoogleAdsGoogleadsV21Services__InsightsAudienceDescription",
      "description": "A text description of the audience of interest for which insights are being requested in AudienceInsightsService.",
      "type": "object",
      "properties": {
        "countryLocations": {
          "description": "Required. The countries for the audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "audienceDescription": {
          "description": "Required. An English language text description of an audience to get suggestions for. Maximum length is 2000 characters. For example, \"Women in their 30s who love to travel\".",
          "type": "string"
        },
        "marketingObjective": {
          "description": "Optional. An optional marketing objective which will influence the type of suggestions produced. AWARENESS will provide affinity audience segments, while CONSIDERATION will provide in-market audience segments. Leaving it unset will provide both.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The objective is to increase awareness of a brand or product among relevant audiences.",
            "The objective is to encourage potential customers to consider your brand or products when they're researching or shopping for product."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AWARENESS",
            "CONSIDERATION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateSuggestedTargetingInsightsResponse",
      "description": "Response message for AudienceInsightsService.GenerateSuggestedTargetingInsights.",
      "type": "object",
      "properties": {
        "suggestions": {
          "description": "Suggested insights for targetable audiences.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__TargetingSuggestionMetrics"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__TargetingSuggestionMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__TargetingSuggestionMetrics",
      "description": "A suggested targetable audience relevant to the requested audience.",
      "type": "object",
      "properties": {
        "locations": {
          "description": "Suggested location targeting. These attributes all have dimension GEO_TARGET_COUNTRY or SUB_COUNTRY_LOCATION",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        },
        "ageRanges": {
          "description": "Suggested age targeting; may be empty indicating no age targeting.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
          }
        },
        "gender": {
          "description": "Suggested gender targeting. If present, this attribute has dimension GENDER.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "parentalStatus": {
          "description": "A Parental Status value (parent, or not a parent).",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo"
        },
        "userInterests": {
          "description": "List of user interest attributes with metadata defining the audience. The combination has a logical AND-of-ORs structure: The attributes within each AudienceInsightsAttributeMetadataGroup are ORed, and the groups themselves are ANDed.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadataGroup"
          }
        },
        "coverage": {
          "description": "The fraction (from 0 to 1 inclusive) of the requested audience that can be reached using the suggested targeting.",
          "type": "number",
          "format": "double"
        },
        "index": {
          "description": "The ratio of coverage to the coverage of the baseline audience or zero if this ratio is undefined or is not meaningful.",
          "type": "number",
          "format": "double"
        },
        "potentialYoutubeReach": {
          "description": "The approximate estimated number of people that can be reached on YouTube using this targeting.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadataGroup": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadataGroup",
      "description": "A group of audience attributes with metadata, returned in response to a search.",
      "type": "object",
      "properties": {
        "attributes": {
          "description": "Attributes with metadata returned in response to a search.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsRequest",
      "description": "Request message for AudienceInsightsService.GenerateAudienceOverlapInsights.",
      "type": "object",
      "properties": {
        "countryLocation": {
          "description": "Required. The country in which to calculate the sizes and overlaps of audiences.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "primaryAttribute": {
          "description": "Required. The audience attribute that should be intersected with all other eligible audiences. This must be an Affinity or In-Market UserInterest, an AgeRange or a Gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
        },
        "dimensions": {
          "description": "Required. The types of attributes of which to calculate the overlap with the primary_attribute. The values must be a subset of AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, AGE_RANGE and GENDER.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "A Product & Service category.",
              "A Knowledge Graph entity.",
              "A country, represented by a geo target.",
              "A geographic location within a country.",
              "A YouTube channel.",
              "An Affinity UserInterest.",
              "An In-Market UserInterest.",
              "A Parental Status value (parent, or not a parent).",
              "A household income percentile range.",
              "An age range.",
              "A gender.",
              "A YouTube video.",
              "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
              "A YouTube Lineup.",
              "A User List."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CATEGORY",
              "KNOWLEDGE_GRAPH",
              "GEO_TARGET_COUNTRY",
              "SUB_COUNTRY_LOCATION",
              "YOUTUBE_CHANNEL",
              "AFFINITY_USER_INTEREST",
              "IN_MARKET_USER_INTEREST",
              "PARENTAL_STATUS",
              "INCOME_RANGE",
              "AGE_RANGE",
              "GENDER",
              "YOUTUBE_VIDEO",
              "DEVICE",
              "YOUTUBE_LINEUP",
              "USER_LIST"
            ]
          }
        },
        "customerInsightsGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAudienceOverlapInsightsResponse",
      "description": "Response message for AudienceInsightsService.GenerateAudienceOverlapInsights.",
      "type": "object",
      "properties": {
        "primaryAttributeMetadata": {
          "description": "Metadata for the primary attribute, including potential YouTube reach.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
        },
        "dimensionResults": {
          "description": "Lists of attributes and their overlap with the primary attribute, one list per requested dimension.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__DimensionOverlapResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__DimensionOverlapResult": {
      "id": "GoogleAdsGoogleadsV21Services__DimensionOverlapResult",
      "description": "A list of audience attributes of a single dimension, including their overlap with a primary attribute, returned as part of a GenerateAudienceOverlapInsightsResponse.",
      "type": "object",
      "properties": {
        "dimension": {
          "description": "The dimension of all the attributes in this section.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "A Product & Service category.",
            "A Knowledge Graph entity.",
            "A country, represented by a geo target.",
            "A geographic location within a country.",
            "A YouTube channel.",
            "An Affinity UserInterest.",
            "An In-Market UserInterest.",
            "A Parental Status value (parent, or not a parent).",
            "A household income percentile range.",
            "An age range.",
            "A gender.",
            "A YouTube video.",
            "A device type, such as Mobile, Desktop, Tablet, and Connected TV.",
            "A YouTube Lineup.",
            "A User List."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CATEGORY",
            "KNOWLEDGE_GRAPH",
            "GEO_TARGET_COUNTRY",
            "SUB_COUNTRY_LOCATION",
            "YOUTUBE_CHANNEL",
            "AFFINITY_USER_INTEREST",
            "IN_MARKET_USER_INTEREST",
            "PARENTAL_STATUS",
            "INCOME_RANGE",
            "AGE_RANGE",
            "GENDER",
            "YOUTUBE_VIDEO",
            "DEVICE",
            "YOUTUBE_LINEUP",
            "USER_LIST"
          ]
        },
        "items": {
          "description": "The attributes and their overlap with the primary attribute.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceOverlapItem"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceOverlapItem": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceOverlapItem",
      "description": "An audience attribute, with metadata including the overlap between this attribute's potential YouTube reach and that of a primary attribute.",
      "type": "object",
      "properties": {
        "attributeMetadata": {
          "description": "The attribute and its metadata, including potential YouTube reach.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
        },
        "potentialYoutubeReachIntersection": {
          "description": "The estimated size of the intersection of this audience attribute with the primary attribute, that is, the number of reachable YouTube users who match BOTH the primary attribute and this one.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsRequest",
      "description": "Request message for AudienceInsightsService.GenerateTargetingSuggestionMetrics.",
      "type": "object",
      "properties": {
        "audiences": {
          "description": "Required. Audiences to request metrics for.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__InsightsAudience"
          }
        },
        "customerInsightsGroup": {
          "description": "Optional. The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateTargetingSuggestionMetricsResponse",
      "description": "Response message for AudienceInsightsService.GenerateTargetingSuggestionMetrics.",
      "type": "object",
      "properties": {
        "suggestions": {
          "description": "Suggested targetable audiences. There will be one suggestion for each [GenerateTargetingSuggestionMetricsRequest.audiences] requested, matching the order requested.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__TargetingSuggestionMetrics"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAudiencesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAudiencesRequest",
      "description": "Request message for AudienceService.MutateAudiences.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual audiences.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AudienceOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceOperation": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceOperation",
      "description": "A single operation (create, update) on an audience.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new audience",
          "$ref": "GoogleAdsGoogleadsV21Resources__Audience"
        },
        "update": {
          "description": "Update operation: The audience is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Audience"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Audience": {
      "id": "GoogleAdsGoogleadsV21Resources__Audience",
      "description": "Audience is an effective targeting option that lets you intersect different segment attributes, such as detailed demographics and affinities, to create audiences that represent sections of your target segments.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the audience. Audience names have the form: `customers/{customer_id}/audiences/{audience_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of the audience.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. Status of this audience. Indicates whether the audience is enabled or removed.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Enabled status - audience is enabled and can be targeted.",
            "Removed status - audience is removed and cannot be used for targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "name": {
          "description": "Name of the audience. It should be unique across all audiences within the account. It must have a minimum length of 1 and maximum length of 255. Required when scope is not set or is set to CUSTOMER. Cannot be set or updated when scope is ASSET_GROUP.",
          "type": "string"
        },
        "description": {
          "description": "Description of this audience.",
          "type": "string"
        },
        "dimensions": {
          "description": "Positive dimensions specifying the audience composition.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceDimension"
          }
        },
        "exclusionDimension": {
          "description": "Negative dimension specifying the audience composition.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceExclusionDimension"
        },
        "scope": {
          "description": "Defines the scope this audience can be used in. By default, the scope is CUSTOMER. Audiences can be created with a scope of ASSET_GROUP for exclusive use by a single asset_group. Scope may change from ASSET_GROUP to CUSTOMER but not from CUSTOMER to ASSET_GROUP.",
          "type": "string",
          "enumDescriptions": [
            "The scope has not been specified.",
            "The received value is not known in this version.",
            "The audience is scoped at the customer level.",
            "The audience is scoped under a specific AssetGroup."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "ASSET_GROUP"
          ]
        },
        "assetGroup": {
          "description": "Immutable. The asset group that this audience is scoped under. Must be set if and only if scope is ASSET_GROUP. Immutable after creation. If an audience with ASSET_GROUP scope is upgraded to CUSTOMER scope, this field will automatically be cleared.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceDimension": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceDimension",
      "description": "Positive dimension specifying user's audience.",
      "type": "object",
      "properties": {
        "age": {
          "description": "Dimension specifying users by their age.",
          "$ref": "GoogleAdsGoogleadsV21Common__AgeDimension"
        },
        "gender": {
          "description": "Dimension specifying users by their gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderDimension"
        },
        "householdIncome": {
          "description": "Dimension specifying users by their household income.",
          "$ref": "GoogleAdsGoogleadsV21Common__HouseholdIncomeDimension"
        },
        "parentalStatus": {
          "description": "Dimension specifying users by their parental status.",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusDimension"
        },
        "audienceSegments": {
          "description": "Dimension specifying users by their membership in other audience segments.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceSegmentDimension"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AgeDimension": {
      "id": "GoogleAdsGoogleadsV21Common__AgeDimension",
      "description": "Dimension specifying users by their age.",
      "type": "object",
      "properties": {
        "ageRanges": {
          "description": "Contiguous age range to be included in the dimension.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AgeSegment"
          }
        },
        "includeUndetermined": {
          "description": "Include users whose age is not determined.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AgeSegment": {
      "id": "GoogleAdsGoogleadsV21Common__AgeSegment",
      "description": "Contiguous age range.",
      "type": "object",
      "properties": {
        "minAge": {
          "description": "Minimum age to include. A minimum age must be specified and must be at least 18. Allowed values are 18, 25, 35, 45, 55, and 65.",
          "type": "integer",
          "format": "int32"
        },
        "maxAge": {
          "description": "Maximum age to include. A maximum age need not be specified. If specified, max_age must be greater than min_age, and allowed values are 24, 34, 44, 54, and 64.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__GenderDimension": {
      "id": "GoogleAdsGoogleadsV21Common__GenderDimension",
      "description": "Dimension specifying users by their gender.",
      "type": "object",
      "properties": {
        "genders": {
          "description": "Included gender demographic segments.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Male.",
              "Female.",
              "Undetermined gender."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "MALE",
              "FEMALE",
              "UNDETERMINED"
            ]
          }
        },
        "includeUndetermined": {
          "description": "Include users whose gender is not determined.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HouseholdIncomeDimension": {
      "id": "GoogleAdsGoogleadsV21Common__HouseholdIncomeDimension",
      "description": "Dimension specifying users by their household income.",
      "type": "object",
      "properties": {
        "incomeRanges": {
          "description": "Included household income demographic segments.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "0%-50%.",
              "50% to 60%.",
              "60% to 70%.",
              "70% to 80%.",
              "80% to 90%.",
              "Greater than 90%.",
              "Undetermined income range."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "INCOME_RANGE_0_50",
              "INCOME_RANGE_50_60",
              "INCOME_RANGE_60_70",
              "INCOME_RANGE_70_80",
              "INCOME_RANGE_80_90",
              "INCOME_RANGE_90_UP",
              "INCOME_RANGE_UNDETERMINED"
            ]
          }
        },
        "includeUndetermined": {
          "description": "Include users whose household income is not determined.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ParentalStatusDimension": {
      "id": "GoogleAdsGoogleadsV21Common__ParentalStatusDimension",
      "description": "Dimension specifying users by their parental status.",
      "type": "object",
      "properties": {
        "parentalStatuses": {
          "description": "Included parental status demographic segments.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Parent.",
              "Not a parent.",
              "Undetermined parental status."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "PARENT",
              "NOT_A_PARENT",
              "UNDETERMINED"
            ]
          }
        },
        "includeUndetermined": {
          "description": "Include users whose parental status is undetermined.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceSegmentDimension": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceSegmentDimension",
      "description": "Dimension specifying users by their membership in other audience segments.",
      "type": "object",
      "properties": {
        "segments": {
          "description": "Included audience segments. Users are included if they belong to at least one segment.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceSegment"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceSegment": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceSegment",
      "description": "Positive audience segment.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "User list segment.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListSegment"
        },
        "userInterest": {
          "description": "Affinity or In-market segment.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestSegment"
        },
        "lifeEvent": {
          "description": "Live-event audience segment.",
          "$ref": "GoogleAdsGoogleadsV21Common__LifeEventSegment"
        },
        "detailedDemographic": {
          "description": "Detailed demographic segment.",
          "$ref": "GoogleAdsGoogleadsV21Common__DetailedDemographicSegment"
        },
        "customAudience": {
          "description": "Custom audience segment.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomAudienceSegment"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListSegment": {
      "id": "GoogleAdsGoogleadsV21Common__UserListSegment",
      "description": "User list segment.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "The user list resource.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserInterestSegment": {
      "id": "GoogleAdsGoogleadsV21Common__UserInterestSegment",
      "description": "User interest segment.",
      "type": "object",
      "properties": {
        "userInterestCategory": {
          "description": "The user interest resource.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LifeEventSegment": {
      "id": "GoogleAdsGoogleadsV21Common__LifeEventSegment",
      "description": "Live event segment.",
      "type": "object",
      "properties": {
        "lifeEvent": {
          "description": "The life event resource.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__DetailedDemographicSegment": {
      "id": "GoogleAdsGoogleadsV21Common__DetailedDemographicSegment",
      "description": "Detailed demographic segment.",
      "type": "object",
      "properties": {
        "detailedDemographic": {
          "description": "The detailed demographic resource.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomAudienceSegment": {
      "id": "GoogleAdsGoogleadsV21Common__CustomAudienceSegment",
      "description": "Custom audience segment.",
      "type": "object",
      "properties": {
        "customAudience": {
          "description": "The custom audience resource.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AudienceExclusionDimension": {
      "id": "GoogleAdsGoogleadsV21Common__AudienceExclusionDimension",
      "description": "Negative dimension specifying users to exclude from the audience.",
      "type": "object",
      "properties": {
        "exclusions": {
          "description": "Audience segment to be excluded.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__ExclusionSegment"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ExclusionSegment": {
      "id": "GoogleAdsGoogleadsV21Common__ExclusionSegment",
      "description": "An audience segment to be excluded from an audience.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "User list segment to be excluded.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListSegment"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAudiencesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAudiencesResponse",
      "description": "Response message for an audience mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateAudienceResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateAudienceResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateAudienceResult",
      "description": "The result for the audience mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "audience": {
          "description": "The mutated Audience with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Audience"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetRequest",
      "description": "Request message for AutomaticallyCreatedAssetRemovalService.RemoveCampaignAutomaticallyCreatedAsset.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetOperation"
          }
        },
        "partialFailure": {
          "description": "Required. If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetOperation",
      "description": "A single operation to remove an automatically created asset from a campaign.",
      "type": "object",
      "properties": {
        "campaign": {
          "description": "Required. The resource name of the campaign.",
          "type": "string"
        },
        "asset": {
          "description": "Required. The resource name of the asset to remove.",
          "type": "string"
        },
        "fieldType": {
          "description": "Required. The field type of the asset to remove.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetResponse": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveCampaignAutomaticallyCreatedAssetResponse",
      "description": "Response message for AutomaticallyCreatedAssetRemovalService.RemoveCampaignAutomaticallyCreatedAsset.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to AutomaticallyCreatedAssetRemoval failures in the partial failure mode. Returned when all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), RPC level error will be returned. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsRequest",
      "description": "Request message for BiddingDataExclusionService.MutateBiddingDataExclusions.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual data exclusions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BiddingDataExclusionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BiddingDataExclusionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__BiddingDataExclusionOperation",
      "description": "A single operation (create, remove, update) on a data exclusion.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new data exclusion.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion"
        },
        "update": {
          "description": "Update operation: The data exclusion is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed data exclusion is expected, in this format: `customers/{customer_id}/biddingDataExclusions/{data_exclusion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion": {
      "id": "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion",
      "description": "Represents a bidding data exclusion. Bidding data exclusions can be set in client accounts only, and cannot be used in manager accounts. See \"About data exclusions\" at https://support.google.com/google-ads/answer/10370710.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the data exclusion. Data exclusion resource names have the form: `customers/{customer_id}/biddingDataExclusions/{data_exclusion_id}`",
          "type": "string"
        },
        "dataExclusionId": {
          "description": "Output only. The ID of the data exclusion.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "scope": {
          "description": "The scope of the data exclusion.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The seasonality event is applied to all the customer's traffic for supported advertising channel types and device types. The CUSTOMER scope cannot be used in mutates.",
            "The seasonality event is applied to all specified campaigns.",
            "The seasonality event is applied to all campaigns that belong to specified channel types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "CAMPAIGN",
            "CHANNEL"
          ]
        },
        "status": {
          "description": "Output only. The status of the data exclusion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The seasonality event is enabled.",
            "The seasonality event is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "startDateTime": {
          "description": "Required. The inclusive start time of the data exclusion in yyyy-MM-dd HH:mm:ss format. A data exclusion is backward looking and should be used for events that start in the past and end either in the past or future.",
          "type": "string"
        },
        "endDateTime": {
          "description": "Required. The exclusive end time of the data exclusion in yyyy-MM-dd HH:mm:ss format. The length of [start_date_time, end_date_time) interval must be within (0, 14 days].",
          "type": "string"
        },
        "name": {
          "description": "The name of the data exclusion. The name can be at most 255 characters.",
          "type": "string"
        },
        "description": {
          "description": "The description of the data exclusion. The description can be at most 2048 characters.",
          "type": "string"
        },
        "devices": {
          "description": "If not specified, all devices will be included in this exclusion. Otherwise, only the specified targeted devices will be included in this exclusion.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "Mobile devices with full browsers.",
              "Tablets with full browsers.",
              "Computers.",
              "Smart TVs and game consoles.",
              "Other device types."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "MOBILE",
              "TABLET",
              "DESKTOP",
              "CONNECTED_TV",
              "OTHER"
            ]
          }
        },
        "campaigns": {
          "description": "The data exclusion will apply to the campaigns listed when the scope of this exclusion is CAMPAIGN. The maximum number of campaigns per event is 2000. Note: a data exclusion with both advertising_channel_types and campaign_ids is not supported.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "advertisingChannelTypes": {
          "description": "The data_exclusion will apply to all the campaigns under the listed channels retroactively as well as going forward when the scope of this exclusion is CHANNEL. The supported advertising channel types are DISPLAY, SEARCH and SHOPPING. Note: a data exclusion with both advertising_channel_types and campaign_ids is not supported.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Search Network. Includes display bundled, and Search+ campaigns.",
              "Google Display Network only.",
              "Shopping campaigns serve on the shopping property and on google.com search results.",
              "Hotel Ads campaigns.",
              "Video campaigns.",
              "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
              "Local ads campaigns.",
              "Smart campaigns.",
              "Performance Max campaigns.",
              "Local services campaigns.",
              "Travel campaigns.",
              "Demand Gen campaigns."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "SEARCH",
              "DISPLAY",
              "SHOPPING",
              "HOTEL",
              "VIDEO",
              "MULTI_CHANNEL",
              "LOCAL",
              "SMART",
              "PERFORMANCE_MAX",
              "LOCAL_SERVICES",
              "TRAVEL",
              "DEMAND_GEN"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResponse",
      "description": "Response message for data exclusions mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResult",
      "description": "The result for the data exclusion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "biddingDataExclusion": {
          "description": "The mutated bidding data exclusion with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsRequest",
      "description": "Request message for BiddingSeasonalityAdjustmentService.MutateBiddingSeasonalityAdjustments.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual seasonality adjustments.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BiddingSeasonalityAdjustmentOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BiddingSeasonalityAdjustmentOperation": {
      "id": "GoogleAdsGoogleadsV21Services__BiddingSeasonalityAdjustmentOperation",
      "description": "A single operation (create, remove, update) on a seasonality adjustment.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new seasonality adjustment.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment"
        },
        "update": {
          "description": "Update operation: The seasonality adjustment is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed seasonality adjustment is expected, in this format: `customers/{customer_id}/biddingSeasonalityAdjustments/{seasonality_adjustment_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment": {
      "id": "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment",
      "description": "Represents a bidding seasonality adjustment. Cannot be used in manager accounts. See \"About seasonality adjustments\" at https://support.google.com/google-ads/answer/10369906.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the seasonality adjustment. Seasonality adjustment resource names have the form: `customers/{customer_id}/biddingSeasonalityAdjustments/{seasonality_adjustment_id}`",
          "type": "string"
        },
        "seasonalityAdjustmentId": {
          "description": "Output only. The ID of the seasonality adjustment.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "scope": {
          "description": "The scope of the seasonality adjustment.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The seasonality event is applied to all the customer's traffic for supported advertising channel types and device types. The CUSTOMER scope cannot be used in mutates.",
            "The seasonality event is applied to all specified campaigns.",
            "The seasonality event is applied to all campaigns that belong to specified channel types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "CAMPAIGN",
            "CHANNEL"
          ]
        },
        "status": {
          "description": "Output only. The status of the seasonality adjustment.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The seasonality event is enabled.",
            "The seasonality event is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "startDateTime": {
          "description": "Required. The inclusive start time of the seasonality adjustment in yyyy-MM-dd HH:mm:ss format. A seasonality adjustment is forward looking and should be used for events that start and end in the future.",
          "type": "string"
        },
        "endDateTime": {
          "description": "Required. The exclusive end time of the seasonality adjustment in yyyy-MM-dd HH:mm:ss format. The length of [start_date_time, end_date_time) interval must be within (0, 14 days].",
          "type": "string"
        },
        "name": {
          "description": "The name of the seasonality adjustment. The name can be at most 255 characters.",
          "type": "string"
        },
        "description": {
          "description": "The description of the seasonality adjustment. The description can be at most 2048 characters.",
          "type": "string"
        },
        "devices": {
          "description": "If not specified, all devices will be included in this adjustment. Otherwise, only the specified targeted devices will be included in this adjustment.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "Mobile devices with full browsers.",
              "Tablets with full browsers.",
              "Computers.",
              "Smart TVs and game consoles.",
              "Other device types."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "MOBILE",
              "TABLET",
              "DESKTOP",
              "CONNECTED_TV",
              "OTHER"
            ]
          }
        },
        "conversionRateModifier": {
          "description": "Conversion rate modifier estimated based on expected conversion rate changes. When this field is unset or set to 1.0 no adjustment will be applied to traffic. The allowed range is 0.1 to 10.0.",
          "type": "number",
          "format": "double"
        },
        "campaigns": {
          "description": "The seasonality adjustment will apply to the campaigns listed when the scope of this adjustment is CAMPAIGN. The maximum number of campaigns per event is 2000. Note: a seasonality adjustment with both advertising_channel_types and campaign_ids is not supported.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "advertisingChannelTypes": {
          "description": "The seasonality adjustment will apply to all the campaigns under the listed channels retroactively as well as going forward when the scope of this adjustment is CHANNEL. The supported advertising channel types are DISPLAY, SEARCH and SHOPPING. Note: a seasonality adjustment with both advertising_channel_types and campaign_ids is not supported.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Search Network. Includes display bundled, and Search+ campaigns.",
              "Google Display Network only.",
              "Shopping campaigns serve on the shopping property and on google.com search results.",
              "Hotel Ads campaigns.",
              "Video campaigns.",
              "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
              "Local ads campaigns.",
              "Smart campaigns.",
              "Performance Max campaigns.",
              "Local services campaigns.",
              "Travel campaigns.",
              "Demand Gen campaigns."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "SEARCH",
              "DISPLAY",
              "SHOPPING",
              "HOTEL",
              "VIDEO",
              "MULTI_CHANNEL",
              "LOCAL",
              "SMART",
              "PERFORMANCE_MAX",
              "LOCAL_SERVICES",
              "TRAVEL",
              "DEMAND_GEN"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResponse",
      "description": "Response message for seasonality adjustments mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResult",
      "description": "The result for the seasonality adjustment mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "biddingSeasonalityAdjustment": {
          "description": "The mutated bidding seasonality adjustment with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesRequest",
      "description": "Request message for BiddingStrategyService.MutateBiddingStrategies.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual bidding strategies.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BiddingStrategyOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BiddingStrategyOperation": {
      "id": "GoogleAdsGoogleadsV21Services__BiddingStrategyOperation",
      "description": "A single operation (create, update, remove) on a bidding strategy.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new bidding strategy.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingStrategy"
        },
        "update": {
          "description": "Update operation: The bidding strategy is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingStrategy"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed bidding strategy is expected, in this format: `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Resources__BiddingStrategy",
      "description": "A bidding strategy.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the bidding strategy. Bidding strategy resource names have the form: `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the bidding strategy.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the bidding strategy. All bidding strategies within an account must be named distinctly. The length of this string should be between 1 and 255, inclusive, in UTF-8 bytes, (trimmed).",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the bidding strategy. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The bidding strategy is enabled.",
            "The bidding strategy is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "type": {
          "description": "Output only. The type of the bidding strategy. Create a bidding strategy by setting the bidding scheme. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
            "Enhanced CPC is a bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely.",
            "Fixed CPM is a manual bidding strategy with a fixed CPM.",
            "Used for return value only. Indicates that a campaign does not have a bidding strategy. This prevents the campaign from serving. For example, a campaign may be attached to a manager bidding strategy and the serving account is subsequently unlinked from the manager account. In this case the campaign will automatically be detached from the now inaccessible manager bidding strategy and transition to the INVALID bidding strategy type.",
            "Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action.",
            "Manual click based bidding where user pays per click.",
            "Manual impression based bidding where user pays per thousand impressions.",
            "A bidding strategy that pays a configurable amount per video view.",
            "A bidding strategy that automatically maximizes number of conversions given a daily budget.",
            "An automated bidding strategy that automatically sets bids to maximize revenue while spending your budget.",
            "Page-One Promoted bidding scheme, which sets max cpc bids to target impressions on page one or page one promoted slots on google.com. This enum value is deprecated.",
            "Percent Cpc is bidding strategy where bids are a fraction of the advertised price for some good or service.",
            "Target CPA is an automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
            "Target CPM is an automated bid strategy that sets bids to help get as many impressions as possible at the target cost per one thousand impressions (CPM) you set.",
            "Target CPV is an automated bidding strategy that sets bids to optimize performance given the average target cost per view.",
            "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
            "Target Outrank Share is an automated bidding strategy that sets bids based on the target fraction of auctions where the advertiser should outrank a specific competitor. This enum value is deprecated.",
            "Target ROAS is an automated bidding strategy that helps you maximize revenue while averaging a specific target Return On Average Spend (ROAS).",
            "Target Spend is an automated bid strategy that sets your bids to help get as many clicks as possible within your budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "COMMISSION",
            "ENHANCED_CPC",
            "FIXED_CPM",
            "INVALID",
            "MANUAL_CPA",
            "MANUAL_CPC",
            "MANUAL_CPM",
            "MANUAL_CPV",
            "MAXIMIZE_CONVERSIONS",
            "MAXIMIZE_CONVERSION_VALUE",
            "PAGE_ONE_PROMOTED",
            "PERCENT_CPC",
            "TARGET_CPA",
            "TARGET_CPM",
            "TARGET_CPV",
            "TARGET_IMPRESSION_SHARE",
            "TARGET_OUTRANK_SHARE",
            "TARGET_ROAS",
            "TARGET_SPEND"
          ]
        },
        "currencyCode": {
          "description": "Immutable. The currency used by the bidding strategy (ISO 4217 three-letter code). For bidding strategies in manager customers, this currency can be set on creation and defaults to the manager customer's currency. For serving customers, this field cannot be set; all strategies in a serving customer implicitly use the serving customer's currency. In all cases the effective_currency_code field returns the currency used by the strategy.",
          "type": "string"
        },
        "effectiveCurrencyCode": {
          "description": "Output only. The currency used by the bidding strategy (ISO 4217 three-letter code). For bidding strategies in manager customers, this is the currency set by the advertiser when creating the strategy. For serving customers, this is the customer's currency_code. Bidding strategy metrics are reported in this currency. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "alignedCampaignBudgetId": {
          "description": "ID of the campaign budget that this portfolio bidding strategy is aligned with. When a portfolio and a campaign budget are aligned, that means that they are attached to the same set of campaigns. After a bidding strategy is aligned with a campaign budget, campaigns that are added to the bidding strategy must also use the aligned campaign budget.",
          "type": "string",
          "format": "int64"
        },
        "campaignCount": {
          "description": "Output only. The number of campaigns attached to this bidding strategy. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "nonRemovedCampaignCount": {
          "description": "Output only. The number of non-removed campaigns attached to this bidding strategy. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "enhancedCpc": {
          "description": "A bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely.",
          "$ref": "GoogleAdsGoogleadsV21Common__EnhancedCpc"
        },
        "maximizeConversionValue": {
          "description": "An automated bidding strategy to help get the most conversion value for your campaigns while spending your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__MaximizeConversionValue"
        },
        "maximizeConversions": {
          "description": "An automated bidding strategy to help get the most conversions for your campaigns while spending your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__MaximizeConversions"
        },
        "targetCpa": {
          "description": "A bidding strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpa"
        },
        "targetImpressionShare": {
          "description": "A bidding strategy that automatically optimizes towards a chosen percentage of impressions.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetImpressionShare"
        },
        "targetRoas": {
          "description": "A bidding strategy that helps you maximize revenue while averaging a specific target Return On Ad Spend (ROAS).",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRoas"
        },
        "targetSpend": {
          "description": "A bid strategy that sets your bids to help get as many clicks as possible within your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetSpend"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__EnhancedCpc": {
      "id": "GoogleAdsGoogleadsV21Common__EnhancedCpc",
      "description": "An automated bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely. This bidding strategy is deprecated and cannot be created anymore. Use ManualCpc with enhanced_cpc_enabled set to true for equivalent functionality.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__MaximizeConversionValue": {
      "id": "GoogleAdsGoogleadsV21Common__MaximizeConversionValue",
      "description": "An automated bidding strategy to help get the most conversion value for your campaigns while spending your budget.",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "The target return on ad spend (ROAS) option. If set, the bid strategy will maximize revenue while averaging the target return on ad spend. If the target ROAS is high, the bid strategy may not be able to spend the full budget. If the target ROAS is not set, the bid strategy will aim to achieve the highest possible ROAS for the budget.",
          "type": "number",
          "format": "double"
        },
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. Mutable for portfolio bidding strategies only.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidFloorMicros": {
          "description": "Minimum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. Mutable for portfolio bidding strategies only.",
          "type": "string",
          "format": "int64"
        },
        "targetRoasTolerancePercentMillis": {
          "description": "The percent of ROAS(return on advertising spend) degradation tolerance allowed to increase traffic diversity and conversion volume, specified in millis (for example, 10,000 = 10%). A value of 10,000 means that the advertiser can expect ROAS degradation of up to 10% of the specified target ROAS.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MaximizeConversions": {
      "id": "GoogleAdsGoogleadsV21Common__MaximizeConversions",
      "description": "An automated bidding strategy to help get the most conversions for your campaigns while spending your budget.",
      "type": "object",
      "properties": {
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. Mutable for portfolio bidding strategies only.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidFloorMicros": {
          "description": "Minimum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. Mutable for portfolio bidding strategies only.",
          "type": "string",
          "format": "int64"
        },
        "targetCpaMicros": {
          "description": "The target cost-per-action (CPA) option. This is the average amount that you would like to spend per conversion action specified in micro units of the bidding strategy's currency. If set, the bid strategy will get as many conversions as possible at or below the target cost-per-action. If the target CPA is not set, the bid strategy will aim to achieve the lowest possible CPA given the budget.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpa": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpa",
      "description": "An automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
      "type": "object",
      "properties": {
        "targetCpaMicros": {
          "description": "Average CPA target. This target should be greater than or equal to minimum billable unit based on the currency for the account.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. This should only be set for portfolio bid strategies.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidFloorMicros": {
          "description": "Minimum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. This should only be set for portfolio bid strategies.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetImpressionShare": {
      "id": "GoogleAdsGoogleadsV21Common__TargetImpressionShare",
      "description": "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
      "type": "object",
      "properties": {
        "location": {
          "description": "The targeted location on the search results page.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Any location on the web page.",
            "Top box of ads.",
            "Top slot in the top box of ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ANYWHERE_ON_PAGE",
            "TOP_OF_PAGE",
            "ABSOLUTE_TOP_OF_PAGE"
          ]
        },
        "locationFractionMicros": {
          "description": "The chosen fraction of ads to be shown in the targeted location in micros. For example, 1% equals 10,000.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidCeilingMicros": {
          "description": "The highest CPC bid the automated bidding system is permitted to specify. This is a required field entered by the advertiser that sets the ceiling and specified in local micros.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetRoas": {
      "id": "GoogleAdsGoogleadsV21Common__TargetRoas",
      "description": "An automated bidding strategy that helps you maximize revenue while averaging a specific target return on ad spend (ROAS).",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "Required. The chosen revenue (based on conversion data) per unit of spend. Value must be between 0.01 and 1000.0, inclusive.",
          "type": "number",
          "format": "double"
        },
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. This should only be set for portfolio bid strategies.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidFloorMicros": {
          "description": "Minimum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy. This should only be set for portfolio bid strategies.",
          "type": "string",
          "format": "int64"
        },
        "targetRoasTolerancePercentMillis": {
          "description": "The percent of ROAS(return on advertising spend) degradation tolerance allowed to increase traffic diversity and conversion volume, specified in millis (for example, 10,000 = 10%). A value of 10,000 means that the advertiser can expect ROAS degradation of up to 10% of the specified target ROAS. This field is only mutable for portfolio bidding strategies.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetSpend": {
      "id": "GoogleAdsGoogleadsV21Common__TargetSpend",
      "description": "An automated bid strategy that sets your bids to help get as many clicks as possible within your budget.",
      "type": "object",
      "properties": {
        "targetSpendMicros": {
          "description": "Deprecated: The spend target under which to maximize clicks. A TargetSpend bidder will attempt to spend the smaller of this value or the natural throttling spend amount. If not specified, the budget is used as the spend target. This field is deprecated and should no longer be used. See https://ads-developers.googleblog.com/2020/05/reminder-about-sunset-creation-of.html for details.",
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategiesResponse",
      "description": "Response message for bidding strategy mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategyResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBiddingStrategyResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategyResult",
      "description": "The result for the bidding strategy mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "biddingStrategy": {
          "description": "The mutated bidding strategy with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingStrategy"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsRequest",
      "description": "Request message for CampaignAssetService.MutateCampaignAssets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignAssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignAssetOperation",
      "description": "A single operation (create, update, remove) on a campaign asset.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign asset.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAsset"
        },
        "update": {
          "description": "Update operation: The campaign asset is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAsset"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign asset is expected, in this format: `customers/{customer_id}/campaignAssets/{campaign_id}~{asset_id}~{field_type}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignAsset": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignAsset",
      "description": "A link between a Campaign and an Asset.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign asset. CampaignAsset resource names have the form: `customers/{customer_id}/campaignAssets/{campaign_id}~{asset_id}~{field_type}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which the asset is linked.",
          "type": "string"
        },
        "asset": {
          "description": "Immutable. The asset which is linked to the campaign.",
          "type": "string"
        },
        "fieldType": {
          "description": "Immutable. Role that the asset takes under the linked campaign. Required.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "source": {
          "description": "Output only. Source of the campaign asset link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "status": {
          "description": "Status of the campaign asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Asset link is enabled.",
            "Asset link has been removed.",
            "Asset link is paused."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "primaryStatus": {
          "description": "Output only. Provides the PrimaryStatus of this asset link. Primary status is meant essentially to differentiate between the plain \"status\" field, which has advertiser set values of enabled, paused, or removed. The primary status takes into account other signals (for assets its mainly policy and quality approvals) to come up with a more comprehensive status to indicate its serving state.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is eligible to serve.",
            "The user-specified asset link status is paused.",
            "The user-specified asset link status is removed.",
            "The asset may serve in the future.",
            "The asset is serving in a partial capacity.",
            "The asset is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusDetails": {
          "description": "Output only. Provides the details of the primary status and its associated reasons.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails"
          }
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides a list of reasons for why an asset is not serving or not serving at full capacity.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is paused for its linked rollup level. Contributes to a PrimaryStatus of PAUSED.",
              "The asset is removed for its linked rollup level. Contributes to a PrimaryStatus of REMOVED.",
              "The asset has been marked as disapproved. Contributes to a PrimaryStatus of NOT_ELIGIBLE",
              "The asset has not completed policy review. Contributes to a PrimaryStatus of PENDING.",
              "The asset is approved with policies applied. Contributes to a PrimaryStatus of LIMITED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "ASSET_LINK_PAUSED",
              "ASSET_LINK_REMOVED",
              "ASSET_DISAPPROVED",
              "ASSET_UNDER_REVIEW",
              "ASSET_APPROVED_LABELED"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetsResponse",
      "description": "Response message for a campaign asset mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetResult",
      "description": "The result for the campaign asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignAsset": {
          "description": "The mutated campaign asset with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsRequest",
      "description": "Request message for CampaignAssetSetService.MutateCampaignAssetSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign asset sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignAssetSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignAssetSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignAssetSetOperation",
      "description": "A single operation (create, remove) on a campaign asset set.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign asset set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAssetSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign asset set is expected, in this format: `customers/{customer_id}/campaignAssetSets/{campaign_id}~{asset_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignAssetSet": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignAssetSet",
      "description": "CampaignAssetSet is the linkage between a campaign and an asset set. Adding a CampaignAssetSet links an asset set with a campaign.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign asset set. Asset set asset resource names have the form: `customers/{customer_id}/campaignAssetSets/{campaign_id}~{asset_set_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which this asset set is linked.",
          "type": "string"
        },
        "assetSet": {
          "description": "Immutable. The asset set which is linked to the campaign.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the campaign asset set asset. Read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The linkage between asset set and its container is enabled.",
            "The linkage between asset set and its container is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetsResponse",
      "description": "Response message for a campaign asset set mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetResult",
      "description": "The result for the campaign asset set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignAssetSet": {
          "description": "The mutated campaign asset set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAssetSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersRequest",
      "description": "Request message for CampaignBidModifierService.MutateCampaignBidModifiers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign bid modifiers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignBidModifierOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignBidModifierOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignBidModifierOperation",
      "description": "A single operation (create, remove, update) on a campaign bid modifier.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign bid modifier.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBidModifier"
        },
        "update": {
          "description": "Update operation: The campaign bid modifier is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBidModifier"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign bid modifier is expected, in this format: `customers/{customer_id}/CampaignBidModifiers/{campaign_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignBidModifier": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignBidModifier",
      "description": "Represents a bid-modifiable only criterion at the campaign level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign bid modifier. Campaign bid modifier resource names have the form: `customers/{customer_id}/campaignBidModifiers/{campaign_id}~{criterion_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign to which this criterion belongs.",
          "readOnly": true,
          "type": "string"
        },
        "criterionId": {
          "description": "Output only. The ID of the criterion to bid modify. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "bidModifier": {
          "description": "The modifier for the bid when the criterion matches.",
          "type": "number",
          "format": "double"
        },
        "interactionType": {
          "description": "Immutable. Criterion for interaction type. Only supported for search campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__InteractionTypeInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__InteractionTypeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__InteractionTypeInfo",
      "description": "Criterion for Interaction Type.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The interaction type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Calls."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CALLS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifiersResponse",
      "description": "Response message for campaign bid modifiers mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifierResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifierResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifierResult",
      "description": "The result for the criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignBidModifier": {
          "description": "The mutated campaign bid modifier with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBidModifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsRequest",
      "description": "Request message for CampaignBudgetService.MutateCampaignBudgets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign budgets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignBudgetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignBudgetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignBudgetOperation",
      "description": "A single operation (create, update, remove) on a campaign budget.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new budget.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBudget"
        },
        "update": {
          "description": "Update operation: The campaign budget is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBudget"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed budget is expected, in this format: `customers/{customer_id}/campaignBudgets/{budget_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignBudget": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignBudget",
      "description": "A campaign budget.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign budget. Campaign budget resource names have the form: `customers/{customer_id}/campaignBudgets/{campaign_budget_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the campaign budget. A campaign budget is created using the CampaignBudgetService create operation and is assigned a budget ID. A budget ID can be shared across different campaigns; the system will then allocate the campaign budget among different campaigns to get optimum results.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the campaign budget. When creating a campaign budget through CampaignBudgetService, every explicitly shared campaign budget must have a non-null, non-empty name. Campaign budgets that are not explicitly shared derive their name from the attached campaign's name. The length of this string must be between 1 and 255, inclusive, in UTF-8 bytes, (trimmed).",
          "type": "string"
        },
        "amountMicros": {
          "description": "The amount of the budget, in the local currency for the account. Amount is specified in micros, where one million is equivalent to one currency unit. Monthly spend is capped at 30.4 times this amount.",
          "type": "string",
          "format": "int64"
        },
        "totalAmountMicros": {
          "description": "The lifetime amount of the budget, in the local currency for the account. Amount is specified in micros, where one million is equivalent to one currency unit.",
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. The status of this campaign budget. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Budget is enabled.",
            "Budget is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "deliveryMethod": {
          "description": "The delivery method that determines the rate at which the campaign budget is spent. Defaults to STANDARD if unspecified in a create operation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The budget server will throttle serving evenly across the entire time period.",
            "The budget server will not throttle serving, and ads will serve as fast as possible."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "STANDARD",
            "ACCELERATED"
          ]
        },
        "explicitlyShared": {
          "description": "Specifies whether the budget is explicitly shared. Defaults to true if unspecified in a create operation. If true, the budget was created with the purpose of sharing across one or more campaigns. If false, the budget was created with the intention of only being used with a single campaign. The budget's name and status will stay in sync with the campaign's name and status. Attempting to share the budget with a second campaign will result in an error. A non-shared budget can become an explicitly shared. The same operation must also assign the budget a name. A shared campaign budget can never become non-shared.",
          "type": "boolean"
        },
        "referenceCount": {
          "description": "Output only. The number of campaigns actively using the budget. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "hasRecommendedBudget": {
          "description": "Output only. Indicates whether there is a recommended budget for this campaign budget. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "recommendedBudgetAmountMicros": {
          "description": "Output only. The recommended budget amount. If no recommendation is available, this will be set to the budget amount. Amount is specified in micros, where one million is equivalent to one currency unit. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "period": {
          "description": "Immutable. Period over which to spend the budget. Defaults to DAILY if not specified.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Daily budget.",
            "Custom budget, added back in V5. Custom budget can be used with total_amount to specify lifetime budget limit. See: https://support.google.com/google-ads/answer/6385083 for more info."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DAILY",
            "CUSTOM_PERIOD"
          ]
        },
        "recommendedBudgetEstimatedChangeWeeklyClicks": {
          "description": "Output only. The estimated change in weekly clicks if the recommended budget is applied. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "recommendedBudgetEstimatedChangeWeeklyCostMicros": {
          "description": "Output only. The estimated change in weekly cost in micros if the recommended budget is applied. One million is equivalent to one currency unit. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "recommendedBudgetEstimatedChangeWeeklyInteractions": {
          "description": "Output only. The estimated change in weekly interactions if the recommended budget is applied. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "recommendedBudgetEstimatedChangeWeeklyViews": {
          "description": "Output only. The estimated change in weekly views if the recommended budget is applied. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Immutable. The type of the campaign budget.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Budget type for standard Google Ads usage. Caps daily spend at two times the specified budget amount. Full details: https://support.google.com/google-ads/answer/6385083",
            "Budget type with a fixed cost-per-acquisition (conversion). Full details: https://support.google.com/google-ads/answer/7528254 This type is only supported by campaigns with AdvertisingChannelType.DISPLAY (excluding AdvertisingChannelSubType.DISPLAY_GMAIL), BiddingStrategyType.TARGET_CPA and PaymentMode.CONVERSIONS.",
            "Budget type for Smart Campaign. Full details: https://support.google.com/google-ads/answer/7653509 This type is only supported by campaigns with AdvertisingChannelType.SMART and AdvertisingChannelSubType.SMART_CAMPAIGN.",
            "Budget type for Local Services Campaign. Full details: https://support.google.com/localservices/answer/7434558 This type is only supported by campaigns with AdvertisingChannelType.LOCAL_SERVICES."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "STANDARD",
            "FIXED_CPA",
            "SMART_CAMPAIGN",
            "LOCAL_SERVICES"
          ]
        },
        "alignedBiddingStrategyId": {
          "description": "ID of the portfolio bidding strategy that this shared campaign budget is aligned with. When a bidding strategy and a campaign budget are aligned, they are attached to the same set of campaigns. After a campaign budget is aligned with a bidding strategy, campaigns that are added to the campaign budget must also use the aligned bidding strategy.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetsResponse",
      "description": "Response message for campaign budget mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetResult",
      "description": "The result for the campaign budget mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignBudget": {
          "description": "The mutated campaign budget with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBudget"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsRequest",
      "description": "Request message for CampaignConversionGoalService.MutateCampaignConversionGoals.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign conversion goal.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignConversionGoalOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignConversionGoalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignConversionGoalOperation",
      "description": "A single operation (update) on a campaign conversion goal.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The customer conversion goal is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignConversionGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignConversionGoal": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignConversionGoal",
      "description": "The biddability setting for the specified campaign only for all conversion actions with a matching category and origin.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign conversion goal. Campaign conversion goal resource names have the form: `customers/{customer_id}/campaignConversionGoals/{campaign_id}~{category}~{origin}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign with which this campaign conversion goal is associated.",
          "type": "string"
        },
        "category": {
          "description": "The conversion category of this campaign conversion goal.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Default category.",
            "User visiting a page.",
            "Purchase, sales, or \"order placed\" event.",
            "Signup user action.",
            "Software download action (as for an app).",
            "The addition of items to a shopping cart or bag on an advertiser site.",
            "When someone enters the checkout flow on an advertiser site.",
            "The start of a paid subscription for a product or service.",
            "A call to indicate interest in an advertiser's offering.",
            "A lead conversion imported from an external source into Google Ads.",
            "A submission of a form on an advertiser site indicating business interest.",
            "A booking of an appointment with an advertiser's business.",
            "A quote or price estimate request.",
            "A search for an advertiser's business location with intention to visit.",
            "A click to an advertiser's partner's site.",
            "A call, SMS, email, chat or other type of contact to an advertiser.",
            "A website engagement event such as long site time or a Google Analytics (GA) Smart Goal. Intended to be used for GA, Firebase, GA Gold goal imports.",
            "A visit to a physical store location.",
            "A sale occurring in a physical store.",
            "A lead conversion imported from an external source into Google Ads, that has been further qualified by the advertiser (marketing/sales team). In the lead-to-sale journey, advertisers get leads, then act on them by reaching out to the consumer. If the consumer is interested and may end up buying their product, the advertiser marks such leads as \"qualified leads\".",
            "A lead conversion imported from an external source into Google Ads, that has further completed a chosen stage as defined by the lead gen advertiser."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT",
            "PAGE_VIEW",
            "PURCHASE",
            "SIGNUP",
            "DOWNLOAD",
            "ADD_TO_CART",
            "BEGIN_CHECKOUT",
            "SUBSCRIBE_PAID",
            "PHONE_CALL_LEAD",
            "IMPORTED_LEAD",
            "SUBMIT_LEAD_FORM",
            "BOOK_APPOINTMENT",
            "REQUEST_QUOTE",
            "GET_DIRECTIONS",
            "OUTBOUND_CLICK",
            "CONTACT",
            "ENGAGEMENT",
            "STORE_VISIT",
            "STORE_SALE",
            "QUALIFIED_LEAD",
            "CONVERTED_LEAD"
          ]
        },
        "origin": {
          "description": "The conversion origin of this campaign conversion goal.",
          "type": "string",
          "enumDescriptions": [
            "The conversion origin has not been specified.",
            "The conversion origin is not known in this version.",
            "Conversion that occurs when a user visits a website or takes an action there after viewing an ad.",
            "Conversions reported by an offline pipeline which collects local actions from Google-hosted pages (for example, Google Maps, Google Place Page, etc) and attributes them to relevant ad events.",
            "Conversion that occurs when a user performs an action through any app platforms.",
            "Conversion that occurs when a user makes a call from ads.",
            "Conversion that occurs when a user visits or makes a purchase at a physical store.",
            "Conversion that occurs on YouTube."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "GOOGLE_HOSTED",
            "APP",
            "CALL_FROM_ADS",
            "STORE",
            "YOUTUBE_HOSTED"
          ]
        },
        "biddable": {
          "description": "The biddability of the campaign conversion goal.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalsResponse",
      "description": "Response message for a campaign conversion goal mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalResult",
      "description": "The result for the campaign conversion goal mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaRequest",
      "description": "Request message for CampaignCriterionService.MutateCampaignCriteria.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignCriterionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignCriterionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignCriterionOperation",
      "description": "A single operation (create, update, remove) on a campaign criterion.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new criterion.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCriterion"
        },
        "update": {
          "description": "Update operation: The criterion is expected to have a valid resource name. Note that for smart campaigns, you cannot use the update method to edit the geolocation target.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCriterion"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed criterion is expected, in this format: `customers/{customer_id}/campaignCriteria/{campaign_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignCriterion": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignCriterion",
      "description": "A campaign criterion.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign criterion. Campaign criterion resource names have the form: `customers/{customer_id}/campaignCriteria/{campaign_id}~{criterion_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which the criterion belongs.",
          "type": "string"
        },
        "criterionId": {
          "description": "Output only. The ID of the criterion. This field is ignored during mutate.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "displayName": {
          "description": "Output only. The display name of the criterion. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string"
        },
        "bidModifier": {
          "description": "The modifier for the bids when the criterion matches. The modifier must be in the range: 0.1 - 10.0. Most targetable criteria types support modifiers. Use 0 to opt out of a Device type.",
          "type": "number",
          "format": "float"
        },
        "negative": {
          "description": "Immutable. Whether to target (`false`) or exclude (`true`) the criterion.",
          "type": "boolean"
        },
        "type": {
          "description": "Output only. The type of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword, for example, 'mars cruise'.",
            "Placement, also known as Website, for example, 'www.flowers4sale.com'",
            "Mobile application categories to target.",
            "Mobile applications to target.",
            "Devices to target.",
            "Locations to target.",
            "Listing groups to target.",
            "Ad Schedule.",
            "Age range.",
            "Gender.",
            "Income Range.",
            "Parental status.",
            "YouTube Video.",
            "YouTube Channel.",
            "User list.",
            "Proximity.",
            "A topic target on the display network (for example, \"Pets & Animals\").",
            "Listing scope to target.",
            "Language.",
            "IpBlock.",
            "Content Label for category exclusion.",
            "Carrier.",
            "A category the user is interested in.",
            "Webpage criterion for dynamic search ads.",
            "Operating system version.",
            "App payment model.",
            "Mobile device.",
            "Custom affinity.",
            "Custom intent.",
            "Location group.",
            "Custom audience",
            "Combined audience",
            "Smart Campaign keyword theme",
            "Audience",
            "Negative Keyword List",
            "Local Services Ads Service ID.",
            "Search Theme.",
            "Brand",
            "Brand List",
            "Life Event",
            "Webpage List",
            "Video lineup",
            "Placement List"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "PLACEMENT",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "DEVICE",
            "LOCATION",
            "LISTING_GROUP",
            "AD_SCHEDULE",
            "AGE_RANGE",
            "GENDER",
            "INCOME_RANGE",
            "PARENTAL_STATUS",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "USER_LIST",
            "PROXIMITY",
            "TOPIC",
            "LISTING_SCOPE",
            "LANGUAGE",
            "IP_BLOCK",
            "CONTENT_LABEL",
            "CARRIER",
            "USER_INTEREST",
            "WEBPAGE",
            "OPERATING_SYSTEM_VERSION",
            "APP_PAYMENT_MODEL",
            "MOBILE_DEVICE",
            "CUSTOM_AFFINITY",
            "CUSTOM_INTENT",
            "LOCATION_GROUP",
            "CUSTOM_AUDIENCE",
            "COMBINED_AUDIENCE",
            "KEYWORD_THEME",
            "AUDIENCE",
            "NEGATIVE_KEYWORD_LIST",
            "LOCAL_SERVICE_ID",
            "SEARCH_THEME",
            "BRAND",
            "BRAND_LIST",
            "LIFE_EVENT",
            "WEBPAGE_LIST",
            "VIDEO_LINEUP",
            "PLACEMENT_LIST"
          ]
        },
        "status": {
          "description": "The status of the criterion.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The campaign criterion is enabled.",
            "The campaign criterion is paused.",
            "The campaign criterion is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "keyword": {
          "description": "Immutable. Keyword.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "placement": {
          "description": "Immutable. Placement.",
          "$ref": "GoogleAdsGoogleadsV21Common__PlacementInfo"
        },
        "mobileAppCategory": {
          "description": "Immutable. Mobile app category.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo"
        },
        "mobileApplication": {
          "description": "Immutable. Mobile application.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileApplicationInfo"
        },
        "location": {
          "description": "Immutable. Location.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "device": {
          "description": "Immutable. Device.",
          "$ref": "GoogleAdsGoogleadsV21Common__DeviceInfo"
        },
        "adSchedule": {
          "description": "Immutable. Ad Schedule.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
        },
        "ageRange": {
          "description": "Immutable. Age range.",
          "$ref": "GoogleAdsGoogleadsV21Common__AgeRangeInfo"
        },
        "gender": {
          "description": "Immutable. Gender.",
          "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
        },
        "incomeRange": {
          "description": "Immutable. Income range.",
          "$ref": "GoogleAdsGoogleadsV21Common__IncomeRangeInfo"
        },
        "parentalStatus": {
          "description": "Immutable. Parental status.",
          "$ref": "GoogleAdsGoogleadsV21Common__ParentalStatusInfo"
        },
        "userList": {
          "description": "Immutable. User List.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
        },
        "youtubeVideo": {
          "description": "Immutable. YouTube Video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo"
        },
        "youtubeChannel": {
          "description": "Immutable. YouTube Channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "proximity": {
          "description": "Immutable. Proximity.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProximityInfo"
        },
        "topic": {
          "description": "Immutable. Topic.",
          "$ref": "GoogleAdsGoogleadsV21Common__TopicInfo"
        },
        "listingScope": {
          "description": "Immutable. Listing scope.",
          "$ref": "GoogleAdsGoogleadsV21Common__ListingScopeInfo"
        },
        "language": {
          "description": "Immutable. Language.",
          "$ref": "GoogleAdsGoogleadsV21Common__LanguageInfo"
        },
        "ipBlock": {
          "description": "Immutable. IpBlock.",
          "$ref": "GoogleAdsGoogleadsV21Common__IpBlockInfo"
        },
        "contentLabel": {
          "description": "Immutable. ContentLabel.",
          "$ref": "GoogleAdsGoogleadsV21Common__ContentLabelInfo"
        },
        "carrier": {
          "description": "Immutable. Carrier.",
          "$ref": "GoogleAdsGoogleadsV21Common__CarrierInfo"
        },
        "userInterest": {
          "description": "Immutable. User Interest.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
        },
        "webpage": {
          "description": "Immutable. Webpage.",
          "$ref": "GoogleAdsGoogleadsV21Common__WebpageInfo"
        },
        "operatingSystemVersion": {
          "description": "Immutable. Operating system version.",
          "$ref": "GoogleAdsGoogleadsV21Common__OperatingSystemVersionInfo"
        },
        "mobileDevice": {
          "description": "Immutable. Mobile Device.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileDeviceInfo"
        },
        "locationGroup": {
          "description": "Immutable. Location Group",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationGroupInfo"
        },
        "customAffinity": {
          "description": "Immutable. Custom Affinity.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomAffinityInfo"
        },
        "customAudience": {
          "description": "Immutable. Custom Audience",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomAudienceInfo"
        },
        "combinedAudience": {
          "description": "Immutable. Combined Audience.",
          "$ref": "GoogleAdsGoogleadsV21Common__CombinedAudienceInfo"
        },
        "keywordTheme": {
          "description": "Immutable. Smart Campaign Keyword Theme.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordThemeInfo"
        },
        "localServiceId": {
          "description": "Immutable. GLS service campaign criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocalServiceIdInfo"
        },
        "brandList": {
          "description": "Immutable. Brand list campaign criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__BrandListInfo"
        },
        "lifeEvent": {
          "description": "Immutable. Life event campaign criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__LifeEventInfo"
        },
        "webpageList": {
          "description": "Immutable. Webpage list. This criterion is not publicly available.",
          "$ref": "GoogleAdsGoogleadsV21Common__WebpageListInfo"
        },
        "videoLineup": {
          "description": "Immutable. Video lineup criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__VideoLineupInfo"
        },
        "extendedDemographic": {
          "description": "Immutable. Extended demographic criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__ExtendedDemographicInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ProximityInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ProximityInfo",
      "description": "A Proximity criterion. The geo point and radius determine what geographical area is included. The address is a description of the geo point that does not affect ad serving. There are two ways to create a proximity. First, by setting an address and radius. The geo point will be automatically computed. Second, by setting a geo point and radius. The address is an optional label that won't be validated.",
      "type": "object",
      "properties": {
        "geoPoint": {
          "description": "Latitude and longitude.",
          "$ref": "GoogleAdsGoogleadsV21Common__GeoPointInfo"
        },
        "radius": {
          "description": "The radius of the proximity.",
          "type": "number",
          "format": "double"
        },
        "radiusUnits": {
          "description": "The unit of measurement of the radius. Default is KILOMETERS.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Miles",
            "Kilometers"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MILES",
            "KILOMETERS"
          ]
        },
        "address": {
          "description": "Full address.",
          "$ref": "GoogleAdsGoogleadsV21Common__AddressInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__GeoPointInfo": {
      "id": "GoogleAdsGoogleadsV21Common__GeoPointInfo",
      "description": "Geo point for proximity criterion.",
      "type": "object",
      "properties": {
        "longitudeInMicroDegrees": {
          "description": "Micro degrees for the longitude.",
          "type": "integer",
          "format": "int32"
        },
        "latitudeInMicroDegrees": {
          "description": "Micro degrees for the latitude.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AddressInfo": {
      "id": "GoogleAdsGoogleadsV21Common__AddressInfo",
      "description": "Address for proximity criterion.",
      "type": "object",
      "properties": {
        "postalCode": {
          "description": "Postal code.",
          "type": "string"
        },
        "provinceCode": {
          "description": "Province or state code.",
          "type": "string"
        },
        "countryCode": {
          "description": "Country code.",
          "type": "string"
        },
        "provinceName": {
          "description": "Province or state name.",
          "type": "string"
        },
        "streetAddress": {
          "description": "Street address line 1.",
          "type": "string"
        },
        "streetAddress2": {
          "description": "Street address line 2. This field is write-only. It is only used for calculating the longitude and latitude of an address when geo_point is empty.",
          "type": "string"
        },
        "cityName": {
          "description": "Name of the city.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ListingScopeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ListingScopeInfo",
      "description": "A listing scope criterion.",
      "type": "object",
      "properties": {
        "dimensions": {
          "description": "Scope of the campaign criterion.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__ListingDimensionInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__IpBlockInfo": {
      "id": "GoogleAdsGoogleadsV21Common__IpBlockInfo",
      "description": "An IpBlock criterion used for IP exclusions. We allow: - IPv4 and IPv6 addresses - individual addresses (192.168.0.1) - masks for individual addresses (192.168.0.1/32) - masks for Class C networks (192.168.0.1/24)",
      "type": "object",
      "properties": {
        "ipAddress": {
          "description": "The IP address of this IP block.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ContentLabelInfo": {
      "id": "GoogleAdsGoogleadsV21Common__ContentLabelInfo",
      "description": "Content Label for category exclusion.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Content label type, required for CREATE operations.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Sexually suggestive content.",
            "Below the fold placement.",
            "Parked domain.",
            "Juvenile, gross & bizarre content.",
            "Profanity & rough language.",
            "Death & tragedy.",
            "Video.",
            "Content rating: G.",
            "Content rating: PG.",
            "Content rating: T.",
            "Content rating: MA.",
            "Content rating: not yet rated.",
            "Embedded video.",
            "Live streaming video.",
            "Sensitive social issues.",
            "Content that's suitable for families to view together, including Made for Kids videos on YouTube.",
            "Video games that simulate hand-to-hand fighting or combat with the use of modern or medieval weapons.",
            "Video games that feature mature content, such as violence, inappropriate language, or sexual suggestiveness.",
            "Health content that people might find sensitive or upsetting, such as medical procedures or images and descriptions of various medical conditions.",
            "Health content from sources that may provide accurate information but aren't as commonly cited as other, more well-known sources.",
            "News content that's been recently announced, regardless of the themes or people being reported on.",
            "News content that people might find sensitive or upsetting, such as crimes, accidents, and natural incidents, or commentary on potentially controversial social and political issues.",
            "News content from sources that aren't featured on Google News or YouTube News.",
            "Political content, such as political statements made by well-known politicians, political elections, or events widely perceived to be political in nature.",
            "Content with religious themes, such as religious teachings or customs, holy sites or places of worship, well-known religious figures or people dressed in religious attire, or religious opinions on social and political issues."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEXUALLY_SUGGESTIVE",
            "BELOW_THE_FOLD",
            "PARKED_DOMAIN",
            "JUVENILE",
            "PROFANITY",
            "TRAGEDY",
            "VIDEO",
            "VIDEO_RATING_DV_G",
            "VIDEO_RATING_DV_PG",
            "VIDEO_RATING_DV_T",
            "VIDEO_RATING_DV_MA",
            "VIDEO_NOT_YET_RATED",
            "EMBEDDED_VIDEO",
            "LIVE_STREAMING_VIDEO",
            "SOCIAL_ISSUES",
            "BRAND_SUITABILITY_CONTENT_FOR_FAMILIES",
            "BRAND_SUITABILITY_GAMES_FIGHTING",
            "BRAND_SUITABILITY_GAMES_MATURE",
            "BRAND_SUITABILITY_HEALTH_SENSITIVE",
            "BRAND_SUITABILITY_HEALTH_SOURCE_UNDETERMINED",
            "BRAND_SUITABILITY_NEWS_RECENT",
            "BRAND_SUITABILITY_NEWS_SENSITIVE",
            "BRAND_SUITABILITY_NEWS_SOURCE_NOT_FEATURED",
            "BRAND_SUITABILITY_POLITICS",
            "BRAND_SUITABILITY_RELIGION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CarrierInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CarrierInfo",
      "description": "Represents a Carrier Criterion.",
      "type": "object",
      "properties": {
        "carrierConstant": {
          "description": "The Carrier constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__OperatingSystemVersionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__OperatingSystemVersionInfo",
      "description": "Represents an operating system version to be targeted.",
      "type": "object",
      "properties": {
        "operatingSystemVersionConstant": {
          "description": "The operating system version constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MobileDeviceInfo": {
      "id": "GoogleAdsGoogleadsV21Common__MobileDeviceInfo",
      "description": "A mobile device criterion.",
      "type": "object",
      "properties": {
        "mobileDeviceConstant": {
          "description": "The mobile device constant resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocationGroupInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LocationGroupInfo",
      "description": "A radius around a list of locations specified through a feed or assetSet.",
      "type": "object",
      "properties": {
        "geoTargetConstants": {
          "description": "Geo target constant(s) restricting the scope of the geographic area within the feed. Currently only one geo target constant is allowed. Cannot be set with AssetSet fields.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "radius": {
          "description": "Distance in units specifying the radius around targeted locations. This is required and must be set in CREATE operations.",
          "type": "string",
          "format": "int64"
        },
        "radiusUnits": {
          "description": "Unit of the radius. Miles and meters are supported for geo target constants. Milli miles and meters are supported for feed item sets and asset sets. This is required and must be set in CREATE operations.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Meters",
            "Miles",
            "Milli Miles"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "METERS",
            "MILES",
            "MILLI_MILES"
          ]
        },
        "feedItemSets": {
          "description": "FeedItemSets whose FeedItems are targeted. If multiple IDs are specified, then all items that appear in at least one set are targeted. This field cannot be used with geo_target_constants. This is optional and can only be set in CREATE operations. Cannot be set with AssetSet fields.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enableCustomerLevelLocationAssetSet": {
          "description": "Denotes that the latest customer level asset set is used for targeting. Used with radius and radius_units. Cannot be used with feed, geo target constants or feed item sets. When using asset sets, either this field or location_group_asset_sets should be specified. Both cannot be used at the same time. This can only be set in CREATE operations.",
          "type": "boolean"
        },
        "locationGroupAssetSets": {
          "description": "AssetSets whose Assets are targeted. If multiple IDs are specified, then all items that appear in at least one set are targeted. This field cannot be used with feed, geo target constants or feed item sets. When using asset sets, either this field or enable_customer_level_location_asset_set should be specified. Both cannot be used at the same time. This can only be set in CREATE operations.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordThemeInfo": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordThemeInfo",
      "description": "A Smart Campaign keyword theme.",
      "type": "object",
      "properties": {
        "keywordThemeConstant": {
          "description": "The resource name of a Smart Campaign keyword theme constant. `keywordThemeConstants/{keyword_theme_id}~{sub_keyword_theme_id}`",
          "type": "string"
        },
        "freeFormKeywordTheme": {
          "description": "Free-form text to be matched to a Smart Campaign keyword theme constant on a best-effort basis.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocalServiceIdInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LocalServiceIdInfo",
      "description": "A Local Services Ads service ID. Represents a service type (such as install_faucet) that a Local Services Campaign can target.",
      "type": "object",
      "properties": {
        "serviceId": {
          "description": "The criterion resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__WebpageListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__WebpageListInfo",
      "description": "Represents a list of webpage criteria.",
      "type": "object",
      "properties": {
        "sharedSet": {
          "description": "Shared set resource name of the webpage list.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCriteriaResponse",
      "description": "Response message for campaign criterion mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCriterionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCriterionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCriterionResult",
      "description": "The result for the criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignCriterion": {
          "description": "The mutated campaign criterion with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCriterion"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersRequest",
      "description": "Request message for CampaignCustomizerService.MutateCampaignCustomizers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign customizers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignCustomizerOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignCustomizerOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignCustomizerOperation",
      "description": "A single operation (create, remove) on a customizer attribute.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign customizer",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCustomizer"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign customizer is expected, in this format: `customers/{customer_id}/campaignCustomizers/{campaign_id}~{customizer_attribute_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignCustomizer": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignCustomizer",
      "description": "A customizer value for the associated CustomizerAttribute at the Campaign level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign customizer. Campaign customizer resource names have the form: `customers/{customer_id}/campaignCustomizers/{campaign_id}~{customizer_attribute_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which the customizer attribute is linked.",
          "type": "string"
        },
        "customizerAttribute": {
          "description": "Required. Immutable. The customizer attribute which is linked to the campaign.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the campaign customizer.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The customizer value is enabled.",
            "The customizer value is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "value": {
          "description": "Required. The value to associate with the customizer attribute at this level. The value must be of the type specified for the CustomizerAttribute.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomizerValue"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizersResponse",
      "description": "Response message for a campaign customizer mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizerResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizerResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizerResult",
      "description": "The result for the campaign customizer mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignCustomizer": {
          "description": "The mutated CampaignCustomizer with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCustomizer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsRequest",
      "description": "Request message for CampaignDraftService.MutateCampaignDrafts.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign drafts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignDraftOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignDraftOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignDraftOperation",
      "description": "A single operation (create, update, remove) on a campaign draft.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign draft.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignDraft"
        },
        "update": {
          "description": "Update operation: The campaign draft is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignDraft"
        },
        "remove": {
          "description": "Remove operation: The campaign draft is expected to have a valid resource name, in this format: `customers/{customer_id}/campaignDrafts/{base_campaign_id}~{draft_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignDraft": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignDraft",
      "description": "A campaign draft.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign draft. Campaign draft resource names have the form: `customers/{customer_id}/campaignDrafts/{base_campaign_id}~{draft_id}`",
          "type": "string"
        },
        "draftId": {
          "description": "Output only. The ID of the draft. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "baseCampaign": {
          "description": "Immutable. The base campaign to which the draft belongs.",
          "type": "string"
        },
        "name": {
          "description": "The name of the campaign draft. This field is required and should not be empty when creating new campaign drafts. It must not contain any null (code point 0x0), NL line feed (code point 0xA) or carriage return (code point 0xD) characters.",
          "type": "string"
        },
        "draftCampaign": {
          "description": "Output only. Resource name of the Campaign that results from overlaying the draft changes onto the base campaign. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the campaign draft. This field is read-only. When a new campaign draft is added, the status defaults to PROPOSED.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Initial state of the draft, the advertiser can start adding changes with no effect on serving.",
            "The campaign draft is removed.",
            "Advertiser requested to promote draft's changes back into the original campaign. Advertiser can poll the long running operation returned by the promote action to see the status of the promotion.",
            "The process to merge changes in the draft back to the original campaign has completed successfully.",
            "The promotion failed after it was partially applied. Promote cannot be attempted again safely, so the issue must be corrected in the original campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PROPOSED",
            "REMOVED",
            "PROMOTING",
            "PROMOTED",
            "PROMOTE_FAILED"
          ]
        },
        "hasExperimentRunning": {
          "description": "Output only. Whether there is an experiment based on this draft currently serving.",
          "readOnly": true,
          "type": "boolean"
        },
        "longRunningOperation": {
          "description": "Output only. The resource name of the long-running operation that can be used to poll for completion of draft promotion. This is only set if the draft promotion is in progress or finished.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftsResponse",
      "description": "Response message for campaign draft mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignDraftResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftResult",
      "description": "The result for the campaign draft mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignDraft": {
          "description": "The mutated campaign draft with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignDraft"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PromoteCampaignDraftRequest": {
      "id": "GoogleAdsGoogleadsV21Services__PromoteCampaignDraftRequest",
      "description": "Request message for CampaignDraftService.PromoteCampaignDraft.",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If true, the request is validated but no Long Running Operation is created. Only errors are returned.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListCampaignDraftAsyncErrorsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListCampaignDraftAsyncErrorsResponse",
      "description": "Response message for CampaignDraftService.ListCampaignDraftAsyncErrors.",
      "type": "object",
      "properties": {
        "errors": {
          "description": "Details of the errors when performing the asynchronous operation.",
          "type": "array",
          "items": {
            "$ref": "GoogleRpc__Status"
          }
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsRequest",
      "description": "Request message for CampaignGroupService.MutateCampaignGroups.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign groups.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignGroupOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignGroupOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignGroupOperation",
      "description": "A single operation (create, update, remove) on a campaign group.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign group.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignGroup"
        },
        "update": {
          "description": "Update operation: The campaign group is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignGroup"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign group is expected, in this format: `customers/{customer_id}/campaignGroups/{campaign_group_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignGroup": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignGroup",
      "description": "A campaign group.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign group. Campaign group resource names have the form: `customers/{customer_id}/campaignGroups/{campaign_group_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the campaign group.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the campaign group. This field is required and should not be empty when creating new campaign groups. It must not contain any null (code point 0x0), NL line feed (code point 0xA) or carriage return (code point 0xD) characters.",
          "type": "string"
        },
        "status": {
          "description": "The status of the campaign group. When a new campaign group is added, the status defaults to ENABLED.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The campaign group is active.",
            "The campaign group has been removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupsResponse",
      "description": "Response message for campaign group mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignGroupResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupResult",
      "description": "The result for the campaign group mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Required. Returned for successful operations.",
          "type": "string"
        },
        "campaignGroup": {
          "description": "The mutated campaign group with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignGroup"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsRequest",
      "description": "Request message for CampaignLabelService.MutateCampaignLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on campaign-label relationships.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignLabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignLabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignLabelOperation",
      "description": "A single operation (create, remove) on a campaign-label relationship.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign-label relationship.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignLabel"
        },
        "remove": {
          "description": "Remove operation: A resource name for the campaign-label relationship being removed, in this format: `customers/{customer_id}/campaignLabels/{campaign_id}~{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignLabel": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignLabel",
      "description": "Represents a relationship between a campaign and a label.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. Campaign label resource names have the form: `customers/{customer_id}/campaignLabels/{campaign_id}~{label_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which the label is attached.",
          "type": "string"
        },
        "label": {
          "description": "Immutable. The label assigned to the campaign.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelsResponse",
      "description": "Response message for a campaign labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelResult",
      "description": "The result for a campaign label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignsRequest",
      "description": "Request message for CampaignService.MutateCampaigns.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaigns.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignOperation",
      "description": "A single operation (create, update, remove) on a campaign.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Campaign"
        },
        "update": {
          "description": "Update operation: The campaign is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Campaign"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign is expected, in this format: `customers/{customer_id}/campaigns/{campaign_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Campaign": {
      "id": "GoogleAdsGoogleadsV21Resources__Campaign",
      "description": "A campaign.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign. Campaign resource names have the form: `customers/{customer_id}/campaigns/{campaign_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the campaign. This field is required and should not be empty when creating new campaigns. It must not contain any null (code point 0x0), NL line feed (code point 0xA) or carriage return (code point 0xD) characters.",
          "type": "string"
        },
        "primaryStatus": {
          "description": "Output only. The primary status of the campaign. Provides insight into why a campaign is not serving or not serving optimally. Modification to the campaign and its related entities might take a while to be reflected in this status.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The campaign is eligible to serve.",
            "The user-specified campaign status is paused.",
            "The user-specified campaign status is removed.",
            "The user-specified time for this campaign to end has passed.",
            "The campaign may serve in the future.",
            "The campaign or its associated entities have incorrect user-specified settings.",
            "The campaign or its associated entities are limited by user-specified settings.",
            "The automated bidding system is adjusting to user-specified changes to the campaign or associated entities.",
            "The campaign is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "ENDED",
            "PENDING",
            "MISCONFIGURED",
            "LIMITED",
            "LEARNING",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusReasons": {
          "description": "Output only. The primary status reasons of the campaign. Provides insight into why a campaign is not serving or not serving optimally. These reasons are aggregated to determine an overall CampaignPrimaryStatus.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The user-specified campaign status is removed.",
              "The user-specified campaign status is paused.",
              "The user-specified time for this campaign to start is in the future.",
              "The user-specified time for this campaign to end has passed.",
              "The campaign is a draft.",
              "The bidding strategy has incorrect user-specified settings.",
              "The bidding strategy is limited by user-specified settings such as lack of data or similar.",
              "The automated bidding system is adjusting to user-specified changes to the bidding strategy.",
              "Campaign could capture more conversion value by adjusting CPA/ROAS targets.",
              "The budget is limiting the campaign's ability to serve.",
              "The budget has incorrect user-specified settings.",
              "Campaign is not targeting all relevant queries.",
              "The user-specified ad group statuses are all paused.",
              "No eligible ad groups exist in this campaign.",
              "The user-specified keyword statuses are all paused.",
              "No eligible keywords exist in this campaign.",
              "The user-specified ad group ad statuses are all paused.",
              "No eligible ad group ads exist in this campaign.",
              "At least one ad in this campaign is limited by policy.",
              "At least one ad in this campaign is disapproved.",
              "Most ads in this campaign are pending review.",
              "The campaign has a lead form goal, and the lead form extension is missing.",
              "The campaign has a call goal, and the call extension is missing.",
              "The lead form extension is under review.",
              "The lead extension is disapproved.",
              "The call extension is under review.",
              "The call extension is disapproved.",
              "No eligible mobile application ad group criteria exist in this campaign.",
              "The user-specified campaign group status is paused.",
              "The user-specified times of all group budgets associated with the parent campaign group has passed.",
              "The app associated with this ACi campaign is not released in the target countries of the campaign.",
              "The app associated with this ACi campaign is partially released in the target countries of the campaign.",
              "At least one asset group in this campaign is disapproved.",
              "At least one asset group in this campaign is limited by policy.",
              "Most asset groups in this campaign are pending review.",
              "No eligible asset groups exist in this campaign.",
              "All asset groups in this campaign are paused.",
              "The campaign has location restrictions but does not specify location targeting."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CAMPAIGN_REMOVED",
              "CAMPAIGN_PAUSED",
              "CAMPAIGN_PENDING",
              "CAMPAIGN_ENDED",
              "CAMPAIGN_DRAFT",
              "BIDDING_STRATEGY_MISCONFIGURED",
              "BIDDING_STRATEGY_LIMITED",
              "BIDDING_STRATEGY_LEARNING",
              "BIDDING_STRATEGY_CONSTRAINED",
              "BUDGET_CONSTRAINED",
              "BUDGET_MISCONFIGURED",
              "SEARCH_VOLUME_LIMITED",
              "AD_GROUPS_PAUSED",
              "NO_AD_GROUPS",
              "KEYWORDS_PAUSED",
              "NO_KEYWORDS",
              "AD_GROUP_ADS_PAUSED",
              "NO_AD_GROUP_ADS",
              "HAS_ADS_LIMITED_BY_POLICY",
              "HAS_ADS_DISAPPROVED",
              "MOST_ADS_UNDER_REVIEW",
              "MISSING_LEAD_FORM_EXTENSION",
              "MISSING_CALL_EXTENSION",
              "LEAD_FORM_EXTENSION_UNDER_REVIEW",
              "LEAD_FORM_EXTENSION_DISAPPROVED",
              "CALL_EXTENSION_UNDER_REVIEW",
              "CALL_EXTENSION_DISAPPROVED",
              "NO_MOBILE_APPLICATION_AD_GROUP_CRITERIA",
              "CAMPAIGN_GROUP_PAUSED",
              "CAMPAIGN_GROUP_ALL_GROUP_BUDGETS_ENDED",
              "APP_NOT_RELEASED",
              "APP_PARTIALLY_RELEASED",
              "HAS_ASSET_GROUPS_DISAPPROVED",
              "HAS_ASSET_GROUPS_LIMITED_BY_POLICY",
              "MOST_ASSET_GROUPS_UNDER_REVIEW",
              "NO_ASSET_GROUPS",
              "ASSET_GROUPS_PAUSED",
              "MISSING_LOCATION_TARGETING"
            ]
          }
        },
        "status": {
          "description": "The status of the campaign. When a new campaign is added, the status defaults to ENABLED.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Campaign is active and can show ads.",
            "Campaign has been paused by the user.",
            "Campaign has been removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED",
            "REMOVED"
          ]
        },
        "servingStatus": {
          "description": "Output only. The ad serving status of the campaign.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Serving.",
            "None.",
            "Ended.",
            "Pending.",
            "Suspended."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SERVING",
            "NONE",
            "ENDED",
            "PENDING",
            "SUSPENDED"
          ]
        },
        "biddingStrategySystemStatus": {
          "description": "Output only. The system status of the campaign's bidding strategy.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Signals that an unexpected error occurred, for example, no bidding strategy type was found, or no status information was found.",
            "Used for return value only. Represents value unknown in this version.",
            "The bid strategy is active, and AdWords cannot find any specific issues with the strategy.",
            "The bid strategy is learning because it has been recently created or recently reactivated.",
            "The bid strategy is learning because of a recent setting change.",
            "The bid strategy is learning because of a recent budget change.",
            "The bid strategy is learning because of recent change in number of campaigns, ad groups or keywords attached to it.",
            "The bid strategy depends on conversion reporting and the customer recently modified conversion types that were relevant to the bid strategy.",
            "The bid strategy depends on conversion reporting and the customer recently changed their conversion settings.",
            "The bid strategy is limited by its bid ceiling.",
            "The bid strategy is limited by its bid floor.",
            "The bid strategy is limited because there was not enough conversion traffic over the past weeks.",
            "A significant fraction of keywords in this bid strategy are limited by budget.",
            "The bid strategy cannot reach its target spend because its spend has been de-prioritized.",
            "A significant fraction of keywords in this bid strategy have a low Quality Score.",
            "The bid strategy cannot fully spend its budget because of narrow targeting.",
            "Missing conversion tracking (no pings present) and/or remarketing lists for SSC.",
            "The bid strategy depends on conversion reporting and the customer is lacking conversion types that might be reported against this strategy.",
            "The bid strategy depends on conversion reporting and the customer's conversion settings are misconfigured.",
            "There are campaigns outside the bid strategy that share budgets with campaigns included in the strategy.",
            "The campaign has an invalid strategy type and is not serving.",
            "The bid strategy is not active. Either there are no active campaigns, ad groups or keywords attached to the bid strategy. Or there are no active budgets connected to the bid strategy.",
            "This bid strategy currently does not support status reporting.",
            "There were multiple LEARNING_* system statuses for this bid strategy during the time in question.",
            "There were multiple LIMITED_* system statuses for this bid strategy during the time in question.",
            "There were multiple MISCONFIGURED_* system statuses for this bid strategy during the time in question.",
            "There were multiple system statuses for this bid strategy during the time in question."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "LEARNING_NEW",
            "LEARNING_SETTING_CHANGE",
            "LEARNING_BUDGET_CHANGE",
            "LEARNING_COMPOSITION_CHANGE",
            "LEARNING_CONVERSION_TYPE_CHANGE",
            "LEARNING_CONVERSION_SETTING_CHANGE",
            "LIMITED_BY_CPC_BID_CEILING",
            "LIMITED_BY_CPC_BID_FLOOR",
            "LIMITED_BY_DATA",
            "LIMITED_BY_BUDGET",
            "LIMITED_BY_LOW_PRIORITY_SPEND",
            "LIMITED_BY_LOW_QUALITY",
            "LIMITED_BY_INVENTORY",
            "MISCONFIGURED_ZERO_ELIGIBILITY",
            "MISCONFIGURED_CONVERSION_TYPES",
            "MISCONFIGURED_CONVERSION_SETTINGS",
            "MISCONFIGURED_SHARED_BUDGET",
            "MISCONFIGURED_STRATEGY_TYPE",
            "PAUSED",
            "UNAVAILABLE",
            "MULTIPLE_LEARNING",
            "MULTIPLE_LIMITED",
            "MULTIPLE_MISCONFIGURED",
            "MULTIPLE"
          ]
        },
        "adServingOptimizationStatus": {
          "description": "The ad serving optimization status of the campaign.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Ad serving is optimized based on CTR for the campaign.",
            "Ad serving is optimized based on CTR * Conversion for the campaign. If the campaign is not in the conversion optimizer bidding strategy, it will default to OPTIMIZED.",
            "Ads are rotated evenly for 90 days, then optimized for clicks.",
            "Show lower performing ads more evenly with higher performing ads, and do not optimize.",
            "Ad serving optimization status is not available."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTIMIZE",
            "CONVERSION_OPTIMIZE",
            "ROTATE",
            "ROTATE_INDEFINITELY",
            "UNAVAILABLE"
          ]
        },
        "advertisingChannelType": {
          "description": "Immutable. The primary serving target for ads within the campaign. The targeting options can be refined in `network_settings`. This field is required and should not be empty when creating new campaigns. Can be set only when creating campaigns. After the campaign is created, the field can not be changed.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search Network. Includes display bundled, and Search+ campaigns.",
            "Google Display Network only.",
            "Shopping campaigns serve on the shopping property and on google.com search results.",
            "Hotel Ads campaigns.",
            "Video campaigns.",
            "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
            "Local ads campaigns.",
            "Smart campaigns.",
            "Performance Max campaigns.",
            "Local services campaigns.",
            "Travel campaigns.",
            "Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "SHOPPING",
            "HOTEL",
            "VIDEO",
            "MULTI_CHANNEL",
            "LOCAL",
            "SMART",
            "PERFORMANCE_MAX",
            "LOCAL_SERVICES",
            "TRAVEL",
            "DEMAND_GEN"
          ]
        },
        "advertisingChannelSubType": {
          "description": "Immutable. Optional refinement to `advertising_channel_type`. Must be a valid sub-type of the parent channel type. Can be set only when creating campaigns. After campaign is created, the field can not be changed.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "Mobile app campaigns for Search.",
            "Mobile app campaigns for Display.",
            "AdWords express campaigns for search.",
            "AdWords Express campaigns for display.",
            "Smart Shopping campaigns.",
            "Gmail Ad campaigns.",
            "Smart display campaigns. New campaigns of this sub type cannot be created.",
            "Video TrueView for Action campaigns.",
            "Video campaigns with non-skippable video ads.",
            "App Campaign that lets you easily promote your Android or iOS app across Google's top properties including Search, Play, YouTube, and the Google Display Network.",
            "App Campaign for engagement, focused on driving re-engagement with the app across several of Google's top properties including Search, YouTube, and the Google Display Network.",
            "Campaigns specialized for local advertising.",
            "Shopping Comparison Listing campaigns.",
            "Standard Smart campaigns.",
            "Video campaigns with sequence video ads.",
            "App Campaign for pre registration, specialized for advertising mobile app pre-registration, that targets multiple advertising channels across Google Play, YouTube and Display Network. See https://support.google.com/google-ads/answer/9441344 to learn more.",
            "Video reach campaign with Target Frequency bidding strategy.",
            "Travel Activities campaigns.",
            "YouTube Audio campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH_MOBILE_APP",
            "DISPLAY_MOBILE_APP",
            "SEARCH_EXPRESS",
            "DISPLAY_EXPRESS",
            "SHOPPING_SMART_ADS",
            "DISPLAY_GMAIL_AD",
            "DISPLAY_SMART_CAMPAIGN",
            "VIDEO_ACTION",
            "VIDEO_NON_SKIPPABLE",
            "APP_CAMPAIGN",
            "APP_CAMPAIGN_FOR_ENGAGEMENT",
            "LOCAL_CAMPAIGN",
            "SHOPPING_COMPARISON_LISTING_ADS",
            "SMART_CAMPAIGN",
            "VIDEO_SEQUENCE",
            "APP_CAMPAIGN_FOR_PRE_REGISTRATION",
            "VIDEO_REACH_TARGET_FREQUENCY",
            "TRAVEL_ACTIVITIES",
            "YOUTUBE_AUDIO"
          ]
        },
        "trackingUrlTemplate": {
          "description": "The URL template for constructing a tracking URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "The list of mappings used to substitute custom parameter tags in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "localServicesCampaignSettings": {
          "description": "The Local Services Campaign related settings.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_LocalServicesCampaignSettings"
        },
        "travelCampaignSettings": {
          "description": "Settings for Travel campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_TravelCampaignSettings"
        },
        "demandGenCampaignSettings": {
          "description": "Settings for Demand Gen campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_DemandGenCampaignSettings"
        },
        "videoCampaignSettings": {
          "description": "Settings for Video campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_VideoCampaignSettings"
        },
        "pmaxCampaignSettings": {
          "description": "Settings for Performance Max campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_PmaxCampaignSettings"
        },
        "realTimeBiddingSetting": {
          "description": "Settings for Real-Time Bidding, a feature only available for campaigns targeting the Ad Exchange network.",
          "$ref": "GoogleAdsGoogleadsV21Common__RealTimeBiddingSetting"
        },
        "networkSettings": {
          "description": "The network settings for the campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_NetworkSettings"
        },
        "hotelSetting": {
          "description": "Immutable. The hotel setting for the campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_HotelSettingInfo"
        },
        "dynamicSearchAdsSetting": {
          "description": "The setting for controlling Dynamic Search Ads (DSA).",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_DynamicSearchAdsSetting"
        },
        "shoppingSetting": {
          "description": "The setting for controlling Shopping campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_ShoppingSetting"
        },
        "targetingSetting": {
          "description": "Setting for targeting related features.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetingSetting"
        },
        "audienceSetting": {
          "description": "Immutable. Setting for audience related features.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_AudienceSetting"
        },
        "geoTargetTypeSetting": {
          "description": "The setting for ads geotargeting.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_GeoTargetTypeSetting"
        },
        "localCampaignSetting": {
          "description": "The setting for local campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_LocalCampaignSetting"
        },
        "appCampaignSetting": {
          "description": "The setting related to App Campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_AppCampaignSetting"
        },
        "labels": {
          "description": "Output only. The resource names of labels attached to this campaign.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "experimentType": {
          "description": "Output only. The type of campaign: normal, draft, or experiment.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This is a regular campaign.",
            "This is a draft version of a campaign. It has some modifications from a base campaign, but it does not serve or accrue metrics.",
            "This is an experiment version of a campaign. It has some modifications from a base campaign, and a percentage of traffic is being diverted from the BASE campaign to this experiment campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BASE",
            "DRAFT",
            "EXPERIMENT"
          ]
        },
        "baseCampaign": {
          "description": "Output only. The resource name of the base campaign of a draft or experiment campaign. For base campaigns, this is equal to `resource_name`. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "campaignBudget": {
          "description": "The resource name of the campaign budget of the campaign.",
          "type": "string"
        },
        "biddingStrategyType": {
          "description": "Output only. The type of bidding strategy. A bidding strategy can be created by setting either the bidding scheme to create a standard bidding strategy or the `bidding_strategy` field to create a portfolio bidding strategy. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
            "Enhanced CPC is a bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely.",
            "Fixed CPM is a manual bidding strategy with a fixed CPM.",
            "Used for return value only. Indicates that a campaign does not have a bidding strategy. This prevents the campaign from serving. For example, a campaign may be attached to a manager bidding strategy and the serving account is subsequently unlinked from the manager account. In this case the campaign will automatically be detached from the now inaccessible manager bidding strategy and transition to the INVALID bidding strategy type.",
            "Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action.",
            "Manual click based bidding where user pays per click.",
            "Manual impression based bidding where user pays per thousand impressions.",
            "A bidding strategy that pays a configurable amount per video view.",
            "A bidding strategy that automatically maximizes number of conversions given a daily budget.",
            "An automated bidding strategy that automatically sets bids to maximize revenue while spending your budget.",
            "Page-One Promoted bidding scheme, which sets max cpc bids to target impressions on page one or page one promoted slots on google.com. This enum value is deprecated.",
            "Percent Cpc is bidding strategy where bids are a fraction of the advertised price for some good or service.",
            "Target CPA is an automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
            "Target CPM is an automated bid strategy that sets bids to help get as many impressions as possible at the target cost per one thousand impressions (CPM) you set.",
            "Target CPV is an automated bidding strategy that sets bids to optimize performance given the average target cost per view.",
            "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
            "Target Outrank Share is an automated bidding strategy that sets bids based on the target fraction of auctions where the advertiser should outrank a specific competitor. This enum value is deprecated.",
            "Target ROAS is an automated bidding strategy that helps you maximize revenue while averaging a specific target Return On Average Spend (ROAS).",
            "Target Spend is an automated bid strategy that sets your bids to help get as many clicks as possible within your budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "COMMISSION",
            "ENHANCED_CPC",
            "FIXED_CPM",
            "INVALID",
            "MANUAL_CPA",
            "MANUAL_CPC",
            "MANUAL_CPM",
            "MANUAL_CPV",
            "MAXIMIZE_CONVERSIONS",
            "MAXIMIZE_CONVERSION_VALUE",
            "PAGE_ONE_PROMOTED",
            "PERCENT_CPC",
            "TARGET_CPA",
            "TARGET_CPM",
            "TARGET_CPV",
            "TARGET_IMPRESSION_SHARE",
            "TARGET_OUTRANK_SHARE",
            "TARGET_ROAS",
            "TARGET_SPEND"
          ]
        },
        "accessibleBiddingStrategy": {
          "description": "Output only. Resource name of AccessibleBiddingStrategy, a read-only view of the unrestricted attributes of the attached portfolio bidding strategy identified by 'bidding_strategy'. Empty, if the campaign does not use a portfolio strategy. Unrestricted strategy attributes are available to all customers with whom the strategy is shared and are read from the AccessibleBiddingStrategy resource. In contrast, restricted attributes are only available to the owner customer of the strategy and their managers. Restricted attributes can only be read from the BiddingStrategy resource.",
          "readOnly": true,
          "type": "string"
        },
        "startDate": {
          "description": "The date when campaign started in serving customer's timezone in YYYY-MM-DD format.",
          "type": "string"
        },
        "campaignGroup": {
          "description": "The resource name of the campaign group that this campaign belongs to.",
          "type": "string"
        },
        "endDate": {
          "description": "The last day of the campaign in serving customer's timezone in YYYY-MM-DD format. On create, defaults to 2037-12-30, which means the campaign will run indefinitely. To set an existing campaign to run indefinitely, set this field to 2037-12-30.",
          "type": "string"
        },
        "finalUrlSuffix": {
          "description": "Suffix used to append query parameters to landing pages that are served with parallel tracking.",
          "type": "string"
        },
        "frequencyCaps": {
          "description": "A list that limits how often each user will see this campaign's ads.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__FrequencyCapEntry"
          }
        },
        "videoBrandSafetySuitability": {
          "description": "Brand Safety setting at the individual campaign level. Allows for selecting an inventory type to show your ads on content that is the right fit for your brand. See https://support.google.com/google-ads/answer/7515513.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This option lets you show ads across all inventory on YouTube and video partners that meet our standards for monetization. This option may be an appropriate choice for brands that want maximum access to the full breadth of videos eligible for ads, including, for example, videos that have strong profanity in the context of comedy or a documentary, or excessive violence as featured in video games.",
            "This option lets you show ads across a wide range of content that's appropriate for most brands, such as popular music videos, documentaries, and movie trailers. The content you can show ads on is based on YouTube's advertiser-friendly content guidelines that take into account, for example, the strength or frequency of profanity, or the appropriateness of subject matter like sensitive events. Ads won't show, for example, on content with repeated strong profanity, strong sexual content, or graphic violence.",
            "This option lets you show ads on a reduced range of content that's appropriate for brands with particularly strict guidelines around inappropriate language and sexual suggestiveness; above and beyond what YouTube's advertiser-friendly content guidelines address. The videos accessible in this sensitive category meet heightened requirements, especially for inappropriate language and sexual suggestiveness. For example, your ads will be excluded from showing on some of YouTube's most popular music videos and other pop culture content across YouTube and Google video partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXPANDED_INVENTORY",
            "STANDARD_INVENTORY",
            "LIMITED_INVENTORY"
          ]
        },
        "vanityPharma": {
          "description": "Describes how unbranded pharma ads will be displayed.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_VanityPharma"
        },
        "selectiveOptimization": {
          "description": "Selective optimization setting for this campaign, which includes a set of conversion actions to optimize this campaign towards. This feature only applies to app campaigns that use MULTI_CHANNEL as AdvertisingChannelType and APP_CAMPAIGN or APP_CAMPAIGN_FOR_ENGAGEMENT as AdvertisingChannelSubType.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_SelectiveOptimization"
        },
        "optimizationGoalSetting": {
          "description": "Optimization goal setting for this campaign, which includes a set of optimization goal types.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_OptimizationGoalSetting"
        },
        "trackingSetting": {
          "description": "Output only. Campaign-level settings for tracking information.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_TrackingSetting"
        },
        "paymentMode": {
          "description": "Payment mode for the campaign.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Pay per interaction.",
            "Pay per conversion value. This mode is only supported by campaigns with AdvertisingChannelType.HOTEL, BiddingStrategyType.COMMISSION, and BudgetType.STANDARD.",
            "Pay per conversion. This mode is only supported by campaigns with AdvertisingChannelType.DISPLAY (excluding AdvertisingChannelSubType.DISPLAY_GMAIL), BiddingStrategyType.TARGET_CPA, and BudgetType.FIXED_CPA. The customer must also be eligible for this mode. See Customer.eligibility_failure_reasons for details.",
            "Pay per guest stay value. This mode is only supported by campaigns with AdvertisingChannelType.HOTEL, BiddingStrategyType.COMMISSION, and BudgetType.STANDARD."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLICKS",
            "CONVERSION_VALUE",
            "CONVERSIONS",
            "GUEST_STAY"
          ]
        },
        "optimizationScore": {
          "description": "Output only. Optimization score of the campaign. Optimization score is an estimate of how well a campaign is set to perform. It ranges from 0% (0.0) to 100% (1.0), with 100% indicating that the campaign is performing at full potential. This field is null for unscored campaigns. See \"About optimization score\" at https://support.google.com/google-ads/answer/9061546. This field is read-only.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "excludedParentAssetFieldTypes": {
          "description": "The asset field types that should be excluded from this campaign. Asset links with these field types will not be inherited by this campaign from the upper level.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is linked for use as a headline.",
              "The asset is linked for use as a description.",
              "The asset is linked for use as mandatory ad text.",
              "The asset is linked for use as a marketing image.",
              "The asset is linked for use as a media bundle.",
              "The asset is linked for use as a YouTube video.",
              "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
              "The asset is linked for use as a Lead Form extension.",
              "The asset is linked for use as a Promotion extension.",
              "The asset is linked for use as a Callout extension.",
              "The asset is linked for use as a Structured Snippet extension.",
              "The asset is linked for use as a Sitelink.",
              "The asset is linked for use as a Mobile App extension.",
              "The asset is linked for use as a Hotel Callout extension.",
              "The asset is linked for use as a Call extension.",
              "The asset is linked for use as a Price extension.",
              "The asset is linked for use as a long headline.",
              "The asset is linked for use as a business name.",
              "The asset is linked for use as a square marketing image.",
              "The asset is linked for use as a portrait marketing image.",
              "The asset is linked for use as a logo.",
              "The asset is linked for use as a landscape logo.",
              "The asset is linked for use as a non YouTube logo.",
              "The asset is linked for use to select a call-to-action.",
              "The asset is linked for use to select an ad image.",
              "The asset is linked for use as a business logo.",
              "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
              "The asset is linked for use as a Demand Gen carousel card.",
              "The asset is linked for use as a Business Message.",
              "The asset is linked for use as a tall portrait marketing image.",
              "The asset is linked for use as related YouTube videos."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "HEADLINE",
              "DESCRIPTION",
              "MANDATORY_AD_TEXT",
              "MARKETING_IMAGE",
              "MEDIA_BUNDLE",
              "YOUTUBE_VIDEO",
              "BOOK_ON_GOOGLE",
              "LEAD_FORM",
              "PROMOTION",
              "CALLOUT",
              "STRUCTURED_SNIPPET",
              "SITELINK",
              "MOBILE_APP",
              "HOTEL_CALLOUT",
              "CALL",
              "PRICE",
              "LONG_HEADLINE",
              "BUSINESS_NAME",
              "SQUARE_MARKETING_IMAGE",
              "PORTRAIT_MARKETING_IMAGE",
              "LOGO",
              "LANDSCAPE_LOGO",
              "VIDEO",
              "CALL_TO_ACTION_SELECTION",
              "AD_IMAGE",
              "BUSINESS_LOGO",
              "HOTEL_PROPERTY",
              "DEMAND_GEN_CAROUSEL_CARD",
              "BUSINESS_MESSAGE",
              "TALL_PORTRAIT_MARKETING_IMAGE",
              "RELATED_YOUTUBE_VIDEOS"
            ]
          }
        },
        "excludedParentAssetSetTypes": {
          "description": "The asset set types that should be excluded from this campaign. Asset set links with these types will not be inherited by this campaign from the upper level. Location group types (GMB_DYNAMIC_LOCATION_GROUP, CHAIN_DYNAMIC_LOCATION_GROUP, and STATIC_LOCATION_GROUP) are child types of LOCATION_SYNC. Therefore, if LOCATION_SYNC is set for this field, all location group asset sets are not allowed to be linked to this campaign, and all Location Extension (LE) and Affiliate Location Extensions (ALE) will not be served under this campaign. Only LOCATION_SYNC is currently supported.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Page asset set.",
              "Dynamic education asset set.",
              "Google Merchant Center asset set.",
              "Dynamic real estate asset set.",
              "Dynamic custom asset set.",
              "Dynamic hotels and rentals asset set.",
              "Dynamic flights asset set.",
              "Dynamic travel asset set.",
              "Dynamic local asset set.",
              "Dynamic jobs asset set.",
              "Location sync level asset set.",
              "Business Profile location group asset set.",
              "Chain location group asset set which can be used for both owned locations and affiliate locations.",
              "Static location group asset set which can be used for both owned locations and affiliate locations.",
              "Hotel Property asset set which is used to link a hotel property feed to Performance Max for travel goals campaigns.",
              "Travel Feed asset set type. Can represent either a Hotel feed or a Things to Do (activities) feed."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "PAGE_FEED",
              "DYNAMIC_EDUCATION",
              "MERCHANT_CENTER_FEED",
              "DYNAMIC_REAL_ESTATE",
              "DYNAMIC_CUSTOM",
              "DYNAMIC_HOTELS_AND_RENTALS",
              "DYNAMIC_FLIGHTS",
              "DYNAMIC_TRAVEL",
              "DYNAMIC_LOCAL",
              "DYNAMIC_JOBS",
              "LOCATION_SYNC",
              "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP",
              "CHAIN_DYNAMIC_LOCATION_GROUP",
              "STATIC_LOCATION_GROUP",
              "HOTEL_PROPERTY",
              "TRAVEL_FEED"
            ]
          }
        },
        "urlExpansionOptOut": {
          "description": "Represents opting out of URL expansion to more targeted URLs. If opted out (true), only the final URLs in the asset group or URLs specified in the advertiser's Google Merchant Center or business data feeds are targeted. If opted in (false), the entire domain will be targeted. This field can only be set for Performance Max campaigns, where the default value is false.",
          "type": "boolean"
        },
        "performanceMaxUpgrade": {
          "description": "Output only. Information about campaigns being upgraded to Performance Max.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_PerformanceMaxUpgrade"
        },
        "hotelPropertyAssetSet": {
          "description": "Immutable. The resource name for a set of hotel properties for Performance Max for travel goals campaigns.",
          "type": "string"
        },
        "listingType": {
          "description": "Immutable. Listing type of ads served for this campaign. Field is restricted for usage with Performance Max campaigns.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This campaign serves vehicle ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VEHICLES"
          ]
        },
        "assetAutomationSettings": {
          "description": "Contains the opt-in/out status of each AssetAutomationType. See documentation of each asset automation type enum for default opt in/out behavior.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_AssetAutomationSetting"
          }
        },
        "keywordMatchType": {
          "description": "Keyword match type of Campaign. Set to BROAD to set broad matching for all keywords in a campaign.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Campaign level broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BROAD"
          ]
        },
        "brandGuidelinesEnabled": {
          "description": "Immutable. Whether Brand Guidelines are enabled for this Campaign. Only applicable to Performance Max campaigns. If enabled, business name and logo assets must be linked as CampaignAssets instead of AssetGroupAssets. Writable only at campaign creation. Set to true to enable Brand Guidelines when creating a new Performance Max campaign. Immutable after creation. This field cannot be modified using standard update operations after the campaign has been created. For existing campaigns: To enable Brand Guidelines on a campaign after it has been created, use the CampaignService.EnablePMaxBrandGuidelines method, which is a separate operation. It is not possible to disable Brand Guidelines for an existing campaign. Incompatible with Travel Goals: This feature is not supported for Performance Max campaigns with Travel Goals. Attempting to set this field to true for a Travel Goals campaign will result in an error.",
          "type": "boolean"
        },
        "brandGuidelines": {
          "description": "These settings control how your brand appears in automatically generated assets and formats within this campaign. Note: These settings can only be used for Performance Max campaigns that have Brand Guidelines enabled.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_BrandGuidelines"
        },
        "thirdPartyIntegrationPartners": {
          "description": "Third-Party integration partners.",
          "$ref": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyIntegrationPartners"
        },
        "aiMaxSetting": {
          "description": "Settings for AI Max in search campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_AiMaxSetting"
        },
        "containsEuPoliticalAdvertising": {
          "description": "The advertiser should self-declare whether this campaign contains political advertising content targeted towards the European Union.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The campaign contains political advertising targeted towards the EU. The campaign will be restricted from serving ads in the EU.",
            "The campaign does not contain political advertising targeted towards the EU. No additional serving restrictions will apply."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONTAINS_EU_POLITICAL_ADVERTISING",
            "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING"
          ]
        },
        "biddingStrategy": {
          "description": "The resource name of the portfolio bidding strategy used by the campaign.",
          "type": "string"
        },
        "commission": {
          "description": "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
          "$ref": "GoogleAdsGoogleadsV21Common__Commission"
        },
        "manualCpa": {
          "description": "Standard Manual CPA bidding strategy. Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action. Supported only for Local Services campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ManualCpa"
        },
        "manualCpc": {
          "description": "Standard Manual CPC bidding strategy. Manual click-based bidding where user pays per click.",
          "$ref": "GoogleAdsGoogleadsV21Common__ManualCpc"
        },
        "manualCpm": {
          "description": "Standard Manual CPM bidding strategy. Manual impression-based bidding where user pays per thousand impressions.",
          "$ref": "GoogleAdsGoogleadsV21Common__ManualCpm"
        },
        "manualCpv": {
          "description": "A bidding strategy that pays a configurable amount per video view.",
          "$ref": "GoogleAdsGoogleadsV21Common__ManualCpv"
        },
        "maximizeConversions": {
          "description": "Standard Maximize Conversions bidding strategy that automatically maximizes number of conversions while spending your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__MaximizeConversions"
        },
        "maximizeConversionValue": {
          "description": "Standard Maximize Conversion Value bidding strategy that automatically sets bids to maximize revenue while spending your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__MaximizeConversionValue"
        },
        "targetCpa": {
          "description": "Standard Target CPA bidding strategy that automatically sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpa"
        },
        "targetImpressionShare": {
          "description": "Target Impression Share bidding strategy. An automated bidding strategy that sets bids to achieve a chosen percentage of impressions.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetImpressionShare"
        },
        "targetRoas": {
          "description": "Standard Target ROAS bidding strategy that automatically maximizes revenue while averaging a specific target return on ad spend (ROAS).",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRoas"
        },
        "targetSpend": {
          "description": "Standard Target Spend bidding strategy that automatically sets your bids to help get as many clicks as possible within your budget.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetSpend"
        },
        "percentCpc": {
          "description": "Standard Percent Cpc bidding strategy where bids are a fraction of the advertised price for some good or service.",
          "$ref": "GoogleAdsGoogleadsV21Common__PercentCpc"
        },
        "targetCpm": {
          "description": "A bidding strategy that automatically optimizes cost per thousand impressions.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpm"
        },
        "fixedCpm": {
          "description": "A manual bidding strategy with a fixed CPM.",
          "$ref": "GoogleAdsGoogleadsV21Common__FixedCpm"
        },
        "targetCpv": {
          "description": "An automated bidding strategy that sets bids to optimize performance given the target CPV you set.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpv"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_LocalServicesCampaignSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_LocalServicesCampaignSettings",
      "description": "Settings for LocalServicesCampaign subresource.",
      "type": "object",
      "properties": {
        "categoryBids": {
          "description": "Categorical level bids associated with MANUAL_CPA bidding strategy.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Campaign_CategoryBid"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_CategoryBid": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_CategoryBid",
      "description": "Category bids in LocalServicesReportingCampaignSettings.",
      "type": "object",
      "properties": {
        "categoryId": {
          "description": "Category for which the bid will be associated with. For example, xcat:service_area_business_plumber.",
          "type": "string"
        },
        "manualCpaBidMicros": {
          "description": "Manual CPA bid for the category. Bid must be greater than the reserve price associated for that category. Value is in micros and in the advertiser's currency.",
          "type": "string",
          "format": "int64"
        },
        "targetCpaBidMicros": {
          "description": "Target CPA bid for the category. Value is in micros and in the advertiser's currency.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_TravelCampaignSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_TravelCampaignSettings",
      "description": "Settings for Travel campaign.",
      "type": "object",
      "properties": {
        "travelAccountId": {
          "description": "Immutable. The Travel account ID associated with the Travel campaign.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_DemandGenCampaignSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_DemandGenCampaignSettings",
      "description": "Settings for Demand Gen campaign.",
      "type": "object",
      "properties": {
        "upgradedTargeting": {
          "description": "Immutable. Specifies whether this campaign uses upgraded targeting options. When this field is set to `true`, you can use location and language targeting at the ad group level as opposed to the standard campaign-level targeting. This field defaults to `true`, and can only be set when creating a campaign.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_VideoCampaignSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_VideoCampaignSettings",
      "description": "Settings for Video campaign.",
      "type": "object",
      "properties": {
        "videoAdSequence": {
          "description": "Container for video ads sequencing definition.",
          "$ref": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequence"
        },
        "videoAdInventoryControl": {
          "description": "Inventory control for video responsive ads in reach campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdInventoryControl"
        },
        "videoAdFormatControl": {
          "description": "Format-restricting control enabling usage of video responsive ads in format defined Video campaigns (for example, non-skippable).",
          "$ref": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdFormatControl"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequence": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequence",
      "description": "Container for video ads sequencing definition.",
      "type": "object",
      "properties": {
        "steps": {
          "description": "The list of sequence steps and data associated with them.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequenceStep"
          }
        },
        "minimumDuration": {
          "description": "Users are eligible to repeat sequence after this period. Defaults to WEEK if not specified.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Users are eligible to restart a sequence once they have completed the sequence and at least 7 days have passed since sequence start.",
            "Users are eligible to restart a sequence once at least 30 days have passed since sequence start. Users are eligible to start the sequence again even if they haven't completed the sequence."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEEK",
            "MONTH"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequenceStep": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdSequenceStep",
      "description": "Information about a step within a video sequence.",
      "type": "object",
      "properties": {
        "videoAdSequenceStepId": {
          "description": "The ID of this sequence step.",
          "type": "string",
          "format": "int64"
        },
        "assetId": {
          "description": "The ID of the Asset for this step. The asset must be type YOUTUBE_VIDEO.",
          "type": "string",
          "format": "int64"
        },
        "adGroupType": {
          "description": "The ad group type for this step (denoting the video format).",
          "type": "string",
          "enumDescriptions": [
            "The type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The default ad group type for Search campaigns.",
            "The default ad group type for Display campaigns.",
            "The ad group type for Shopping campaigns serving standard product ads.",
            "The default ad group type for Hotel campaigns.",
            "The type for ad groups in Smart Shopping campaigns.",
            "Short unskippable in-stream video ads.",
            "TrueView (skippable) in-stream video ads.",
            "TrueView in-display video ads.",
            "Unskippable in-stream video ads.",
            "Ad group type for Dynamic Search Ads ad groups.",
            "The type for ad groups in Shopping Comparison Listing campaigns.",
            "The ad group type for Promoted Hotel ad groups.",
            "Video responsive ad groups.",
            "Video efficient reach ad groups.",
            "Ad group type for Smart campaigns.",
            "Ad group type for Travel campaigns.",
            "Ad group type for YouTube Audio campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH_STANDARD",
            "DISPLAY_STANDARD",
            "SHOPPING_PRODUCT_ADS",
            "HOTEL_ADS",
            "SHOPPING_SMART_ADS",
            "VIDEO_BUMPER",
            "VIDEO_TRUE_VIEW_IN_STREAM",
            "VIDEO_TRUE_VIEW_IN_DISPLAY",
            "VIDEO_NON_SKIPPABLE_IN_STREAM",
            "SEARCH_DYNAMIC_ADS",
            "SHOPPING_COMPARISON_LISTING_ADS",
            "PROMOTED_HOTEL_ADS",
            "VIDEO_RESPONSIVE",
            "VIDEO_EFFICIENT_REACH",
            "SMART_CAMPAIGN_ADS",
            "TRAVEL_ADS",
            "YOUTUBE_AUDIO"
          ]
        },
        "previousStepId": {
          "description": "The ID of the previous step. This field is required for all steps except the first one. It must point to a step that appears in the step definition list before this step.",
          "type": "string",
          "format": "int64"
        },
        "previousStepInteractionType": {
          "description": "Type of interaction *on the previous step* required in order for the user to advance to this step. As with the previous step ID, it's required for every step except for the first one.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The viewer engaged with or watched at least 30 seconds of the ad (or the entire ad, if it was less than 30 seconds). Only available for campaigns using Target CPM as the bidding strategy and skippable in-stream ads as the ad format.",
            "The viewer skipped the ad. Only available for campaigns using Target CPM as the bidding strategy and skippable in-stream ads as the ad format.",
            "The ad was shown to the viewer.",
            "An ad impression that was not immediately skipped, but didn't reach the billable event either."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PAID_VIEW",
            "SKIP",
            "IMPRESSION",
            "ENGAGED_IMPRESSION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdInventoryControl": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdInventoryControl",
      "description": "For campaigns using video responsive ads inventory controls determine on which inventories the ads can be shown. This only applies for campaigns with the bidding strategies TARGET_CPM and FIXED_CPM.",
      "type": "object",
      "properties": {
        "allowInStream": {
          "description": "Determine if video responsive ads can be used for in-stream video ads.",
          "type": "boolean"
        },
        "allowInFeed": {
          "description": "Determine if video responsive ads can be used for in-feed video ads.",
          "type": "boolean"
        },
        "allowShorts": {
          "description": "Determine if video responsive ads can be used as shorts format.",
          "type": "boolean"
        },
        "allowNonSkippableInStream": {
          "description": "Determine if video responsive ads can be used for non-skippable in-stream ads. This is only available for campaigns that allow mixing of non-skippable with other formats (Video reach campaign with Target Frequency bidding strategy goal).",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdFormatControl": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_VideoAdFormatControl",
      "description": "Format-restricting control enabling usage of video responsive ads in format defined Video campaigns (for example, non-skippable).",
      "type": "object",
      "properties": {
        "formatRestriction": {
          "description": "All contained responsive ads are expected to respect this restriction.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Non-skippable in-stream video responsive ad."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NON_SKIPPABLE_IN_STREAM"
          ]
        },
        "nonSkippableInStreamRestrictions": {
          "description": "Restrictions for non-skippable format.",
          "$ref": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_NonSkippableInStreamRestrictions"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_NonSkippableInStreamRestrictions": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignVideoCampaignSettings_NonSkippableInStreamRestrictions",
      "description": "Restrictions for non-skippable format.",
      "type": "object",
      "properties": {
        "minDuration": {
          "description": "The minimum allowed duration for non-skippable ads.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates that non-skippable ads must be at least 5 seconds long.",
            "Indicates that non-skippable ads must be at least 7 seconds long.",
            "Indicates that non-skippable ads must be at least 16 seconds long.",
            "Indicates that non-skippable ads must be at least 31 seconds long."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MIN_DURATION_FIVE_SECONDS",
            "MIN_DURATION_SEVEN_SECONDS",
            "MIN_DURATION_SIXTEEN_SECONDS",
            "MIN_DURATION_THIRTY_ONE_SECONDS"
          ]
        },
        "maxDuration": {
          "description": "The maximum allowed duration for non-skippable ads.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates that non-skippable ads must be at most 15 seconds long.",
            "Indicates that non-skippable ads must be at most 30 seconds long.",
            "Indicates that non-skippable ads must be at most 60 seconds long."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MAX_DURATION_FIFTEEN_SECONDS",
            "MAX_DURATION_THIRTY_SECONDS",
            "MAX_DURATION_SIXTY_SECONDS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_PmaxCampaignSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_PmaxCampaignSettings",
      "description": "Settings for Performance Max campaigns.",
      "type": "object",
      "properties": {
        "brandTargetingOverrides": {
          "description": "Overrides of brand targeting for various ad types.",
          "$ref": "GoogleAdsGoogleadsV21Resources_CampaignPmaxCampaignSettings_BrandTargetingOverrides"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CampaignPmaxCampaignSettings_BrandTargetingOverrides": {
      "id": "GoogleAdsGoogleadsV21Resources_CampaignPmaxCampaignSettings_BrandTargetingOverrides",
      "description": "Overrides of brand targeting for various ad types.",
      "type": "object",
      "properties": {
        "ignoreExclusionsForShoppingAds": {
          "description": "If true, brand exclusions are ignored for Shopping ads.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__RealTimeBiddingSetting": {
      "id": "GoogleAdsGoogleadsV21Common__RealTimeBiddingSetting",
      "description": "Settings for Real-Time Bidding, a feature only available for campaigns targeting the Ad Exchange network.",
      "type": "object",
      "properties": {
        "optIn": {
          "description": "Whether the campaign is opted in to real-time bidding.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_NetworkSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_NetworkSettings",
      "description": "The network settings for the campaign.",
      "type": "object",
      "properties": {
        "targetGoogleSearch": {
          "description": "Whether ads will be served with google.com search results.",
          "type": "boolean"
        },
        "targetSearchNetwork": {
          "description": "Whether ads will be served on partner sites in the Google Search Network (requires `target_google_search` to also be `true`).",
          "type": "boolean"
        },
        "targetContentNetwork": {
          "description": "Whether ads will be served on specified placements in the Google Display Network. Placements are specified using the Placement criterion.",
          "type": "boolean"
        },
        "targetPartnerSearchNetwork": {
          "description": "Whether ads will be served on the Google Partner Network. This is available only to some select Google partner accounts.",
          "type": "boolean"
        },
        "targetYoutube": {
          "description": "Whether ads will be served on YouTube.",
          "type": "boolean"
        },
        "targetGoogleTvNetwork": {
          "description": "Whether ads will be served on the Google TV network.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_HotelSettingInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_HotelSettingInfo",
      "description": "Campaign-level settings for hotel ads.",
      "type": "object",
      "properties": {
        "hotelCenterId": {
          "description": "Immutable. The linked Hotel Center account.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_DynamicSearchAdsSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_DynamicSearchAdsSetting",
      "description": "The setting for controlling Dynamic Search Ads (DSA).",
      "type": "object",
      "properties": {
        "domainName": {
          "description": "Required. The Internet domain name that this setting represents, for example, \"google.com\" or \"www.google.com\".",
          "type": "string"
        },
        "languageCode": {
          "description": "Required. The language code specifying the language of the domain, for example, \"en\".",
          "type": "string"
        },
        "useSuppliedUrlsOnly": {
          "description": "Whether the campaign uses advertiser supplied URLs exclusively.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_ShoppingSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_ShoppingSetting",
      "description": "The setting for Shopping campaigns. Defines the universe of products that can be advertised by the campaign, and how this campaign interacts with other Shopping campaigns.",
      "type": "object",
      "properties": {
        "merchantId": {
          "description": "ID of the Merchant Center account. This field is required for create operations. This field is immutable for Shopping campaigns.",
          "type": "string",
          "format": "int64"
        },
        "feedLabel": {
          "description": "Feed label of products to include in the campaign. Only one of feed_label or sales_country can be set. If used instead of sales_country, the feed_label field accepts country codes in the same format for example: 'XX'. Otherwise can be any string used for feed label in Google Merchant Center.",
          "type": "string"
        },
        "campaignPriority": {
          "description": "Priority of the campaign. Campaigns with numerically higher priorities take precedence over those with lower priorities. This field is required for Shopping campaigns, with values between 0 and 2, inclusive. This field is optional for Smart Shopping campaigns, but must be equal to 3 if set.",
          "type": "integer",
          "format": "int32"
        },
        "enableLocal": {
          "description": "Whether to include local products.",
          "type": "boolean"
        },
        "useVehicleInventory": {
          "description": "Immutable. Whether to target Vehicle Listing inventory. This field is supported only in Smart Shopping Campaigns. For setting Vehicle Listing inventory in Performance Max campaigns, use `listing_type` instead.",
          "type": "boolean"
        },
        "advertisingPartnerIds": {
          "description": "The list of Google Ads accounts IDs of advertising partners cooperating within the campaign. This feature is currently available only for accounts having an advertising partner link. This feature is currently supported only for Performance Max, Shopping, Search and Demand Gen campaign types.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "disableProductFeed": {
          "description": "Disable the optional product feed. This field is currently supported only for Demand Gen campaigns. See https://support.google.com/google-ads/answer/13721750 to learn more about this feature.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_AudienceSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_AudienceSetting",
      "description": "Settings for the audience targeting.",
      "type": "object",
      "properties": {
        "useAudienceGrouped": {
          "description": "Immutable. If true, this campaign uses an Audience resource for audience targeting. If false, this campaign may use audience segment criteria instead.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_GeoTargetTypeSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_GeoTargetTypeSetting",
      "description": "Represents a collection of settings related to ads geotargeting.",
      "type": "object",
      "properties": {
        "positiveGeoTargetType": {
          "description": "The setting used for positive geotargeting in this particular campaign.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Specifies that an ad is triggered if the user is in, or shows interest in, advertiser's targeted locations.",
            "Specifies that an ad is triggered if the user searches for advertiser's targeted locations. This can only be used with Search and standard Shopping campaigns.",
            "Specifies that an ad is triggered if the user is in or regularly in advertiser's targeted locations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PRESENCE_OR_INTEREST",
            "SEARCH_INTEREST",
            "PRESENCE"
          ]
        },
        "negativeGeoTargetType": {
          "description": "The setting used for negative geotargeting in this particular campaign.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Specifies that a user is excluded from seeing the ad if they are in, or show interest in, advertiser's excluded locations.",
            "Specifies that a user is excluded from seeing the ad if they are in advertiser's excluded locations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PRESENCE_OR_INTEREST",
            "PRESENCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_LocalCampaignSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_LocalCampaignSetting",
      "description": "Campaign setting for local campaigns.",
      "type": "object",
      "properties": {
        "locationSourceType": {
          "description": "The location source type for this local campaign.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Locations associated with the customer's linked Business Profile.",
            "Affiliate (chain) store locations. For example, Best Buy store locations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_MY_BUSINESS",
            "AFFILIATE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_AppCampaignSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_AppCampaignSetting",
      "description": "Campaign-level settings for App Campaigns.",
      "type": "object",
      "properties": {
        "biddingStrategyGoalType": {
          "description": "Represents the goal which the bidding strategy of this app campaign should optimize towards.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Aim to maximize the number of app installs. The cpa bid is the target cost per install.",
            "Aim to maximize the long term number of selected in-app conversions from app installs. The cpa bid is the target cost per install.",
            "Aim to maximize the long term number of selected in-app conversions from app installs. The cpa bid is the target cost per in-app conversion. Note that the actual cpa may seem higher than the target cpa at first, since the long term conversions haven't happened yet.",
            "Aim to maximize all conversions' value, for example, install + selected in-app conversions while achieving or exceeding target return on advertising spend.",
            "Aim to maximize the pre-registration of the app.",
            "Aim to maximize installation of the app without target cost-per-install."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTIMIZE_INSTALLS_TARGET_INSTALL_COST",
            "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST",
            "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST",
            "OPTIMIZE_RETURN_ON_ADVERTISING_SPEND",
            "OPTIMIZE_PRE_REGISTRATION_CONVERSION_VOLUME",
            "OPTIMIZE_INSTALLS_WITHOUT_TARGET_INSTALL_COST"
          ]
        },
        "appId": {
          "description": "Immutable. A string that uniquely identifies a mobile application.",
          "type": "string"
        },
        "appStore": {
          "description": "Immutable. The application store that distributes this specific app.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Apple app store.",
            "Google play."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLE_APP_STORE",
            "GOOGLE_APP_STORE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FrequencyCapEntry": {
      "id": "GoogleAdsGoogleadsV21Common__FrequencyCapEntry",
      "description": "A rule specifying the maximum number of times an ad (or some set of ads) can be shown to a user over a particular time period.",
      "type": "object",
      "properties": {
        "key": {
          "description": "The key of a particular frequency cap. There can be no more than one frequency cap with the same key.",
          "$ref": "GoogleAdsGoogleadsV21Common__FrequencyCapKey"
        },
        "cap": {
          "description": "Maximum number of events allowed during the time range by this cap.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FrequencyCapKey": {
      "id": "GoogleAdsGoogleadsV21Common__FrequencyCapKey",
      "description": "A group of fields used as keys for a frequency cap. There can be no more than one frequency cap with the same key.",
      "type": "object",
      "properties": {
        "level": {
          "description": "The level on which the cap is to be applied (for example, ad group ad, ad group). The cap is applied to all the entities of this level.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The cap is applied at the ad group ad level.",
            "The cap is applied at the ad group level.",
            "The cap is applied at the campaign level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP_AD",
            "AD_GROUP",
            "CAMPAIGN"
          ]
        },
        "eventType": {
          "description": "The type of event that the cap applies to (for example, impression).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The cap applies on ad impressions.",
            "The cap applies on video ad views."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMPRESSION",
            "VIDEO_VIEW"
          ]
        },
        "timeUnit": {
          "description": "Unit of time the cap is defined at (for example, day, week).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The cap would define limit per one day.",
            "The cap would define limit per one week.",
            "The cap would define limit per one month."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DAY",
            "WEEK",
            "MONTH"
          ]
        },
        "timeLength": {
          "description": "Number of time units the cap lasts.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_VanityPharma": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_VanityPharma",
      "description": "Describes how unbranded pharma ads will be displayed.",
      "type": "object",
      "properties": {
        "vanityPharmaDisplayUrlMode": {
          "description": "The display mode for vanity pharma URLs.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Replace vanity pharma URL with manufacturer website url.",
            "Replace vanity pharma URL with description of the website."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MANUFACTURER_WEBSITE_URL",
            "WEBSITE_DESCRIPTION"
          ]
        },
        "vanityPharmaText": {
          "description": "The text that will be displayed in display URL of the text ad when website description is the selected display mode for vanity pharma URLs.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Prescription treatment website with website content in English.",
            "Prescription treatment website with website content in Spanish (Sitio de tratamientos con receta).",
            "Prescription device website with website content in English.",
            "Prescription device website with website content in Spanish (Sitio de dispositivos con receta).",
            "Medical device website with website content in English.",
            "Medical device website with website content in Spanish (Sitio de dispositivos médicos).",
            "Preventative treatment website with website content in English.",
            "Preventative treatment website with website content in Spanish (Sitio de tratamientos preventivos).",
            "Prescription contraception website with website content in English.",
            "Prescription contraception website with website content in Spanish (Sitio de anticonceptivos con receta).",
            "Prescription vaccine website with website content in English.",
            "Prescription vaccine website with website content in Spanish (Sitio de vacunas con receta)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PRESCRIPTION_TREATMENT_WEBSITE_EN",
            "PRESCRIPTION_TREATMENT_WEBSITE_ES",
            "PRESCRIPTION_DEVICE_WEBSITE_EN",
            "PRESCRIPTION_DEVICE_WEBSITE_ES",
            "MEDICAL_DEVICE_WEBSITE_EN",
            "MEDICAL_DEVICE_WEBSITE_ES",
            "PREVENTATIVE_TREATMENT_WEBSITE_EN",
            "PREVENTATIVE_TREATMENT_WEBSITE_ES",
            "PRESCRIPTION_CONTRACEPTION_WEBSITE_EN",
            "PRESCRIPTION_CONTRACEPTION_WEBSITE_ES",
            "PRESCRIPTION_VACCINE_WEBSITE_EN",
            "PRESCRIPTION_VACCINE_WEBSITE_ES"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_SelectiveOptimization": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_SelectiveOptimization",
      "description": "Selective optimization setting for this campaign, which includes a set of conversion actions to optimize this campaign towards. This feature only applies to app campaigns that use MULTI_CHANNEL as AdvertisingChannelType and APP_CAMPAIGN or APP_CAMPAIGN_FOR_ENGAGEMENT as AdvertisingChannelSubType.",
      "type": "object",
      "properties": {
        "conversionActions": {
          "description": "The selected set of resource names for conversion actions for optimizing this campaign.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_OptimizationGoalSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_OptimizationGoalSetting",
      "description": "Optimization goal setting for this campaign, which includes a set of optimization goal types.",
      "type": "object",
      "properties": {
        "optimizationGoalTypes": {
          "description": "The list of optimization goal types.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used as a return value only. Represents value unknown in this version.",
              "Optimize for call clicks. Call click conversions are times people selected 'Call' to contact a store after viewing an ad.",
              "Optimize for driving directions. Driving directions conversions are times people selected 'Get directions' to navigate to a store after viewing an ad.",
              "Optimize for pre-registration. Pre-registration conversions are the number of pre-registration signups to receive a notification when the app is released."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CALL_CLICKS",
              "DRIVING_DIRECTIONS",
              "APP_PRE_REGISTRATION"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_TrackingSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_TrackingSetting",
      "description": "Campaign-level settings for tracking information.",
      "type": "object",
      "properties": {
        "trackingUrl": {
          "description": "Output only. The url used for dynamic tracking.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_PerformanceMaxUpgrade": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_PerformanceMaxUpgrade",
      "description": "Information about a campaign being upgraded to Performance Max.",
      "type": "object",
      "properties": {
        "performanceMaxCampaign": {
          "description": "Output only. The resource name of the Performance Max campaign the campaign is upgraded to.",
          "readOnly": true,
          "type": "string"
        },
        "preUpgradeCampaign": {
          "description": "Output only. The resource name of the legacy campaign upgraded to Performance Max.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. The upgrade status of a campaign requested to be upgraded to Performance Max.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The upgrade to a Performance Max campaign is in progress.",
            "The upgrade to a Performance Max campaign is complete.",
            "The upgrade to a Performance Max campaign failed. The campaign will still serve as it was before upgrade was attempted.",
            "The campaign is eligible for upgrade to a Performance Max campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UPGRADE_IN_PROGRESS",
            "UPGRADE_COMPLETE",
            "UPGRADE_FAILED",
            "UPGRADE_ELIGIBLE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_AssetAutomationSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_AssetAutomationSetting",
      "description": "Asset automation setting contains pair of AssetAutomationType and the asset automation opt-in/out status",
      "type": "object",
      "properties": {
        "assetAutomationType": {
          "description": "The asset automation type advertiser would like to opt-in/out.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "Text asset automation includes headlines and descriptions. By default, advertisers are opted-in for Performance Max and opted-out for Search.",
            "Converts horizontal video assets to vertical orientation using content-aware technology. By default, advertisers are opted in for DemandGenVideoResponsiveAd.",
            "Shortens video assets to better capture user attention using content-aware technology. By default, advertisers are opted in for DemandGenVideoResponsiveAd.",
            "Generates a preview of the landing page shown in the engagement panel. By using this feature, you confirm that you own all legal rights to the images on the landing page used by this account (or you have permission to share the images with Google). You hereby instruct Google to publish these images on your behalf for advertising or other commercial purposes.",
            "Generates video enhancements (vertical and shorter videos) for PMax campaigns. Opted in by default.",
            "Controls automation for text assets related to Final URL expansion. This includes automatically creating dynamic landing pages from the final URL and generating text assets from the content of those landing pages. This setting only applies to Search campaigns, and advertisers are opted-out by default."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TEXT_ASSET_AUTOMATION",
            "GENERATE_VERTICAL_YOUTUBE_VIDEOS",
            "GENERATE_SHORTER_YOUTUBE_VIDEOS",
            "GENERATE_LANDING_PAGE_PREVIEW",
            "GENERATE_ENHANCED_YOUTUBE_VIDEOS",
            "FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION"
          ]
        },
        "assetAutomationStatus": {
          "description": "The opt-in/out status of asset automation type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "Opted-in will enable generating and serving an asset automation type.",
            "Opted-out will stop generating and serving an asset automation type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTED_IN",
            "OPTED_OUT"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_BrandGuidelines": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_BrandGuidelines",
      "description": "Settings that control the visual appearance of your brand in a campaign's automatically generated assets and formats. Only applicable to Performance Max campaigns.",
      "type": "object",
      "properties": {
        "mainColor": {
          "description": "The main brand color, entered as a hex code (e.g., #00ff00). You must provide the main_color if you provide an accent_color.",
          "type": "string"
        },
        "accentColor": {
          "description": "The accent brand color, entered as a hex code (e.g., #00ff00). You must provide the accent_color if you provide a main_color.",
          "type": "string"
        },
        "predefinedFontFamily": {
          "description": "The brand's font family. Must be one of the following Google Fonts (case sensitive): Open Sans, Roboto, Montserrat, Poppins, Lato, Oswald, Playfair Display, Roboto Slab.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CampaignThirdPartyIntegrationPartners": {
      "id": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyIntegrationPartners",
      "description": "Container for Campaign level third party integration partners. Next Id = 5",
      "type": "object",
      "properties": {
        "viewabilityIntegrationPartners": {
          "description": "Third party integration partners for YouTube viewability verification for this Campaign.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyViewabilityIntegrationPartner"
          }
        },
        "brandLiftIntegrationPartners": {
          "description": "Third party integration partners for Brand Lift verification for this Campaign.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandLiftIntegrationPartner"
          }
        },
        "brandSafetyIntegrationPartners": {
          "description": "Third party integration partners for brand safety verification for this Campaign.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandSafetyIntegrationPartner"
          }
        },
        "reachIntegrationPartners": {
          "description": "Third party integration partners for reach verification for this Campaign.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyReachIntegrationPartner"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CampaignThirdPartyViewabilityIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyViewabilityIntegrationPartner",
      "description": "Container for third party viewability integration data for Campaign. Next Id = 4",
      "type": "object",
      "properties": {
        "viewabilityIntegrationPartner": {
          "description": "Allowed third party integration partners for YouTube viewability verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "DoubleVerify.",
            "Integral Ad Science."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DOUBLE_VERIFY",
            "INTEGRAL_AD_SCIENCE"
          ]
        },
        "viewabilityIntegrationPartnerData": {
          "description": "Third party partner data for YouTube viewability verification. This is optional metadata for partners to join or attach data to Ads campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData"
        },
        "shareCost": {
          "description": "If true, then cost data will be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData": {
      "id": "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData",
      "description": "Contains third party measurement partner related data for video campaigns. Next Id = 3",
      "type": "object",
      "properties": {
        "clientId": {
          "description": "The client ID that allows the measurement partner to join multiple campaigns for a particular advertiser.",
          "type": "string"
        },
        "thirdPartyPlacementId": {
          "description": "The third party placement ID that maps the measurement partner data with a campaign (or a group of related campaigns) specific data.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandLiftIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandLiftIntegrationPartner",
      "description": "Container for third party Brand Lift integration data for Campaign. Next Id = 4",
      "type": "object",
      "properties": {
        "brandLiftIntegrationPartner": {
          "description": "Allowed third party integration partners for Brand Lift verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Kantar",
            "Dynata",
            "Intage",
            "Macromill"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KANTAR_MILLWARD_BROWN",
            "DYNATA",
            "INTAGE",
            "MACROMILL"
          ]
        },
        "brandLiftIntegrationPartnerData": {
          "description": "Third party partner data for YouTube Brand Lift verification. This is optional metadata for partners to join or attach data to Ads campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData"
        },
        "shareCost": {
          "description": "If true, then cost data will be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandSafetyIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyBrandSafetyIntegrationPartner",
      "description": "Container for third party brand safety integration data for Campaign. Next Id = 3",
      "type": "object",
      "properties": {
        "brandSafetyIntegrationPartner": {
          "description": "Allowed third party integration partners for brand safety verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "DoubleVerify.",
            "Integral Ad Science.",
            "Zefr."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DOUBLE_VERIFY",
            "INTEGRAL_AD_SCIENCE",
            "ZEFR"
          ]
        },
        "brandSafetyIntegrationPartnerData": {
          "description": "Third party partner data for YouTube brand safety verification. This is optional metadata for partners to join or attach data to Ads campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CampaignThirdPartyReachIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CampaignThirdPartyReachIntegrationPartner",
      "description": "Container for third party reach integration data for Campaign. Next Id = 4",
      "type": "object",
      "properties": {
        "reachIntegrationPartner": {
          "description": "Allowed third party integration partners for reach verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Nielsen.",
            "Comscore.",
            "Kantar.",
            "Video Research.",
            "Gemius.",
            "MediaScope.",
            "AudienceProject",
            "VideoAmp",
            "iSpot.tv"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NIELSEN",
            "COMSCORE",
            "KANTAR_MILLWARD_BROWN",
            "VIDEO_RESEARCH",
            "GEMIUS",
            "MEDIA_SCOPE",
            "AUDIENCE_PROJECT",
            "VIDEO_AMP",
            "ISPOT_TV"
          ]
        },
        "reachIntegrationPartnerData": {
          "description": "Third party partner data for YouTube Reach verification. This is optional metadata for partners to join or attach data to Ads campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Common__ThirdPartyIntegrationPartnerData"
        },
        "shareCost": {
          "description": "If true, then cost data will be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Campaign_AiMaxSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_Campaign_AiMaxSetting",
      "description": "Settings for AI Max in search campaigns.",
      "type": "object",
      "properties": {
        "enableAiMax": {
          "description": "Controls whether or not AI Max features are serve for this campaign. Individual AI Max features are enabled or disabled by their respective settings. But if enable_ai_max is set to false or cleared, then no AI Max features will serve for this campaign, regardless of the other settings. Search Term Matching is enabled by default when AI Max is enabled, and can be disabled at the ad group level.",
          "type": "boolean"
        },
        "bundlingRequired": {
          "description": "Output only. Indicates whether a search campaign has adopted AI Max before, and is required to have AI Max enabled to adopt campaign-level text asset automation and brand list targeting in all API versions.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search campaign is using text asset automation or brand list targeting, and AI Max is not required to be enabled to serve these features.",
            "AI Max is required to be enabled for this search campaign to serve existing text asset automation and brand list targeting, or to add new text asset automation and brand list targeting settings."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_REQUIRED",
            "REQUIRED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Commission": {
      "id": "GoogleAdsGoogleadsV21Common__Commission",
      "description": "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
      "type": "object",
      "properties": {
        "commissionRateMicros": {
          "description": "Commission rate defines the portion of the conversion value that the advertiser will be billed. A commission rate of x should be passed into this field as (x * 1,000,000). For example, 106,000 represents a commission rate of 0.106 (10.6%).",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ManualCpa": {
      "id": "GoogleAdsGoogleadsV21Common__ManualCpa",
      "description": "Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ManualCpc": {
      "id": "GoogleAdsGoogleadsV21Common__ManualCpc",
      "description": "Manual click-based bidding where user pays per click.",
      "type": "object",
      "properties": {
        "enhancedCpcEnabled": {
          "description": "Whether bids are to be enhanced based on conversion optimizer data.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ManualCpm": {
      "id": "GoogleAdsGoogleadsV21Common__ManualCpm",
      "description": "Manual impression-based bidding where user pays per thousand impressions.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__ManualCpv": {
      "id": "GoogleAdsGoogleadsV21Common__ManualCpv",
      "description": "View based bidding where user pays per video view.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Common__PercentCpc": {
      "id": "GoogleAdsGoogleadsV21Common__PercentCpc",
      "description": "A bidding strategy where bids are a fraction of the advertised price for some good or service.",
      "type": "object",
      "properties": {
        "cpcBidCeilingMicros": {
          "description": "Maximum bid limit that can be set by the bid strategy. This is an optional field entered by the advertiser and specified in local micros. Note: A zero value is interpreted in the same way as having bid_ceiling undefined.",
          "type": "string",
          "format": "int64"
        },
        "enhancedCpcEnabled": {
          "description": "Adjusts the bid for each auction upward or downward, depending on the likelihood of a conversion. Individual bids may exceed cpc_bid_ceiling_micros, but the average bid amount for a campaign should not.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpm": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpm",
      "description": "Target CPM (cost per thousand impressions) is an automated bidding strategy that sets bids to optimize performance given the target CPM you set.",
      "type": "object",
      "properties": {
        "targetFrequencyGoal": {
          "description": "Target Frequency bidding goal details.",
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpmTargetFrequencyGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpmTargetFrequencyGoal": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpmTargetFrequencyGoal",
      "description": "Target Frequency bidding goal details.",
      "type": "object",
      "properties": {
        "targetCount": {
          "description": "Target Frequency count representing how many times you want to reach a single user.",
          "type": "string",
          "format": "int64"
        },
        "timeUnit": {
          "description": "Time window expressing the period over which you want to reach the specified target_count.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Optimize bidding to reach Target Frequency in a week.",
            "Optimize bidding to reach Target Frequency in a month."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEEKLY",
            "MONTHLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FixedCpm": {
      "id": "GoogleAdsGoogleadsV21Common__FixedCpm",
      "description": "Fixed CPM (cost per thousand impression) bidding strategy. A manual bidding strategy with a fixed CPM.",
      "type": "object",
      "properties": {
        "goal": {
          "description": "Fixed CPM bidding goal. Determines the exact bidding optimization parameters.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Maximize reach, that is the number of users who saw the ads in this campaign.",
            "Target Frequency CPM bidder. Optimize bidding to reach a single user with the requested frequency."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REACH",
            "TARGET_FREQUENCY"
          ]
        },
        "targetFrequencyInfo": {
          "description": "Target frequency bidding goal details.",
          "$ref": "GoogleAdsGoogleadsV21Common__FixedCpmTargetFrequencyGoalInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FixedCpmTargetFrequencyGoalInfo": {
      "id": "GoogleAdsGoogleadsV21Common__FixedCpmTargetFrequencyGoalInfo",
      "description": "Target frequency bidding goal details for Fixed CPM bidding strategy. Only relevant if the goal of the bidding strategy is `TARGET_FREQUENCY`.",
      "type": "object",
      "properties": {
        "targetCount": {
          "description": "Target frequency count represents the number of times an advertiser wants to show the ad to target a single user.",
          "type": "string",
          "format": "int64"
        },
        "timeUnit": {
          "description": "Time window expressing the period over which you want to reach the specified target_count.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Optimize bidding to reach target frequency in 30 days."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MONTHLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpv": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpv",
      "description": "Target CPV (cost per view) bidding strategy. An automated bidding strategy that sets bids to optimize performance given the target CPV you set.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignsResponse",
      "description": "Response message for campaign mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignResult",
      "description": "The result for the campaign mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaign": {
          "description": "The mutated campaign with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Campaign"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesRequest",
      "description": "Request to enable Brand Guidelines for a Performance Max campaign.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of individual campaign operations. A maximum of 10 enable operations can be executed in a request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__EnableOperation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EnableOperation": {
      "id": "GoogleAdsGoogleadsV21Services__EnableOperation",
      "description": "A single enable operation of a campaign.",
      "type": "object",
      "properties": {
        "campaign": {
          "description": "Required. The resource name of the campaign to enable.",
          "type": "string"
        },
        "autoPopulateBrandAssets": {
          "description": "Required. The switch to automatically populate top-performing brand assets. This field is required. If true, top-performing brand assets will be automatically populated. If false, the brand_assets field is required.",
          "type": "boolean"
        },
        "brandAssets": {
          "description": "Optional. The brand assets linked to the campaign. This field is required when the value of auto_populate_brand_assets is false.",
          "$ref": "GoogleAdsGoogleadsV21Services__BrandCampaignAssets"
        },
        "finalUriDomain": {
          "description": "Optional. The domain of the final uri.",
          "type": "string"
        },
        "mainColor": {
          "description": "Optional. Hex code representation of the main brand color, for example #00ff00. main_color is required when accent color is specified.",
          "type": "string"
        },
        "accentColor": {
          "description": "Optional. Hex code representation of the accent brand color, for example #00ff00. accent_color is required when main_color is specified.",
          "type": "string"
        },
        "fontFamily": {
          "description": "Optional. The font family is specified as a string, and must be one of the following: \"Open Sans\", \"Roboto\", \"Roboto Slab\", \"Montserrat\", \"Poppins\", \"Lato\", \"Oswald\", or \"Playfair Display\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BrandCampaignAssets": {
      "id": "GoogleAdsGoogleadsV21Services__BrandCampaignAssets",
      "description": "Assets linked at the campaign level. A business_name and at least one logo_asset are required.",
      "type": "object",
      "properties": {
        "businessNameAsset": {
          "description": "Required. The resource name of the business name text asset.",
          "type": "string"
        },
        "logoAsset": {
          "description": "Required. The resource name of square logo assets.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "landscapeLogoAsset": {
          "description": "Optional. The resource name of landscape logo assets.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__EnablePMaxBrandGuidelinesResponse",
      "description": "Brand Guidelines campaign enablement response.",
      "type": "object",
      "properties": {
        "results": {
          "description": "Campaign enablement results per campaign.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__EnablementResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EnablementResult": {
      "id": "GoogleAdsGoogleadsV21Services__EnablementResult",
      "description": "A single enablement result of a campaign.",
      "type": "object",
      "properties": {
        "campaign": {
          "description": "This indicates the campaign for which enablement was tried, regardless of the outcome.",
          "type": "string"
        },
        "enablementError": {
          "description": "Details of the error when enablement fails.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsRequest",
      "description": "Request message for CampaignSharedSetService.MutateCampaignSharedSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual campaign shared sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignSharedSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignSharedSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignSharedSetOperation",
      "description": "A single operation (create, remove) on a campaign shared set.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new campaign shared set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSharedSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed campaign shared set is expected, in this format: `customers/{customer_id}/campaignSharedSets/{campaign_id}~{shared_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignSharedSet": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignSharedSet",
      "description": "CampaignSharedSets are used for managing the shared sets associated with a campaign.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the campaign shared set. Campaign shared set resource names have the form: `customers/{customer_id}/campaignSharedSets/{campaign_id}~{shared_set_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign to which the campaign shared set belongs.",
          "type": "string"
        },
        "sharedSet": {
          "description": "Immutable. The shared set associated with the campaign. This may be a negative keyword shared set of another customer. This customer should be a manager of the other customer, otherwise the campaign shared set will exist but have no serving effect. Only negative keyword shared sets can be associated with Shopping campaigns. Only negative placement shared sets can be associated with Display mobile app campaigns.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of this campaign shared set. Read only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The campaign shared set is enabled.",
            "The campaign shared set is removed and can no longer be used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetsResponse",
      "description": "Response message for a campaign shared set mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetResult",
      "description": "The result for the campaign shared set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "campaignSharedSet": {
          "description": "The mutated campaign shared set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSharedSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionActionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionActionsRequest",
      "description": "Request message for ConversionActionService.MutateConversionActions.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual conversion actions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionActionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionActionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionActionOperation",
      "description": "A single operation (create, update, remove) on a conversion action.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new conversion action.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionAction"
        },
        "update": {
          "description": "Update operation: The conversion action is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionAction"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed conversion action is expected, in this format: `customers/{customer_id}/conversionActions/{conversion_action_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionAction": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionAction",
      "description": "A conversion action.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the conversion action. Conversion action resource names have the form: `customers/{customer_id}/conversionActions/{conversion_action_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the conversion action.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the conversion action. This field is required and should not be empty when creating new conversion actions.",
          "type": "string"
        },
        "status": {
          "description": "The status of this conversion action for conversion event accrual.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversions will be recorded.",
            "Conversions will not be recorded.",
            "Conversions will not be recorded and the conversion action will not appear in the UI."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "HIDDEN"
          ]
        },
        "type": {
          "description": "Immutable. The type of this conversion action.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversions that occur when a user clicks on an ad's call extension.",
            "Conversions that occur when a user on a mobile device clicks a phone number.",
            "Conversions that occur when a user downloads a mobile app from the Google Play Store.",
            "Conversions that occur when a user makes a purchase in an app through Android billing.",
            "Call conversions that are tracked by the advertiser and uploaded.",
            "Conversions that are tracked by the advertiser and uploaded with attributed clicks.",
            "Conversions that occur on a webpage.",
            "Conversions that occur when a user calls a dynamically-generated phone number from an advertiser's website.",
            "Store Sales conversion based on first-party or third-party merchant data uploads. Only customers on the allowlist can use store sales direct upload types.",
            "Store Sales conversion based on first-party or third-party merchant data uploads and/or from in-store purchases using cards from payment networks. Only customers on the allowlist can use store sales types. Read only.",
            "Android app first open conversions tracked through Firebase.",
            "Android app in app purchase conversions tracked through Firebase.",
            "Android app custom conversions tracked through Firebase.",
            "iOS app first open conversions tracked through Firebase.",
            "iOS app in app purchase conversions tracked through Firebase.",
            "iOS app custom conversions tracked through Firebase.",
            "Android app first open conversions tracked through Third Party App Analytics.",
            "Android app in app purchase conversions tracked through Third Party App Analytics.",
            "Android app custom conversions tracked through Third Party App Analytics.",
            "iOS app first open conversions tracked through Third Party App Analytics.",
            "iOS app in app purchase conversions tracked through Third Party App Analytics.",
            "iOS app custom conversions tracked through Third Party App Analytics.",
            "Conversions that occur when a user pre-registers a mobile app from the Google Play Store. Read only.",
            "Conversions that track all Google Play downloads which aren't tracked by an app-specific type. Read only.",
            "Floodlight activity that counts the number of times that users have visited a particular webpage after seeing or clicking on one of an advertiser's ads. Read only.",
            "Floodlight activity that tracks the number of sales made or the number of items purchased. Can also capture the total value of each sale. Read only.",
            "Conversions that track local actions from Google's products and services after interacting with an ad. Read only.",
            "Conversions reported when a user submits a lead form. Read only.",
            "Deprecated: The Salesforce integration will be going away and replaced with an improved way to import your conversions from Salesforce. - see https://support.google.com/google-ads/answer/14728349",
            "Conversions imported from Search Ads 360 Floodlight data. Read only.",
            "Call conversions that occur on Smart campaign Ads without call tracking setup, using Smart campaign custom criteria. Read only.",
            "The user clicks on a call element within Google Maps. Smart campaign only. Read only.",
            "The user requests directions to a business location within Google Maps. Smart campaign only. Read only.",
            "Call conversions that occur on Smart campaign Ads with call tracking setup, using Smart campaign custom criteria. Read only.",
            "Conversions that occur when a user visits an advertiser's retail store. Read only.",
            "Conversions created from website events (such as form submissions or page loads), that don't use individually coded event snippets. Read only.",
            "Conversions that come from linked Universal Analytics goals.",
            "Conversions that come from linked Universal Analytics transactions.",
            "Conversions that come from linked Google Analytics 4 custom event conversions.",
            "Conversions that come from linked Google Analytics 4 purchase conversions."
          ],
          "enumDeprecated": [
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            true,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            false
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_CALL",
            "CLICK_TO_CALL",
            "GOOGLE_PLAY_DOWNLOAD",
            "GOOGLE_PLAY_IN_APP_PURCHASE",
            "UPLOAD_CALLS",
            "UPLOAD_CLICKS",
            "WEBPAGE",
            "WEBSITE_CALL",
            "STORE_SALES_DIRECT_UPLOAD",
            "STORE_SALES",
            "FIREBASE_ANDROID_FIRST_OPEN",
            "FIREBASE_ANDROID_IN_APP_PURCHASE",
            "FIREBASE_ANDROID_CUSTOM",
            "FIREBASE_IOS_FIRST_OPEN",
            "FIREBASE_IOS_IN_APP_PURCHASE",
            "FIREBASE_IOS_CUSTOM",
            "THIRD_PARTY_APP_ANALYTICS_ANDROID_FIRST_OPEN",
            "THIRD_PARTY_APP_ANALYTICS_ANDROID_IN_APP_PURCHASE",
            "THIRD_PARTY_APP_ANALYTICS_ANDROID_CUSTOM",
            "THIRD_PARTY_APP_ANALYTICS_IOS_FIRST_OPEN",
            "THIRD_PARTY_APP_ANALYTICS_IOS_IN_APP_PURCHASE",
            "THIRD_PARTY_APP_ANALYTICS_IOS_CUSTOM",
            "ANDROID_APP_PRE_REGISTRATION",
            "ANDROID_INSTALLS_ALL_OTHER_APPS",
            "FLOODLIGHT_ACTION",
            "FLOODLIGHT_TRANSACTION",
            "GOOGLE_HOSTED",
            "LEAD_FORM_SUBMIT",
            "SALESFORCE",
            "SEARCH_ADS_360",
            "SMART_CAMPAIGN_AD_CLICKS_TO_CALL",
            "SMART_CAMPAIGN_MAP_CLICKS_TO_CALL",
            "SMART_CAMPAIGN_MAP_DIRECTIONS",
            "SMART_CAMPAIGN_TRACKED_CALLS",
            "STORE_VISITS",
            "WEBPAGE_CODELESS",
            "UNIVERSAL_ANALYTICS_GOAL",
            "UNIVERSAL_ANALYTICS_TRANSACTION",
            "GOOGLE_ANALYTICS_4_CUSTOM",
            "GOOGLE_ANALYTICS_4_PURCHASE"
          ]
        },
        "origin": {
          "description": "Output only. The conversion origin of this conversion action.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The conversion origin has not been specified.",
            "The conversion origin is not known in this version.",
            "Conversion that occurs when a user visits a website or takes an action there after viewing an ad.",
            "Conversions reported by an offline pipeline which collects local actions from Google-hosted pages (for example, Google Maps, Google Place Page, etc) and attributes them to relevant ad events.",
            "Conversion that occurs when a user performs an action through any app platforms.",
            "Conversion that occurs when a user makes a call from ads.",
            "Conversion that occurs when a user visits or makes a purchase at a physical store.",
            "Conversion that occurs on YouTube."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "GOOGLE_HOSTED",
            "APP",
            "CALL_FROM_ADS",
            "STORE",
            "YOUTUBE_HOSTED"
          ]
        },
        "primaryForGoal": {
          "description": "If a conversion action's primary_for_goal bit is false, the conversion action is non-biddable for all campaigns regardless of their customer conversion goal or campaign conversion goal. However, custom conversion goals do not respect primary_for_goal, so if a campaign has a custom conversion goal configured with a primary_for_goal = false conversion action, that conversion action is still biddable. By default, primary_for_goal will be true if not set. In V9, primary_for_goal can only be set to false after creation through an 'update' operation because it's not declared as optional.",
          "type": "boolean"
        },
        "category": {
          "description": "The category of conversions reported for this conversion action.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Default category.",
            "User visiting a page.",
            "Purchase, sales, or \"order placed\" event.",
            "Signup user action.",
            "Software download action (as for an app).",
            "The addition of items to a shopping cart or bag on an advertiser site.",
            "When someone enters the checkout flow on an advertiser site.",
            "The start of a paid subscription for a product or service.",
            "A call to indicate interest in an advertiser's offering.",
            "A lead conversion imported from an external source into Google Ads.",
            "A submission of a form on an advertiser site indicating business interest.",
            "A booking of an appointment with an advertiser's business.",
            "A quote or price estimate request.",
            "A search for an advertiser's business location with intention to visit.",
            "A click to an advertiser's partner's site.",
            "A call, SMS, email, chat or other type of contact to an advertiser.",
            "A website engagement event such as long site time or a Google Analytics (GA) Smart Goal. Intended to be used for GA, Firebase, GA Gold goal imports.",
            "A visit to a physical store location.",
            "A sale occurring in a physical store.",
            "A lead conversion imported from an external source into Google Ads, that has been further qualified by the advertiser (marketing/sales team). In the lead-to-sale journey, advertisers get leads, then act on them by reaching out to the consumer. If the consumer is interested and may end up buying their product, the advertiser marks such leads as \"qualified leads\".",
            "A lead conversion imported from an external source into Google Ads, that has further completed a chosen stage as defined by the lead gen advertiser."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT",
            "PAGE_VIEW",
            "PURCHASE",
            "SIGNUP",
            "DOWNLOAD",
            "ADD_TO_CART",
            "BEGIN_CHECKOUT",
            "SUBSCRIBE_PAID",
            "PHONE_CALL_LEAD",
            "IMPORTED_LEAD",
            "SUBMIT_LEAD_FORM",
            "BOOK_APPOINTMENT",
            "REQUEST_QUOTE",
            "GET_DIRECTIONS",
            "OUTBOUND_CLICK",
            "CONTACT",
            "ENGAGEMENT",
            "STORE_VISIT",
            "STORE_SALE",
            "QUALIFIED_LEAD",
            "CONVERTED_LEAD"
          ]
        },
        "ownerCustomer": {
          "description": "Output only. The resource name of the conversion action owner customer, or null if this is a system-defined conversion action.",
          "readOnly": true,
          "type": "string"
        },
        "includeInConversionsMetric": {
          "description": "Whether this conversion action should be included in the \"conversions\" metric.",
          "type": "boolean"
        },
        "clickThroughLookbackWindowDays": {
          "description": "The maximum number of days that may elapse between an interaction (for example, a click) and a conversion event.",
          "type": "string",
          "format": "int64"
        },
        "viewThroughLookbackWindowDays": {
          "description": "The maximum number of days which may elapse between an impression and a conversion without an interaction.",
          "type": "string",
          "format": "int64"
        },
        "valueSettings": {
          "description": "Settings related to the value for conversion events associated with this conversion action.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionAction_ValueSettings"
        },
        "countingType": {
          "description": "How to count conversion events for the conversion action.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Count only one conversion per click.",
            "Count all conversions per click."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ONE_PER_CLICK",
            "MANY_PER_CLICK"
          ]
        },
        "attributionModelSettings": {
          "description": "Settings related to this conversion action's attribution model.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionAction_AttributionModelSettings"
        },
        "tagSnippets": {
          "description": "Output only. The snippets used for tracking conversions.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TagSnippet"
          }
        },
        "phoneCallDurationSeconds": {
          "description": "The phone call duration in seconds after which a conversion should be reported for this conversion action. The value must be between 0 and 10000, inclusive.",
          "type": "string",
          "format": "int64"
        },
        "appId": {
          "description": "App ID for an app conversion action.",
          "type": "string"
        },
        "mobileAppVendor": {
          "description": "Output only. Mobile app vendor for an app conversion action.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Mobile app vendor for Apple app store.",
            "Mobile app vendor for Google app store."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APPLE_APP_STORE",
            "GOOGLE_APP_STORE"
          ]
        },
        "firebaseSettings": {
          "description": "Output only. Firebase settings for Firebase conversion types.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionAction_FirebaseSettings"
        },
        "thirdPartyAppAnalyticsSettings": {
          "description": "Output only. Third Party App Analytics settings for third party conversion types.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionAction_ThirdPartyAppAnalyticsSettings"
        },
        "googleAnalytics4Settings": {
          "description": "Output only. Google Analytics 4 settings for Google Analytics 4 conversion types.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionAction_GoogleAnalytics4Settings"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionAction_ValueSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionAction_ValueSettings",
      "description": "Settings related to the value for conversion events associated with this conversion action.",
      "type": "object",
      "properties": {
        "defaultValue": {
          "description": "The value to use when conversion events for this conversion action are sent with an invalid, disallowed or missing value, or when this conversion action is configured to always use the default value.",
          "type": "number",
          "format": "double"
        },
        "defaultCurrencyCode": {
          "description": "The currency code to use when conversion events for this conversion action are sent with an invalid or missing currency code, or when this conversion action is configured to always use the default value.",
          "type": "string"
        },
        "alwaysUseDefaultValue": {
          "description": "Controls whether the default value and default currency code are used in place of the value and currency code specified in conversion events for this conversion action.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionAction_AttributionModelSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionAction_AttributionModelSettings",
      "description": "Settings related to this conversion action's attribution model.",
      "type": "object",
      "properties": {
        "attributionModel": {
          "description": "The attribution model type of this conversion action.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Uses external attribution.",
            "Attributes all credit for a conversion to its last click.",
            "Attributes all credit for a conversion to its first click using Google Search attribution.",
            "Attributes credit for a conversion equally across all of its clicks using Google Search attribution.",
            "Attributes exponentially more credit for a conversion to its more recent clicks using Google Search attribution (half-life is 1 week).",
            "Attributes 40% of the credit for a conversion to its first and last clicks. Remaining 20% is evenly distributed across all other clicks. This uses Google Search attribution.",
            "Flexible model that uses machine learning to determine the appropriate distribution of credit among clicks using Google Search attribution."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXTERNAL",
            "GOOGLE_ADS_LAST_CLICK",
            "GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK",
            "GOOGLE_SEARCH_ATTRIBUTION_LINEAR",
            "GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY",
            "GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED",
            "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN"
          ]
        },
        "dataDrivenModelStatus": {
          "description": "Output only. The status of the data-driven attribution model for the conversion action.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The data driven model is available.",
            "The data driven model is stale. It hasn't been updated for at least 7 days. It is still being used, but will become expired if it does not get updated for 30 days.",
            "The data driven model expired. It hasn't been updated for at least 30 days and cannot be used. Most commonly this is because there hasn't been the required number of events in a recent 30-day period.",
            "The data driven model has never been generated. Most commonly this is because there has never been the required number of events in any 30-day period."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AVAILABLE",
            "STALE",
            "EXPIRED",
            "NEVER_GENERATED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TagSnippet": {
      "id": "GoogleAdsGoogleadsV21Common__TagSnippet",
      "description": "The site tag and event snippet pair for a TrackingCodeType.",
      "type": "object",
      "properties": {
        "type": {
          "description": "The type of the generated tag snippets for tracking conversions.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The snippet that is fired as a result of a website page loading.",
            "The snippet contains a JavaScript function which fires the tag. This function is typically called from an onClick handler added to a link or button element on the page.",
            "For embedding on a mobile webpage. The snippet contains a JavaScript function which fires the tag.",
            "The snippet that is used to replace the phone number on your website with a Google forwarding number for call tracking purposes."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBPAGE",
            "WEBPAGE_ONCLICK",
            "CLICK_TO_CALL",
            "WEBSITE_CALL"
          ]
        },
        "pageFormat": {
          "description": "The format of the web page where the tracking tag and snippet will be installed, for example, HTML.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Standard HTML page format.",
            "Google AMP page format."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HTML",
            "AMP"
          ]
        },
        "globalSiteTag": {
          "description": "The site tag that adds visitors to your basic remarketing lists and sets new cookies on your domain.",
          "type": "string"
        },
        "eventSnippet": {
          "description": "The event snippet that works with the site tag to track actions that should be counted as conversions.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionAction_FirebaseSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionAction_FirebaseSettings",
      "description": "Settings related to a Firebase conversion action.",
      "type": "object",
      "properties": {
        "eventName": {
          "description": "Output only. The event name of a Firebase conversion.",
          "readOnly": true,
          "type": "string"
        },
        "projectId": {
          "description": "Output only. The Firebase project ID of the conversion.",
          "readOnly": true,
          "type": "string"
        },
        "propertyId": {
          "description": "Output only. The GA property ID of the conversion.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "propertyName": {
          "description": "Output only. The GA property name of the conversion.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionAction_ThirdPartyAppAnalyticsSettings": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionAction_ThirdPartyAppAnalyticsSettings",
      "description": "Settings related to a third party app analytics conversion action.",
      "type": "object",
      "properties": {
        "eventName": {
          "description": "Output only. The event name of a third-party app analytics conversion.",
          "readOnly": true,
          "type": "string"
        },
        "providerName": {
          "description": "Output only. Name of the third-party app analytics provider.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionAction_GoogleAnalytics4Settings": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionAction_GoogleAnalytics4Settings",
      "description": "Settings related to a Google Analytics 4 conversion action.",
      "type": "object",
      "properties": {
        "eventName": {
          "description": "Output only. The name of the GA 4 event.",
          "readOnly": true,
          "type": "string"
        },
        "propertyName": {
          "description": "Output only. The name of the GA 4 property.",
          "readOnly": true,
          "type": "string"
        },
        "propertyId": {
          "description": "Output only. The ID of the GA 4 property.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionActionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionActionsResponse",
      "description": "Response message for ConversionActionService.MutateConversionActions.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionActionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionActionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionActionResult",
      "description": "The result for the conversion action mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "conversionAction": {
          "description": "The mutated conversion action with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionAction"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesRequest",
      "description": "Request message for ConversionCustomVariableService.MutateConversionCustomVariables.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual conversion custom variables.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionCustomVariableOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionCustomVariableOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionCustomVariableOperation",
      "description": "A single operation (create, update) on a conversion custom variable.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new conversion custom variable.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable"
        },
        "update": {
          "description": "Update operation: The conversion custom variable is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable",
      "description": "A conversion custom variable See \"About custom variables for conversions\" at https://support.google.com/google-ads/answer/9964350",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the conversion custom variable. Conversion custom variable resource names have the form: `customers/{customer_id}/conversionCustomVariables/{conversion_custom_variable_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the conversion custom variable.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Required. The name of the conversion custom variable. Name should be unique. The maximum length of name is 100 characters. There should not be any extra spaces before and after.",
          "type": "string"
        },
        "tag": {
          "description": "Required. Immutable. The tag of the conversion custom variable. It is used in the event snippet and sent to Google Ads along with conversion pings. For conversion uploads in Google Ads API, the resource name of the conversion custom variable is used. Tag should be unique. The maximum size of tag is 100 bytes. There should not be any extra spaces before and after. Currently only lowercase letters, numbers and underscores are allowed in the tag.",
          "type": "string"
        },
        "status": {
          "description": "The status of the conversion custom variable for conversion event accrual.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The conversion custom variable is pending activation and will not accrue stats until set to ENABLED. This status can't be used in CREATE and UPDATE requests.",
            "The conversion custom variable is enabled and will accrue stats.",
            "The conversion custom variable is paused and will not accrue stats until set to ENABLED again."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACTIVATION_NEEDED",
            "ENABLED",
            "PAUSED"
          ]
        },
        "ownerCustomer": {
          "description": "Output only. The resource name of the customer that owns the conversion custom variable.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariablesResponse",
      "description": "Response message for ConversionCustomVariableService.MutateConversionCustomVariables.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariableResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariableResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariableResult",
      "description": "The result for the conversion custom variable mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "conversionCustomVariable": {
          "description": "The mutated conversion custom variable with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsRequest",
      "description": "Request message for ConversionGoalCampaignConfigService.MutateConversionGoalCampaignConfigs.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual conversion goal campaign config.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionGoalCampaignConfigOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionGoalCampaignConfigOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionGoalCampaignConfigOperation",
      "description": "A single operation (update) on a conversion goal campaign config.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The conversion goal campaign config is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionGoalCampaignConfig"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionGoalCampaignConfig": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionGoalCampaignConfig",
      "description": "Conversion goal settings for a Campaign.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the conversion goal campaign config. Conversion goal campaign config resource names have the form: `customers/{customer_id}/conversionGoalCampaignConfigs/{campaign_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Immutable. The campaign with which this conversion goal campaign config is associated.",
          "type": "string"
        },
        "goalConfigLevel": {
          "description": "The level of goal config the campaign is using.",
          "type": "string",
          "enumDescriptions": [
            "The goal config level has not been specified.",
            "The goal config level is not known in this version.",
            "The goal config is defined at the customer level.",
            "The goal config is defined at the campaign level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "CAMPAIGN"
          ]
        },
        "customConversionGoal": {
          "description": "The custom conversion goal the campaign is using for optimization.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigsResponse",
      "description": "Response message for a conversion goal campaign config mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigResult",
      "description": "The result for the conversion goal campaign config mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "conversionGoalCampaignConfig": {
          "description": "The mutated ConversionGoalCampaignConfig with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionGoalCampaignConfig"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesRequest",
      "description": "Request message for ConversionValueRuleService.MutateConversionValueRules.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual conversion value rules.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionValueRuleOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionValueRuleOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionValueRuleOperation",
      "description": "A single operation (create, update, remove) on a conversion value rule.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new conversion value rule.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRule"
        },
        "update": {
          "description": "Update operation: The conversion value rule is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRule"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed conversion value rule is expected, in this format: `customers/{customer_id}/conversionValueRules/{conversion_value_rule_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionValueRule": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionValueRule",
      "description": "A conversion value rule",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the conversion value rule. Conversion value rule resource names have the form: `customers/{customer_id}/conversionValueRules/{conversion_value_rule_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the conversion value rule.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "action": {
          "description": "Action applied when the rule is triggered.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAction"
        },
        "geoLocationCondition": {
          "description": "Condition for Geo location that must be satisfied for the value rule to apply.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleGeoLocationCondition"
        },
        "deviceCondition": {
          "description": "Condition for device type that must be satisfied for the value rule to apply.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleDeviceCondition"
        },
        "audienceCondition": {
          "description": "Condition for audience that must be satisfied for the value rule to apply.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAudienceCondition"
        },
        "itineraryCondition": {
          "description": "Condition for itinerary that must be satisfied for the value rule to apply.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryCondition"
        },
        "ownerCustomer": {
          "description": "Output only. The resource name of the conversion value rule's owner customer. When the value rule is inherited from a manager customer, owner_customer will be the resource name of the manager whereas the customer in the resource_name will be of the requesting serving customer. ** Read-only **",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "The status of the conversion value rule.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversion Value Rule is enabled and can be applied.",
            "Conversion Value Rule is permanently deleted and can't be applied.",
            "Conversion Value Rule is paused, but can be re-enabled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAction": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAction",
      "description": "Action applied when rule is applied.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Specifies applied operation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Add provided value to conversion value.",
            "Multiply conversion value by provided value.",
            "Set conversion value to provided value."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADD",
            "MULTIPLY",
            "SET"
          ]
        },
        "value": {
          "description": "Specifies applied value.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleGeoLocationCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleGeoLocationCondition",
      "description": "Condition on Geo dimension.",
      "type": "object",
      "properties": {
        "excludedGeoTargetConstants": {
          "description": "Geo locations that advertisers want to exclude.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "excludedGeoMatchType": {
          "description": "Excluded Geo location match type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Either Area of Interest or Location of Presence can be used to match.",
            "Only Location of Presence can be used to match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ANY",
            "LOCATION_OF_PRESENCE"
          ]
        },
        "geoTargetConstants": {
          "description": "Geo locations that advertisers want to include.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "geoMatchType": {
          "description": "Included Geo location match type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Either Area of Interest or Location of Presence can be used to match.",
            "Only Location of Presence can be used to match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ANY",
            "LOCATION_OF_PRESENCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleDeviceCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleDeviceCondition",
      "description": "Condition on Device dimension.",
      "type": "object",
      "properties": {
        "deviceTypes": {
          "description": "Value for device type condition.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Mobile device.",
              "Desktop device.",
              "Tablet device."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "MOBILE",
              "DESKTOP",
              "TABLET"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAudienceCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleAudienceCondition",
      "description": "Condition on Audience dimension.",
      "type": "object",
      "properties": {
        "userLists": {
          "description": "User Lists.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "userInterests": {
          "description": "User Interests.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryCondition": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryCondition",
      "description": "Condition on Itinerary dimension.",
      "type": "object",
      "properties": {
        "advanceBookingWindow": {
          "description": "Range for the number of days between the date of the booking and the start of the itinerary.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryAdvanceBookingWindow"
        },
        "travelLength": {
          "description": "Range for the itinerary length in number of nights.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelLength"
        },
        "travelStartDay": {
          "description": "The days of the week on which this itinerary's travel can start.",
          "$ref": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelStartDay"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryAdvanceBookingWindow": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryAdvanceBookingWindow",
      "description": "Range for the number of days between the date of the booking and the start of the itinerary.",
      "type": "object",
      "properties": {
        "minDays": {
          "description": "Minimum number of days between the date of the booking the start date.",
          "type": "integer",
          "format": "int32"
        },
        "maxDays": {
          "description": "Maximum number of days between the date of the booking the start date.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelLength": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelLength",
      "description": "Range for the itinerary length in number of nights.",
      "type": "object",
      "properties": {
        "minNights": {
          "description": "Minimum number of nights between the start date and the end date.",
          "type": "integer",
          "format": "int32"
        },
        "maxNights": {
          "description": "Maximum number of days between the start date and the end date.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelStartDay": {
      "id": "GoogleAdsGoogleadsV21Resources_ConversionValueRule_ValueRuleItineraryTravelStartDay",
      "description": "The days of the week on which an itinerary's travel can start.",
      "type": "object",
      "properties": {
        "monday": {
          "description": "The travel can start on Monday.",
          "type": "boolean"
        },
        "tuesday": {
          "description": "The travel can start on Tuesday.",
          "type": "boolean"
        },
        "wednesday": {
          "description": "The travel can start on Wednesday.",
          "type": "boolean"
        },
        "thursday": {
          "description": "The travel can start on Thursday.",
          "type": "boolean"
        },
        "friday": {
          "description": "The travel can start on Friday.",
          "type": "boolean"
        },
        "saturday": {
          "description": "The travel can start on Saturday.",
          "type": "boolean"
        },
        "sunday": {
          "description": "The travel can start on Sunday.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRulesResponse",
      "description": "Response message for ConversionValueRuleService.MutateConversionValueRules.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleResult",
      "description": "The result for the conversion value rule mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "conversionValueRule": {
          "description": "The mutated conversion value rule with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRule"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsRequest",
      "description": "Request message for ConversionValueRuleSetService.MutateConversionValueRuleSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual conversion value rule sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionValueRuleSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionValueRuleSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionValueRuleSetOperation",
      "description": "A single operation (create, update, remove) on a conversion value rule set.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new conversion value rule set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet"
        },
        "update": {
          "description": "Update operation: The conversion value rule set is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed conversion value rule set is expected, in this format: `customers/{customer_id}/conversionValueRuleSets/{conversion_value_rule_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet",
      "description": "A conversion value rule set",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the conversion value rule set. Conversion value rule set resource names have the form: `customers/{customer_id}/conversionValueRuleSets/{conversion_value_rule_set_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the conversion value rule set.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "conversionValueRules": {
          "description": "Resource names of rules within the rule set.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dimensions": {
          "description": "Defines dimensions for Value Rule conditions. The condition types of value rules within this value rule set must be of these dimensions. The first entry in this list is the primary dimension of the included value rules. When using value rule primary dimension segmentation, conversion values will be segmented into the values adjusted by value rules and the original values, if some value rules apply.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Dimension for geo location.",
              "Dimension for device type.",
              "Dimension for audience.",
              "This dimension implies the rule will always apply.",
              "Dimension for itinerary."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "GEO_LOCATION",
              "DEVICE",
              "AUDIENCE",
              "NO_CONDITION",
              "ITINERARY"
            ]
          }
        },
        "ownerCustomer": {
          "description": "Output only. The resource name of the conversion value rule set's owner customer. When the value rule set is inherited from a manager customer, owner_customer will be the resource name of the manager whereas the customer in the resource_name will be of the requesting serving customer. ** Read-only **",
          "readOnly": true,
          "type": "string"
        },
        "attachmentType": {
          "description": "Immutable. Defines the scope where the conversion value rule set is attached.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Attached to the customer.",
            "Attached to a campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "CAMPAIGN"
          ]
        },
        "campaign": {
          "description": "The resource name of the campaign when the conversion value rule set is attached to a campaign.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the conversion value rule set. ** Read-only **",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversion Value Rule Set is enabled and can be applied.",
            "Conversion Value Rule Set is permanently deleted and can't be applied.",
            "Conversion Value Rule Set is paused and won't be applied. It can be enabled again."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "conversionActionCategories": {
          "description": "Immutable. The conversion action categories of the conversion value rule set.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Default category.",
              "User visiting a page.",
              "Purchase, sales, or \"order placed\" event.",
              "Signup user action.",
              "Software download action (as for an app).",
              "The addition of items to a shopping cart or bag on an advertiser site.",
              "When someone enters the checkout flow on an advertiser site.",
              "The start of a paid subscription for a product or service.",
              "A call to indicate interest in an advertiser's offering.",
              "A lead conversion imported from an external source into Google Ads.",
              "A submission of a form on an advertiser site indicating business interest.",
              "A booking of an appointment with an advertiser's business.",
              "A quote or price estimate request.",
              "A search for an advertiser's business location with intention to visit.",
              "A click to an advertiser's partner's site.",
              "A call, SMS, email, chat or other type of contact to an advertiser.",
              "A website engagement event such as long site time or a Google Analytics (GA) Smart Goal. Intended to be used for GA, Firebase, GA Gold goal imports.",
              "A visit to a physical store location.",
              "A sale occurring in a physical store.",
              "A lead conversion imported from an external source into Google Ads, that has been further qualified by the advertiser (marketing/sales team). In the lead-to-sale journey, advertisers get leads, then act on them by reaching out to the consumer. If the consumer is interested and may end up buying their product, the advertiser marks such leads as \"qualified leads\".",
              "A lead conversion imported from an external source into Google Ads, that has further completed a chosen stage as defined by the lead gen advertiser."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "DEFAULT",
              "PAGE_VIEW",
              "PURCHASE",
              "SIGNUP",
              "DOWNLOAD",
              "ADD_TO_CART",
              "BEGIN_CHECKOUT",
              "SUBSCRIBE_PAID",
              "PHONE_CALL_LEAD",
              "IMPORTED_LEAD",
              "SUBMIT_LEAD_FORM",
              "BOOK_APPOINTMENT",
              "REQUEST_QUOTE",
              "GET_DIRECTIONS",
              "OUTBOUND_CLICK",
              "CONTACT",
              "ENGAGEMENT",
              "STORE_VISIT",
              "STORE_SALE",
              "QUALIFIED_LEAD",
              "CONVERTED_LEAD"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetsResponse",
      "description": "Response message for ConversionValueRuleSetService.MutateConversionValueRuleSets.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetResult",
      "description": "The result for the conversion value rule set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "conversionValueRuleSet": {
          "description": "The mutated conversion value rule set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsRequest",
      "description": "Request message for CustomConversionGoalService.MutateCustomConversionGoals.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual custom conversion goal.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomConversionGoalOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomConversionGoalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomConversionGoalOperation",
      "description": "A single operation (create, remove) on a custom conversion goal.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new custom conversion goal",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomConversionGoal"
        },
        "update": {
          "description": "Update operation: The custom conversion goal is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomConversionGoal"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed custom conversion goal is expected, in this format: 'customers/{customer_id}/customConversionGoals/{goal_id}'",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomConversionGoal": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomConversionGoal",
      "description": "Custom conversion goal that can make arbitrary conversion actions biddable.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the custom conversion goal. Custom conversion goal resource names have the form: `customers/{customer_id}/customConversionGoals/{goal_id}`",
          "type": "string"
        },
        "id": {
          "description": "Immutable. The ID for this custom conversion goal.",
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name for this custom conversion goal.",
          "type": "string"
        },
        "conversionActions": {
          "description": "Conversion actions that the custom conversion goal makes biddable.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "description": "The status of the custom conversion goal.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The custom conversion goal is enabled.",
            "The custom conversion goal is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalsResponse",
      "description": "Response message for a custom conversion goal mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalResult",
      "description": "The result for the custom conversion goal mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customConversionGoal": {
          "description": "The mutated CustomConversionGoal with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomConversionGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsRequest",
      "description": "Request message for CustomerAssetService.MutateCustomerAssets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customer assets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerAssetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerAssetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerAssetOperation",
      "description": "A single operation (create, update, remove) on a customer asset.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new customer asset.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAsset"
        },
        "update": {
          "description": "Update operation: The customer asset is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAsset"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed customer asset is expected, in this format: `customers/{customer_id}/customerAssets/{asset_id}~{field_type}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerAsset": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerAsset",
      "description": "A link between a customer and an asset.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer asset. CustomerAsset resource names have the form: `customers/{customer_id}/customerAssets/{asset_id}~{field_type}`",
          "type": "string"
        },
        "asset": {
          "description": "Required. Immutable. The asset which is linked to the customer.",
          "type": "string"
        },
        "fieldType": {
          "description": "Required. Immutable. Role that the asset takes for the customer link.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "source": {
          "description": "Output only. Source of the customer asset link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "status": {
          "description": "Status of the customer asset.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Asset link is enabled.",
            "Asset link has been removed.",
            "Asset link is paused."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "primaryStatus": {
          "description": "Output only. Provides the PrimaryStatus of this asset link. Primary status is meant essentially to differentiate between the plain \"status\" field, which has advertiser set values of enabled, paused, or removed. The primary status takes into account other signals (for assets its mainly policy and quality approvals) to come up with a more comprehensive status to indicate its serving state.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is eligible to serve.",
            "The user-specified asset link status is paused.",
            "The user-specified asset link status is removed.",
            "The asset may serve in the future.",
            "The asset is serving in a partial capacity.",
            "The asset is not eligible to serve."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ELIGIBLE",
            "PAUSED",
            "REMOVED",
            "PENDING",
            "LIMITED",
            "NOT_ELIGIBLE"
          ]
        },
        "primaryStatusDetails": {
          "description": "Output only. Provides the details of the primary status and its associated reasons.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetLinkPrimaryStatusDetails"
          }
        },
        "primaryStatusReasons": {
          "description": "Output only. Provides a list of reasons for why an asset is not serving or not serving at full capacity.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The asset is paused for its linked rollup level. Contributes to a PrimaryStatus of PAUSED.",
              "The asset is removed for its linked rollup level. Contributes to a PrimaryStatus of REMOVED.",
              "The asset has been marked as disapproved. Contributes to a PrimaryStatus of NOT_ELIGIBLE",
              "The asset has not completed policy review. Contributes to a PrimaryStatus of PENDING.",
              "The asset is approved with policies applied. Contributes to a PrimaryStatus of LIMITED."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "ASSET_LINK_PAUSED",
              "ASSET_LINK_REMOVED",
              "ASSET_DISAPPROVED",
              "ASSET_UNDER_REVIEW",
              "ASSET_APPROVED_LABELED"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetsResponse",
      "description": "Response message for a customer asset mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetResult",
      "description": "The result for the customer asset mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customerAsset": {
          "description": "The mutated customer asset with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAsset"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsRequest",
      "description": "Request message for CustomerConversionGoalService.MutateCustomerConversionGoals.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customer conversion goal.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerConversionGoalOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerConversionGoalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerConversionGoalOperation",
      "description": "A single operation (update) on a customer conversion goal.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The customer conversion goal is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerConversionGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerConversionGoal": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerConversionGoal",
      "description": "Biddability control for conversion actions with a matching category and origin.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer conversion goal. Customer conversion goal resource names have the form: `customers/{customer_id}/customerConversionGoals/{category}~{origin}`",
          "type": "string"
        },
        "category": {
          "description": "The conversion category of this customer conversion goal. Only conversion actions that have this category will be included in this goal.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Default category.",
            "User visiting a page.",
            "Purchase, sales, or \"order placed\" event.",
            "Signup user action.",
            "Software download action (as for an app).",
            "The addition of items to a shopping cart or bag on an advertiser site.",
            "When someone enters the checkout flow on an advertiser site.",
            "The start of a paid subscription for a product or service.",
            "A call to indicate interest in an advertiser's offering.",
            "A lead conversion imported from an external source into Google Ads.",
            "A submission of a form on an advertiser site indicating business interest.",
            "A booking of an appointment with an advertiser's business.",
            "A quote or price estimate request.",
            "A search for an advertiser's business location with intention to visit.",
            "A click to an advertiser's partner's site.",
            "A call, SMS, email, chat or other type of contact to an advertiser.",
            "A website engagement event such as long site time or a Google Analytics (GA) Smart Goal. Intended to be used for GA, Firebase, GA Gold goal imports.",
            "A visit to a physical store location.",
            "A sale occurring in a physical store.",
            "A lead conversion imported from an external source into Google Ads, that has been further qualified by the advertiser (marketing/sales team). In the lead-to-sale journey, advertisers get leads, then act on them by reaching out to the consumer. If the consumer is interested and may end up buying their product, the advertiser marks such leads as \"qualified leads\".",
            "A lead conversion imported from an external source into Google Ads, that has further completed a chosen stage as defined by the lead gen advertiser."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT",
            "PAGE_VIEW",
            "PURCHASE",
            "SIGNUP",
            "DOWNLOAD",
            "ADD_TO_CART",
            "BEGIN_CHECKOUT",
            "SUBSCRIBE_PAID",
            "PHONE_CALL_LEAD",
            "IMPORTED_LEAD",
            "SUBMIT_LEAD_FORM",
            "BOOK_APPOINTMENT",
            "REQUEST_QUOTE",
            "GET_DIRECTIONS",
            "OUTBOUND_CLICK",
            "CONTACT",
            "ENGAGEMENT",
            "STORE_VISIT",
            "STORE_SALE",
            "QUALIFIED_LEAD",
            "CONVERTED_LEAD"
          ]
        },
        "origin": {
          "description": "The conversion origin of this customer conversion goal. Only conversion actions that have this conversion origin will be included in this goal.",
          "type": "string",
          "enumDescriptions": [
            "The conversion origin has not been specified.",
            "The conversion origin is not known in this version.",
            "Conversion that occurs when a user visits a website or takes an action there after viewing an ad.",
            "Conversions reported by an offline pipeline which collects local actions from Google-hosted pages (for example, Google Maps, Google Place Page, etc) and attributes them to relevant ad events.",
            "Conversion that occurs when a user performs an action through any app platforms.",
            "Conversion that occurs when a user makes a call from ads.",
            "Conversion that occurs when a user visits or makes a purchase at a physical store.",
            "Conversion that occurs on YouTube."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "GOOGLE_HOSTED",
            "APP",
            "CALL_FROM_ADS",
            "STORE",
            "YOUTUBE_HOSTED"
          ]
        },
        "biddable": {
          "description": "The biddability of the customer conversion goal.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalsResponse",
      "description": "Response message for a customer conversion goal mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalResult",
      "description": "The result for the customer conversion goal mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersRequest",
      "description": "Request message for CustomerCustomizerService.MutateCustomerCustomizers.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customer customizers.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerCustomizerOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerCustomizerOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerCustomizerOperation",
      "description": "A single operation (create, remove) on a customizer attribute.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new customer customizer",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerCustomizer"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed customer customizer is expected, in this format: `customers/{customer_id}/customerCustomizers/{customizer_attribute_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerCustomizer": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerCustomizer",
      "description": "A customizer value for the associated CustomizerAttribute at the Customer level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer customizer. Customer customizer resource names have the form: `customers/{customer_id}/customerCustomizers/{customizer_attribute_id}`",
          "type": "string"
        },
        "customizerAttribute": {
          "description": "Required. Immutable. The customizer attribute which is linked to the customer.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the customer customizer attribute.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The customizer value is enabled.",
            "The customizer value is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "value": {
          "description": "Required. The value to associate with the customizer attribute at this level. The value must be of the type specified for the CustomizerAttribute.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomizerValue"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizersResponse",
      "description": "Response message for a customizer attribute mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizerResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizerResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizerResult",
      "description": "The result for the customizer attribute mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customerCustomizer": {
          "description": "The mutated CustomerCustomizer with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerCustomizer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsRequest",
      "description": "Request message for CustomerLabelService.MutateCustomerLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on customer-label relationships.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerLabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerLabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerLabelOperation",
      "description": "A single operation (create, remove) on a customer-label relationship.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new customer-label relationship.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerLabel"
        },
        "remove": {
          "description": "Remove operation: A resource name for the customer-label relationship being removed, in this format: `customers/{customer_id}/customerLabels/{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerLabel": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerLabel",
      "description": "Represents a relationship between a customer and a label. This customer may not have access to all the labels attached to it. Additional CustomerLabels may be returned by increasing permissions with login-customer-id.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. Customer label resource names have the form: `customers/{customer_id}/customerLabels/{label_id}`",
          "type": "string"
        },
        "customer": {
          "description": "Output only. The resource name of the customer to which the label is attached. Read only.",
          "readOnly": true,
          "type": "string"
        },
        "label": {
          "description": "Output only. The resource name of the label assigned to the customer. Note: the Customer ID portion of the label resource name is not validated when creating a new CustomerLabel.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelsResponse",
      "description": "Response message for a customer labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelResult",
      "description": "The result for a customer label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaRequest",
      "description": "Request message for CustomerNegativeCriterionService.MutateCustomerNegativeCriteria.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerNegativeCriterionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerNegativeCriterionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerNegativeCriterionOperation",
      "description": "A single operation (create or remove) on a customer level negative criterion.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new criterion.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerNegativeCriterion"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed criterion is expected, in this format: `customers/{customer_id}/customerNegativeCriteria/{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerNegativeCriterion": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerNegativeCriterion",
      "description": "A negative criterion for exclusions at the customer level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer negative criterion. Customer negative criterion resource names have the form: `customers/{customer_id}/customerNegativeCriteria/{criterion_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the criterion.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The type of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword, for example, 'mars cruise'.",
            "Placement, also known as Website, for example, 'www.flowers4sale.com'",
            "Mobile application categories to target.",
            "Mobile applications to target.",
            "Devices to target.",
            "Locations to target.",
            "Listing groups to target.",
            "Ad Schedule.",
            "Age range.",
            "Gender.",
            "Income Range.",
            "Parental status.",
            "YouTube Video.",
            "YouTube Channel.",
            "User list.",
            "Proximity.",
            "A topic target on the display network (for example, \"Pets & Animals\").",
            "Listing scope to target.",
            "Language.",
            "IpBlock.",
            "Content Label for category exclusion.",
            "Carrier.",
            "A category the user is interested in.",
            "Webpage criterion for dynamic search ads.",
            "Operating system version.",
            "App payment model.",
            "Mobile device.",
            "Custom affinity.",
            "Custom intent.",
            "Location group.",
            "Custom audience",
            "Combined audience",
            "Smart Campaign keyword theme",
            "Audience",
            "Negative Keyword List",
            "Local Services Ads Service ID.",
            "Search Theme.",
            "Brand",
            "Brand List",
            "Life Event",
            "Webpage List",
            "Video lineup",
            "Placement List"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "PLACEMENT",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "DEVICE",
            "LOCATION",
            "LISTING_GROUP",
            "AD_SCHEDULE",
            "AGE_RANGE",
            "GENDER",
            "INCOME_RANGE",
            "PARENTAL_STATUS",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "USER_LIST",
            "PROXIMITY",
            "TOPIC",
            "LISTING_SCOPE",
            "LANGUAGE",
            "IP_BLOCK",
            "CONTENT_LABEL",
            "CARRIER",
            "USER_INTEREST",
            "WEBPAGE",
            "OPERATING_SYSTEM_VERSION",
            "APP_PAYMENT_MODEL",
            "MOBILE_DEVICE",
            "CUSTOM_AFFINITY",
            "CUSTOM_INTENT",
            "LOCATION_GROUP",
            "CUSTOM_AUDIENCE",
            "COMBINED_AUDIENCE",
            "KEYWORD_THEME",
            "AUDIENCE",
            "NEGATIVE_KEYWORD_LIST",
            "LOCAL_SERVICE_ID",
            "SEARCH_THEME",
            "BRAND",
            "BRAND_LIST",
            "LIFE_EVENT",
            "WEBPAGE_LIST",
            "VIDEO_LINEUP",
            "PLACEMENT_LIST"
          ]
        },
        "contentLabel": {
          "description": "Immutable. ContentLabel.",
          "$ref": "GoogleAdsGoogleadsV21Common__ContentLabelInfo"
        },
        "mobileApplication": {
          "description": "Immutable. MobileApplication.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileApplicationInfo"
        },
        "mobileAppCategory": {
          "description": "Immutable. MobileAppCategory.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo"
        },
        "placement": {
          "description": "Immutable. Placement.",
          "$ref": "GoogleAdsGoogleadsV21Common__PlacementInfo"
        },
        "youtubeVideo": {
          "description": "Immutable. YouTube Video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo"
        },
        "youtubeChannel": {
          "description": "Immutable. YouTube Channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "negativeKeywordList": {
          "description": "Immutable. NegativeKeywordList.",
          "$ref": "GoogleAdsGoogleadsV21Common__NegativeKeywordListInfo"
        },
        "ipBlock": {
          "description": "Immutable. IPBLock",
          "$ref": "GoogleAdsGoogleadsV21Common__IpBlockInfo"
        },
        "placementList": {
          "description": "Immutable. PlacementList.",
          "$ref": "GoogleAdsGoogleadsV21Common__PlacementListInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__NegativeKeywordListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__NegativeKeywordListInfo",
      "description": "A Negative Keyword List criterion. Represents a shared set of negative keywords that can be excluded at the account-level. Only one negative keyword list criterion can be attached per account.",
      "type": "object",
      "properties": {
        "sharedSet": {
          "description": "The NegativeKeywordListInfo shared set resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PlacementListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__PlacementListInfo",
      "description": "A Placement List criterion. Represents a shared set of placements that can be excluded at the account-level.",
      "type": "object",
      "properties": {
        "sharedSet": {
          "description": "The PlacementListInfo shared set resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResponse",
      "description": "Response message for customer negative criterion mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResult",
      "description": "The result for the criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customerNegativeCriterion": {
          "description": "The mutated criterion with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerNegativeCriterion"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerRequest",
      "description": "Request message for CustomerService.MutateCustomer.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on the customer",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerOperation"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerOperation",
      "description": "A single update on a customer.",
      "type": "object",
      "properties": {
        "update": {
          "description": "Mutate operation. Only updates are supported for customer.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Customer"
        },
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Customer": {
      "id": "GoogleAdsGoogleadsV21Resources__Customer",
      "description": "A customer.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer. Customer resource names have the form: `customers/{customer_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the customer.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "descriptiveName": {
          "description": "Optional, non-unique descriptive name of the customer.",
          "type": "string"
        },
        "currencyCode": {
          "description": "Immutable. The currency in which the account operates. A subset of the currency codes from the ISO 4217 standard is supported.",
          "type": "string"
        },
        "timeZone": {
          "description": "Immutable. The local timezone ID of the customer.",
          "type": "string"
        },
        "trackingUrlTemplate": {
          "description": "The URL template for constructing a tracking URL out of parameters. Only mutable in an `update` operation.",
          "type": "string"
        },
        "finalUrlSuffix": {
          "description": "The URL template for appending params to the final URL. Only mutable in an `update` operation.",
          "type": "string"
        },
        "autoTaggingEnabled": {
          "description": "Whether auto-tagging is enabled for the customer. Only mutable in an `update` operation.",
          "type": "boolean"
        },
        "hasPartnersBadge": {
          "description": "Output only. Whether the Customer has a Partners program badge. If the Customer is not associated with the Partners program, this will be false. For more information, see https://support.google.com/partners/answer/3125774.",
          "readOnly": true,
          "type": "boolean"
        },
        "manager": {
          "description": "Output only. Whether the customer is a manager.",
          "readOnly": true,
          "type": "boolean"
        },
        "testAccount": {
          "description": "Output only. Whether the customer is a test account.",
          "readOnly": true,
          "type": "boolean"
        },
        "callReportingSetting": {
          "description": "Call reporting setting for a customer. Only mutable in an `update` operation.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CallReportingSetting"
        },
        "conversionTrackingSetting": {
          "description": "Conversion tracking setting for a customer.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionTrackingSetting"
        },
        "remarketingSetting": {
          "description": "Output only. Remarketing setting for a customer.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__RemarketingSetting"
        },
        "payPerConversionEligibilityFailureReasons": {
          "description": "Output only. Reasons why the customer is not eligible to use PaymentMode.CONVERSIONS. If the list is empty, the customer is eligible. This field is read-only.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Customer does not have enough conversions.",
              "Customer's conversion lag is too high.",
              "Customer uses shared budgets.",
              "Customer has conversions with ConversionActionType.UPLOAD_CLICKS.",
              "Customer's average daily spend is too high.",
              "Customer's eligibility has not yet been calculated by the Google Ads backend. Check back soon.",
              "Customer is not eligible due to other reasons."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "NOT_ENOUGH_CONVERSIONS",
              "CONVERSION_LAG_TOO_HIGH",
              "HAS_CAMPAIGN_WITH_SHARED_BUDGET",
              "HAS_UPLOAD_CLICKS_CONVERSION",
              "AVERAGE_DAILY_SPEND_TOO_HIGH",
              "ANALYSIS_NOT_COMPLETE",
              "OTHER"
            ]
          }
        },
        "optimizationScore": {
          "description": "Output only. Optimization score of the customer. Optimization score is an estimate of how well a customer's campaigns are set to perform. It ranges from 0% (0.0) to 100% (1.0). This field is null for all manager customers, and for unscored non-manager customers. See \"About optimization score\" at https://support.google.com/google-ads/answer/9061546. This field is read-only.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "optimizationScoreWeight": {
          "description": "Output only. Optimization score weight of the customer. Optimization score weight can be used to compare/aggregate optimization scores across multiple non-manager customers. The aggregate optimization score of a manager is computed as the sum over all of their customers of `Customer.optimization_score * Customer.optimization_score_weight`. This field is 0 for all manager customers, and for unscored non-manager customers. This field is read-only.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "status": {
          "description": "Output only. The status of the customer.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates an active account able to serve ads.",
            "Indicates a canceled account unable to serve ads. Can be reactivated by an admin user.",
            "Indicates a suspended account unable to serve ads. May only be activated by Google support.",
            "Indicates a closed account unable to serve ads. Test account will also have CLOSED status. Status is permanent and may not be reopened."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "CANCELED",
            "SUSPENDED",
            "CLOSED"
          ]
        },
        "locationAssetAutoMigrationDone": {
          "description": "Output only. True if feed based location has been migrated to asset based location.",
          "readOnly": true,
          "type": "boolean"
        },
        "imageAssetAutoMigrationDone": {
          "description": "Output only. True if feed based image has been migrated to asset based image.",
          "readOnly": true,
          "type": "boolean"
        },
        "locationAssetAutoMigrationDoneDateTime": {
          "description": "Output only. Timestamp of migration from feed based location to asset base location in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "imageAssetAutoMigrationDoneDateTime": {
          "description": "Output only. Timestamp of migration from feed based image to asset base image in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "customerAgreementSetting": {
          "description": "Output only. Customer Agreement Setting for a customer.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAgreementSetting"
        },
        "localServicesSettings": {
          "description": "Output only. Settings for Local Services customer.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__LocalServicesSettings"
        },
        "videoBrandSafetySuitability": {
          "description": "Output only. Brand Safety setting at the account level. Allows for selecting an inventory type to show your ads on content that is the right fit for your brand. See https://support.google.com/google-ads/answer/7515513.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This option lets you show ads across all inventory on YouTube and video partners that meet our standards for monetization. This option may be an appropriate choice for brands that want maximum access to the full breadth of videos eligible for ads, including, for example, videos that have strong profanity in the context of comedy or a documentary, or excessive violence as featured in video games.",
            "This option lets you show ads across a wide range of content that's appropriate for most brands, such as popular music videos, documentaries, and movie trailers. The content you can show ads on is based on YouTube's advertiser-friendly content guidelines that take into account, for example, the strength or frequency of profanity, or the appropriateness of subject matter like sensitive events. Ads won't show, for example, on content with repeated strong profanity, strong sexual content, or graphic violence.",
            "This option lets you show ads on a reduced range of content that's appropriate for brands with particularly strict guidelines around inappropriate language and sexual suggestiveness; above and beyond what YouTube's advertiser-friendly content guidelines address. The videos accessible in this sensitive category meet heightened requirements, especially for inappropriate language and sexual suggestiveness. For example, your ads will be excluded from showing on some of YouTube's most popular music videos and other pop culture content across YouTube and Google video partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXPANDED_INVENTORY",
            "STANDARD_INVENTORY",
            "LIMITED_INVENTORY"
          ]
        },
        "videoCustomer": {
          "description": "Video specific information about a Customer.",
          "$ref": "GoogleAdsGoogleadsV21Resources__VideoCustomer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CallReportingSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__CallReportingSetting",
      "description": "Call reporting setting for a customer. Only mutable in an `update` operation.",
      "type": "object",
      "properties": {
        "callReportingEnabled": {
          "description": "Enable reporting of phone call events by redirecting them through Google System.",
          "type": "boolean"
        },
        "callConversionReportingEnabled": {
          "description": "Whether to enable call conversion reporting.",
          "type": "boolean"
        },
        "callConversionAction": {
          "description": "Customer-level call conversion action to attribute a call conversion to. If not set a default conversion action is used. Only in effect when call_conversion_reporting_enabled is set to true.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ConversionTrackingSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__ConversionTrackingSetting",
      "description": "A collection of customer-wide settings related to Google Ads Conversion Tracking.",
      "type": "object",
      "properties": {
        "conversionTrackingId": {
          "description": "Output only. The conversion tracking id used for this account. This id doesn't indicate whether the customer uses conversion tracking (conversion_tracking_status does). This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "crossAccountConversionTrackingId": {
          "description": "Output only. The conversion tracking id of the customer's manager. This is set when the customer is opted into cross account conversion tracking, and it overrides conversion_tracking_id. This field can only be managed through the Google Ads UI. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "acceptedCustomerDataTerms": {
          "description": "Output only. Whether the customer has accepted customer data terms. If using cross-account conversion tracking, this value is inherited from the manager. This field is read-only. For more information, see https://support.google.com/adspolicy/answer/7475709.",
          "readOnly": true,
          "type": "boolean"
        },
        "conversionTrackingStatus": {
          "description": "Output only. Conversion tracking status. It indicates whether the customer is using conversion tracking, and who is the conversion tracking owner of this customer. If this customer is using cross-account conversion tracking, the value returned will differ based on the `login-customer-id` of the request.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Customer does not use any conversion tracking.",
            "The conversion actions are created and managed by this customer.",
            "The conversion actions are created and managed by the manager specified in the request's `login-customer-id`.",
            "The conversion actions are created and managed by a manager different from the customer or manager specified in the request's `login-customer-id`."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_CONVERSION_TRACKED",
            "CONVERSION_TRACKING_MANAGED_BY_SELF",
            "CONVERSION_TRACKING_MANAGED_BY_THIS_MANAGER",
            "CONVERSION_TRACKING_MANAGED_BY_ANOTHER_MANAGER"
          ]
        },
        "enhancedConversionsForLeadsEnabled": {
          "description": "Output only. Whether the customer is opted-in for enhanced conversions for leads. If using cross-account conversion tracking, this value is inherited from the manager. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "googleAdsConversionCustomer": {
          "description": "The resource name of the customer where conversions are created and managed. This field is read-only.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__RemarketingSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__RemarketingSetting",
      "description": "Remarketing setting for a customer.",
      "type": "object",
      "properties": {
        "googleGlobalSiteTag": {
          "description": "Output only. The Google tag.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerAgreementSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerAgreementSetting",
      "description": "Customer Agreement Setting for a customer.",
      "type": "object",
      "properties": {
        "acceptedLeadFormTerms": {
          "description": "Output only. Whether the customer has accepted lead form term of service.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocalServicesSettings": {
      "id": "GoogleAdsGoogleadsV21Resources__LocalServicesSettings",
      "description": "Settings for Local Services customer.",
      "type": "object",
      "properties": {
        "granularLicenseStatuses": {
          "description": "Output only. A read-only list of geo vertical level license statuses.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__GranularLicenseStatus"
          }
        },
        "granularInsuranceStatuses": {
          "description": "Output only. A read-only list of geo vertical level insurance statuses.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__GranularInsuranceStatus"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GranularLicenseStatus": {
      "id": "GoogleAdsGoogleadsV21Resources__GranularLicenseStatus",
      "description": "License status at geo + vertical level.",
      "type": "object",
      "properties": {
        "geoCriterionId": {
          "description": "Output only. Geotarget criterion ID associated with the status. Can be on country or state/province geo level, depending on requirements and location. See https://developers.google.com/google-ads/api/data/geotargets for more information.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "categoryId": {
          "description": "Output only. Service category associated with the status. For example, xcat:service_area_business_plumber. For more details see: https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids",
          "readOnly": true,
          "type": "string"
        },
        "verificationStatus": {
          "description": "Output only. Granular license status, per geo + vertical.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Unknown verification status.",
            "Verification has started, but has not finished.",
            "Verification has failed.",
            "Verification has passed.",
            "Verification is not applicable.",
            "Verification is required but pending submission.",
            "Not all required verification has been submitted.",
            "Verification needs review by Local Services Ads Ops Specialist."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEEDS_REVIEW",
            "FAILED",
            "PASSED",
            "NOT_APPLICABLE",
            "NO_SUBMISSION",
            "PARTIAL_SUBMISSION",
            "PENDING_ESCALATION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GranularInsuranceStatus": {
      "id": "GoogleAdsGoogleadsV21Resources__GranularInsuranceStatus",
      "description": "Insurance status at geo + vertical level.",
      "type": "object",
      "properties": {
        "geoCriterionId": {
          "description": "Output only. Geotarget criterion ID associated with the status. Can be on country or state/province geo level, depending on requirements and location. See https://developers.google.com/google-ads/api/data/geotargets for more information.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "categoryId": {
          "description": "Output only. Service category associated with the status. For example, xcat:service_area_business_plumber. For more details see: https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids",
          "readOnly": true,
          "type": "string"
        },
        "verificationStatus": {
          "description": "Output only. Granular insurance status, per geo + vertical.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Unknown verification status.",
            "Verification has started, but has not finished.",
            "Verification has failed.",
            "Verification has passed.",
            "Verification is not applicable.",
            "Verification is required but pending submission.",
            "Not all required verification has been submitted.",
            "Verification needs review by Local Services Ads Ops Specialist."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEEDS_REVIEW",
            "FAILED",
            "PASSED",
            "NOT_APPLICABLE",
            "NO_SUBMISSION",
            "PARTIAL_SUBMISSION",
            "PENDING_ESCALATION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__VideoCustomer": {
      "id": "GoogleAdsGoogleadsV21Resources__VideoCustomer",
      "description": "Video specific information about a Customer.",
      "type": "object",
      "properties": {
        "thirdPartyIntegrationPartners": {
          "description": "Third Party integration partners.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyIntegrationPartners"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerThirdPartyIntegrationPartners": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyIntegrationPartners",
      "description": "Container for Customer level third party integration partners. Next Id = 5",
      "type": "object",
      "properties": {
        "viewabilityIntegrationPartners": {
          "description": "Allowed third party integration partners for YouTube viewability verification.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyViewabilityIntegrationPartner"
          }
        },
        "brandLiftIntegrationPartners": {
          "description": "Allowed third party integration partners for Brand Lift verification.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandLiftIntegrationPartner"
          }
        },
        "brandSafetyIntegrationPartners": {
          "description": "Allowed third party integration partners for brand safety verification.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandSafetyIntegrationPartner"
          }
        },
        "reachIntegrationPartners": {
          "description": "Allowed third party integration partners for reach verification.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyReachIntegrationPartner"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerThirdPartyViewabilityIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyViewabilityIntegrationPartner",
      "description": "Container for third party viewability integration data for Customer. Next Id = 3",
      "type": "object",
      "properties": {
        "viewabilityIntegrationPartner": {
          "description": "Allowed third party integration partners for YouTube viewability verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "DoubleVerify.",
            "Integral Ad Science."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DOUBLE_VERIFY",
            "INTEGRAL_AD_SCIENCE"
          ]
        },
        "allowShareCost": {
          "description": "If true, cost data can be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandLiftIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandLiftIntegrationPartner",
      "description": "Container for third party Brand Lift integration data for Customer. Next Id = 3",
      "type": "object",
      "properties": {
        "brandLiftIntegrationPartner": {
          "description": "Allowed Third Party integration partners for Brand Lift verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Kantar",
            "Dynata",
            "Intage",
            "Macromill"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KANTAR_MILLWARD_BROWN",
            "DYNATA",
            "INTAGE",
            "MACROMILL"
          ]
        },
        "allowShareCost": {
          "description": "If true, cost data can be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandSafetyIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyBrandSafetyIntegrationPartner",
      "description": "Container for third party brand safety integration data for Customer. Next Id = 2",
      "type": "object",
      "properties": {
        "brandSafetyIntegrationPartner": {
          "description": "Allowed third party integration partners for brand safety verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "DoubleVerify.",
            "Integral Ad Science.",
            "Zefr."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DOUBLE_VERIFY",
            "INTEGRAL_AD_SCIENCE",
            "ZEFR"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerThirdPartyReachIntegrationPartner": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerThirdPartyReachIntegrationPartner",
      "description": "Container for third party reach integration data for Customer. Next Id = 3",
      "type": "object",
      "properties": {
        "reachIntegrationPartner": {
          "description": "Allowed Third Party integration partners for reach verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Nielsen.",
            "Comscore.",
            "Kantar.",
            "Video Research.",
            "Gemius.",
            "MediaScope.",
            "AudienceProject",
            "VideoAmp",
            "iSpot.tv"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NIELSEN",
            "COMSCORE",
            "KANTAR_MILLWARD_BROWN",
            "VIDEO_RESEARCH",
            "GEMIUS",
            "MEDIA_SCOPE",
            "AUDIENCE_PROJECT",
            "VIDEO_AMP",
            "ISPOT_TV"
          ]
        },
        "allowShareCost": {
          "description": "If true, cost data can be shared with this vendor.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerResponse",
      "description": "Response message for customer mutate.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerResult",
      "description": "The result for the customer mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customer": {
          "description": "The mutated customer with only mutable fields after mutate. The fields will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Customer"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListAccessibleCustomersResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListAccessibleCustomersResponse",
      "description": "Response message for CustomerService.ListAccessibleCustomers.",
      "type": "object",
      "properties": {
        "resourceNames": {
          "description": "Resource name of customers directly accessible by the user authenticating the call.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateCustomerClientRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateCustomerClientRequest",
      "description": "Request message for CustomerService.CreateCustomerClient.",
      "type": "object",
      "properties": {
        "customerClient": {
          "description": "Required. The new client customer to create. The resource name on this customer will be ignored.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Customer"
        },
        "emailAddress": {
          "description": "Email address of the user who should be invited on the created client customer. Accessible only to customers on the allow-list.",
          "type": "string"
        },
        "accessRole": {
          "description": "The proposed role of user on the created client customer. Accessible only to customers on the allow-list.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Owns its account and can control the addition of other users.",
            "Can modify campaigns, but can't affect other users.",
            "Can view campaigns and account changes, but cannot make edits.",
            "Role for \\\"email only\\\" access. Represents an email recipient rather than a true User entity."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADMIN",
            "STANDARD",
            "READ_ONLY",
            "EMAIL_ONLY"
          ]
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateCustomerClientResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateCustomerClientResponse",
      "description": "Response message for CreateCustomerClient mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name of the newly created customer. Customer resource names have the form: `customers/{customer_id}`.",
          "type": "string"
        },
        "invitationLink": {
          "description": "Link for inviting user to access the created customer. Accessible to allowlisted customers only.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesRequest",
      "description": "Request message for CustomizerAttributeService.MutateCustomizerAttributes.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customizer attributes.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomizerAttributeOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomizerAttributeOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomizerAttributeOperation",
      "description": "A single operation (create, remove) on a customizer attribute.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new customizer attribute",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomizerAttribute"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed customizer attribute is expected, in this format: `customers/{customer_id}/customizerAttributes/{customizer_attribute_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomizerAttribute": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomizerAttribute",
      "description": "A customizer attribute. Use CustomerCustomizer, CampaignCustomizer, AdGroupCustomizer, or AdGroupCriterionCustomizer to associate a customizer attribute and set its value at the customer, campaign, ad group, or ad group criterion level, respectively.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customizer attribute. Customizer Attribute resource names have the form: `customers/{customer_id}/customizerAttributes/{customizer_attribute_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the customizer attribute.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Required. Immutable. Name of the customizer attribute. Required. It must have a minimum length of 1 and maximum length of 40. Name of an enabled customizer attribute must be unique (case insensitive).",
          "type": "string"
        },
        "type": {
          "description": "Immutable. The type of the customizer attribute.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "Text customizer.",
            "Number customizer.",
            "Price customizer consisting of a number and a currency.",
            "Percentage customizer consisting of a number and a '%'."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TEXT",
            "NUMBER",
            "PRICE",
            "PERCENT"
          ]
        },
        "status": {
          "description": "Output only. The status of the customizer attribute.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version.",
            "The customizer attribute is enabled.",
            "The customizer attribute is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributesResponse",
      "description": "Response message for a customizer attribute mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributeResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributeResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributeResult",
      "description": "The result for the customizer attribute mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customizerAttribute": {
          "description": "The mutated CustomizerAttribute with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomizerAttribute"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentArmsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentArmsRequest",
      "description": "Request message for ExperimentArmService.MutateExperimentArms.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual experiment arm.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ExperimentArmOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ExperimentArmOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ExperimentArmOperation",
      "description": "A single operation on an experiment arm.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation",
          "$ref": "GoogleAdsGoogleadsV21Resources__ExperimentArm"
        },
        "update": {
          "description": "Update operation: The experiment arm is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ExperimentArm"
        },
        "remove": {
          "description": "Remove operation: The experiment arm is expected to have a valid resource name, in this format: `customers/{customer_id}/experiments/{campaign_experiment_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ExperimentArm": {
      "id": "GoogleAdsGoogleadsV21Resources__ExperimentArm",
      "description": "A Google ads experiment for users to experiment changes on multiple campaigns, compare the performance, and apply the effective changes.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the experiment arm. Experiment arm resource names have the form: `customers/{customer_id}/experimentArms/{TrialArm.trial_id}~{TrialArm.trial_arm_id}`",
          "type": "string"
        },
        "experiment": {
          "description": "Immutable. The experiment to which the ExperimentArm belongs.",
          "type": "string"
        },
        "name": {
          "description": "Required. The name of the experiment arm. It must have a minimum length of 1 and maximum length of 1024. It must be unique under an experiment.",
          "type": "string"
        },
        "control": {
          "description": "Whether this arm is a control arm. A control arm is the arm against which the other arms are compared.",
          "type": "boolean"
        },
        "trafficSplit": {
          "description": "Traffic split of the trial arm. The value should be between 1 and 100 and must total 100 between the two trial arms.",
          "type": "string",
          "format": "int64"
        },
        "campaigns": {
          "description": "List of campaigns in the trial arm. The max length is one.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "inDesignCampaigns": {
          "description": "Output only. The in design campaigns in the treatment experiment arm.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentArmsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentArmsResponse",
      "description": "Response message for experiment arm mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentArmResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentArmResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentArmResult",
      "description": "The result for the experiment arm mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "experimentArm": {
          "description": "The mutated experiment arm with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__ExperimentArm"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentsRequest",
      "description": "Request message for ExperimentService.MutateExperiments.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual experiments.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ExperimentOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ExperimentOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ExperimentOperation",
      "description": "A single operation on an experiment.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation",
          "$ref": "GoogleAdsGoogleadsV21Resources__Experiment"
        },
        "update": {
          "description": "Update operation: The experiment is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Experiment"
        },
        "remove": {
          "description": "Remove operation: The experiment is expected to have a valid resource name, in this format: `customers/{customer_id}/experiments/{campaign_experiment_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Experiment": {
      "id": "GoogleAdsGoogleadsV21Resources__Experiment",
      "description": "A Google ads experiment for users to experiment changes on multiple campaigns, compare the performance, and apply the effective changes.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the experiment. Experiment resource names have the form: `customers/{customer_id}/experiments/{experiment_id}`",
          "type": "string"
        },
        "experimentId": {
          "description": "Output only. The ID of the experiment. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Required. The name of the experiment. It must have a minimum length of 1 and maximum length of 1024. It must be unique under a customer.",
          "type": "string"
        },
        "description": {
          "description": "The description of the experiment. It must have a minimum length of 1 and maximum length of 2048.",
          "type": "string"
        },
        "suffix": {
          "description": "For system managed experiments, the advertiser must provide a suffix during construction, in the setup stage before moving to initiated. The suffix will be appended to the in-design and experiment campaign names so that the name is base campaign name + suffix.",
          "type": "string"
        },
        "type": {
          "description": "Required. The product/feature that uses this experiment.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "This is a DISPLAY_AND_VIDEO_360 experiment.",
            "This is an ad variation experiment.",
            "A custom experiment consisting of Video campaigns.",
            "A custom experiment consisting of display campaigns.",
            "A custom experiment consisting of search campaigns.",
            "An experiment that compares bidding strategies for display campaigns.",
            "An experiment that compares bidding strategies for search campaigns.\"",
            "An experiment that compares bidding strategies for shopping campaigns.",
            "DEPRECATED. A smart matching experiment with search campaigns.",
            "A custom experiment consisting of hotel campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISPLAY_AND_VIDEO_360",
            "AD_VARIATION",
            "YOUTUBE_CUSTOM",
            "DISPLAY_CUSTOM",
            "SEARCH_CUSTOM",
            "DISPLAY_AUTOMATED_BIDDING_STRATEGY",
            "SEARCH_AUTOMATED_BIDDING_STRATEGY",
            "SHOPPING_AUTOMATED_BIDDING_STRATEGY",
            "SMART_MATCHING",
            "HOTEL_CUSTOM"
          ]
        },
        "status": {
          "description": "The Advertiser-chosen status of this experiment.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The experiment is enabled.",
            "The experiment has been removed.",
            "The experiment has been halted. This status can be set from ENABLED status through API.",
            "The experiment will be promoted out of experimental status.",
            "Initial status of the experiment.",
            "The experiment's campaigns are pending materialization. This status can be set from SETUP status through API.",
            "The experiment has been graduated."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "HALTED",
            "PROMOTED",
            "SETUP",
            "INITIATED",
            "GRADUATED"
          ]
        },
        "startDate": {
          "description": "Date when the experiment starts. By default, the experiment starts now or on the campaign's start date, whichever is later. If this field is set, then the experiment starts at the beginning of the specified date in the customer's time zone. Format: YYYY-MM-DD Example: 2019-03-14",
          "type": "string"
        },
        "endDate": {
          "description": "Date when the experiment ends. By default, the experiment ends on the campaign's end date. If this field is set, then the experiment ends at the end of the specified date in the customer's time zone. Format: YYYY-MM-DD Example: 2019-04-18",
          "type": "string"
        },
        "goals": {
          "description": "The goals of this experiment.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__MetricGoal"
          }
        },
        "longRunningOperation": {
          "description": "Output only. The resource name of the long-running operation that can be used to poll for completion of experiment schedule or promote. The most recent long running operation is returned.",
          "readOnly": true,
          "type": "string"
        },
        "promoteStatus": {
          "description": "Output only. The status of the experiment promotion process.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Action has not started.",
            "Action is in progress.",
            "Action has completed successfully.",
            "Action has failed.",
            "Action has completed successfully with warnings."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_STARTED",
            "IN_PROGRESS",
            "COMPLETED",
            "FAILED",
            "COMPLETED_WITH_WARNING"
          ]
        },
        "syncEnabled": {
          "description": "Immutable. Set to true if changes to base campaigns should be synced to the trial campaigns. Any changes made directly to trial campaigns will be preserved. This field can only be set when the experiment is being created.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MetricGoal": {
      "id": "GoogleAdsGoogleadsV21Common__MetricGoal",
      "description": "A metric goal for an experiment.",
      "type": "object",
      "properties": {
        "metric": {
          "description": "The metric of the goal. For example, clicks, impressions, cost, conversions, etc.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The goal of the experiment is clicks.",
            "The goal of the experiment is impressions.",
            "The goal of the experiment is cost.",
            "The goal of the experiment is conversion rate.",
            "The goal of the experiment is cost per conversion.",
            "The goal of the experiment is conversion value per cost.",
            "The goal of the experiment is avg cpc.",
            "The goal of the experiment is ctr.",
            "The goal of the experiment is incremental conversions.",
            "The goal of the experiment is completed video views.",
            "The goal of the experiment is custom algorithms.",
            "The goal of the experiment is conversions.",
            "The goal of the experiment is conversion value."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLICKS",
            "IMPRESSIONS",
            "COST",
            "CONVERSIONS_PER_INTERACTION_RATE",
            "COST_PER_CONVERSION",
            "CONVERSIONS_VALUE_PER_COST",
            "AVERAGE_CPC",
            "CTR",
            "INCREMENTAL_CONVERSIONS",
            "COMPLETED_VIDEO_VIEWS",
            "CUSTOM_ALGORITHMS",
            "CONVERSIONS",
            "CONVERSION_VALUE"
          ]
        },
        "direction": {
          "description": "The metric direction of the goal. For example, increase, decrease, no change.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The goal of the experiment is to not change the metric.",
            "The goal of the experiment is to increate the metric.",
            "The goal of the experiment is to decrease the metric.",
            "The goal of the experiment is to either not change or increase the metric.",
            "The goal of the experiment is to either not change or decrease the metric."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_CHANGE",
            "INCREASE",
            "DECREASE",
            "NO_CHANGE_OR_INCREASE",
            "NO_CHANGE_OR_DECREASE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentsResponse",
      "description": "Response message for experiment mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateExperimentResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateExperimentResult",
      "description": "The result for the campaign experiment mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EndExperimentRequest": {
      "id": "GoogleAdsGoogleadsV21Services__EndExperimentRequest",
      "description": "Request message for ExperimentService.EndExperiment.",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListExperimentAsyncErrorsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListExperimentAsyncErrorsResponse",
      "description": "Response message for ExperimentService.ListExperimentAsyncErrors.",
      "type": "object",
      "properties": {
        "errors": {
          "description": "details of the errors when performing the asynchronous operation.",
          "type": "array",
          "items": {
            "$ref": "GoogleRpc__Status"
          }
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GraduateExperimentRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GraduateExperimentRequest",
      "description": "Request message for ExperimentService.GraduateExperiment.",
      "type": "object",
      "properties": {
        "campaignBudgetMappings": {
          "description": "Required. List of campaign budget mappings for graduation. Each campaign that appears here will graduate, and will be assigned a new budget that is paired with it in the mapping. The maximum size is one.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CampaignBudgetMapping"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignBudgetMapping": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignBudgetMapping",
      "description": "The mapping of experiment campaign and budget to be graduated.",
      "type": "object",
      "properties": {
        "experimentCampaign": {
          "description": "Required. The experiment campaign to graduate.",
          "type": "string"
        },
        "campaignBudget": {
          "description": "Required. The budget that should be attached to the graduating experiment campaign.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ScheduleExperimentRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ScheduleExperimentRequest",
      "description": "Request message for ExperimentService.ScheduleExperiment.",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PromoteExperimentRequest": {
      "id": "GoogleAdsGoogleadsV21Services__PromoteExperimentRequest",
      "description": "Request message for ExperimentService.PromoteExperiment.",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsRequest",
      "description": "Request message for KeywordPlanAdGroupKeywordService.MutateKeywordPlanAdGroupKeywords.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual Keyword Plan ad group keywords.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupKeywordOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupKeywordOperation": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupKeywordOperation",
      "description": "A single operation (create, update, remove) on a Keyword Plan ad group keyword.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "The FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new Keyword Plan ad group keyword.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroupKeyword"
        },
        "update": {
          "description": "Update operation: The Keyword Plan ad group keyword is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroupKeyword"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed Keyword Plan ad group keyword is expected, in this format: `customers/{customer_id}/keywordPlanAdGroupKeywords/{kp_ad_group_keyword_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroupKeyword": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroupKeyword",
      "description": "A Keyword Plan ad group keyword. Max number of keyword plan keywords per plan: 10000.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Keyword Plan ad group keyword. KeywordPlanAdGroupKeyword resource names have the form: `customers/{customer_id}/keywordPlanAdGroupKeywords/{kp_ad_group_keyword_id}`",
          "type": "string"
        },
        "keywordPlanAdGroup": {
          "description": "The Keyword Plan ad group to which this keyword belongs.",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the Keyword Plan keyword.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "text": {
          "description": "The keyword text.",
          "type": "string"
        },
        "matchType": {
          "description": "The keyword match type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        },
        "cpcBidMicros": {
          "description": "A keyword level max cpc bid in micros (for example, $1 = 1mm). The currency is the same as the account currency code. This will override any CPC bid set at the keyword plan ad group level. Not applicable for negative keywords. (negative = true) This field is Optional.",
          "type": "string",
          "format": "int64"
        },
        "negative": {
          "description": "Immutable. If true, the keyword is negative.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordsResponse",
      "description": "Response message for a Keyword Plan ad group keyword mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordResult",
      "description": "The result for the Keyword Plan ad group keyword mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsRequest",
      "description": "Request message for KeywordPlanAdGroupService.MutateKeywordPlanAdGroups.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual Keyword Plan ad groups.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupOperation": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupOperation",
      "description": "A single operation (create, update, remove) on a Keyword Plan ad group.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "The FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new Keyword Plan ad group.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroup"
        },
        "update": {
          "description": "Update operation: The Keyword Plan ad group is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroup"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed Keyword Plan ad group is expected, in this format: `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroup": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroup",
      "description": "A Keyword Planner ad group. Max number of keyword plan ad groups per plan: 200.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Keyword Planner ad group. KeywordPlanAdGroup resource names have the form: `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`",
          "type": "string"
        },
        "keywordPlanCampaign": {
          "description": "The keyword plan campaign to which this ad group belongs.",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the keyword plan ad group.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the keyword plan ad group. This field is required and should not be empty when creating keyword plan ad group.",
          "type": "string"
        },
        "cpcBidMicros": {
          "description": "A default ad group max cpc bid in micros in account currency for all biddable keywords under the keyword plan ad group. If not set, will inherit from parent campaign.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupsResponse",
      "description": "Response message for a Keyword Plan ad group mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate. The order of the results is determined by the order of the keywords in the original request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupResult",
      "description": "The result for the Keyword Plan ad group mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsRequest",
      "description": "Request message for KeywordPlanCampaignKeywordService.MutateKeywordPlanCampaignKeywords.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual Keyword Plan campaign keywords.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignKeywordOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignKeywordOperation": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignKeywordOperation",
      "description": "A single operation (create, update, remove) on a Keyword Plan campaign keyword.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "The FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new Keyword Plan campaign keyword.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaignKeyword"
        },
        "update": {
          "description": "Update operation: The Keyword Plan campaign keyword expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaignKeyword"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed Keyword Plan campaign keywords expected in this format: `customers/{customer_id}/keywordPlanCampaignKeywords/{kp_campaign_keyword_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaignKeyword": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaignKeyword",
      "description": "A Keyword Plan Campaign keyword. Only negative keywords are supported for Campaign Keyword.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Keyword Plan Campaign keyword. KeywordPlanCampaignKeyword resource names have the form: `customers/{customer_id}/keywordPlanCampaignKeywords/{kp_campaign_keyword_id}`",
          "type": "string"
        },
        "keywordPlanCampaign": {
          "description": "The Keyword Plan campaign to which this negative keyword belongs.",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the Keyword Plan negative keyword.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "text": {
          "description": "The keyword text.",
          "type": "string"
        },
        "matchType": {
          "description": "The keyword match type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        },
        "negative": {
          "description": "Immutable. If true, the keyword is negative. Must be set to true. Only negative campaign keywords are supported.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordsResponse",
      "description": "Response message for a Keyword Plan campaign keyword mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordResult",
      "description": "The result for the Keyword Plan campaign keyword mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsRequest",
      "description": "Request message for KeywordPlanCampaignService.MutateKeywordPlanCampaigns.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual Keyword Plan campaigns.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignOperation": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignOperation",
      "description": "A single operation (create, update, remove) on a Keyword Plan campaign.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "The FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new Keyword Plan campaign.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaign"
        },
        "update": {
          "description": "Update operation: The Keyword Plan campaign is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaign"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed Keyword Plan campaign is expected, in this format: `customers/{customer_id}/keywordPlanCampaigns/{keywordPlan_campaign_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaign": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaign",
      "description": "A Keyword Plan campaign. Max number of keyword plan campaigns per plan allowed: 1.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Keyword Plan campaign. KeywordPlanCampaign resource names have the form: `customers/{customer_id}/keywordPlanCampaigns/{kp_campaign_id}`",
          "type": "string"
        },
        "keywordPlan": {
          "description": "The keyword plan this campaign belongs to.",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the Keyword Plan campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the Keyword Plan campaign. This field is required and should not be empty when creating Keyword Plan campaigns.",
          "type": "string"
        },
        "languageConstants": {
          "description": "The languages targeted for the Keyword Plan campaign. Max allowed: 1.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "keywordPlanNetwork": {
          "description": "Targeting network. This field is required and should not be empty when creating Keyword Plan campaigns.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google Search.",
            "Google Search + Search partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_SEARCH",
            "GOOGLE_SEARCH_AND_PARTNERS"
          ]
        },
        "cpcBidMicros": {
          "description": "A default max cpc bid in micros, and in the account currency, for all ad groups under the campaign. This field is required and should not be empty when creating Keyword Plan campaigns.",
          "type": "string",
          "format": "int64"
        },
        "geoTargets": {
          "description": "The geo targets. Max number allowed: 20.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanGeoTarget"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanGeoTarget": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanGeoTarget",
      "description": "A geo target.",
      "type": "object",
      "properties": {
        "geoTargetConstant": {
          "description": "Required. The resource name of the geo target.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignsResponse",
      "description": "Response message for a Keyword Plan campaign mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignResult",
      "description": "The result for the Keyword Plan campaign mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlansRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansRequest",
      "description": "Request message for KeywordPlanService.MutateKeywordPlans.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual keyword plans.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordPlanOperation": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordPlanOperation",
      "description": "A single operation (create, update, remove) on a keyword plan.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "The FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new keyword plan.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlan"
        },
        "update": {
          "description": "Update operation: The keyword plan is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlan"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed keyword plan is expected in this format: `customers/{customer_id}/keywordPlans/{keyword_plan_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlan": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlan",
      "description": "A Keyword Planner plan. Max number of saved keyword plans: 10000. It's possible to remove plans if limit is reached.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Keyword Planner plan. KeywordPlan resource names have the form: `customers/{customer_id}/keywordPlans/{kp_plan_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the keyword plan.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the keyword plan. This field is required and should not be empty when creating new keyword plans.",
          "type": "string"
        },
        "forecastPeriod": {
          "description": "The date period used for forecasting the plan.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanForecastPeriod"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordPlanForecastPeriod": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordPlanForecastPeriod",
      "description": "The forecasting period associated with the keyword plan.",
      "type": "object",
      "properties": {
        "dateInterval": {
          "description": "A future date range relative to the current date used for forecasting.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The next week date range for keyword plan. The next week is based on the default locale of the user's account and is mostly SUN-SAT or MON-SUN. This can be different from next-7 days.",
            "The next month date range for keyword plan.",
            "The next quarter date range for keyword plan."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEXT_WEEK",
            "NEXT_MONTH",
            "NEXT_QUARTER"
          ]
        },
        "dateRange": {
          "description": "The custom date range used for forecasting. It cannot be greater than a year. The start and end dates must be in the future. Otherwise, an error will be returned when the forecasting action is performed. The start and end dates are inclusive.",
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResponse",
      "description": "Response message for a keyword plan mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResult",
      "description": "The result for the keyword plan mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateLabelsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateLabelsRequest",
      "description": "Request message for LabelService.MutateLabels.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on labels.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__LabelOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__LabelOperation": {
      "id": "GoogleAdsGoogleadsV21Services__LabelOperation",
      "description": "A single operation (create, remove, update) on a label.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new label.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Label"
        },
        "update": {
          "description": "Update operation: The label is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Label"
        },
        "remove": {
          "description": "Remove operation: A resource name for the label being removed, in this format: `customers/{customer_id}/labels/{label_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Label": {
      "id": "GoogleAdsGoogleadsV21Resources__Label",
      "description": "A label.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. Label resource names have the form: `customers/{customer_id}/labels/{label_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of the label. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the label. This field is required and should not be empty when creating a new label. The length of this string should be between 1 and 80, inclusive.",
          "type": "string"
        },
        "status": {
          "description": "Output only. Status of the label. Read only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Label is enabled.",
            "Label is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "textLabel": {
          "description": "A type of label displaying text on a colored background.",
          "$ref": "GoogleAdsGoogleadsV21Common__TextLabel"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TextLabel": {
      "id": "GoogleAdsGoogleadsV21Common__TextLabel",
      "description": "A type of label displaying text on a colored background.",
      "type": "object",
      "properties": {
        "backgroundColor": {
          "description": "Background color of the label in HEX format. This string must match the regular expression '^\\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$'. Note: The background color may not be visible for manager accounts.",
          "type": "string"
        },
        "description": {
          "description": "A short description of the label. The length must be no more than 200 characters.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateLabelsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateLabelsResponse",
      "description": "Response message for a labels mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateLabelResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateLabelResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateLabelResult",
      "description": "The result for a label mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "label": {
          "description": "The mutated label with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__Label"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionRequest",
      "description": "Request message for [RecommendationSubscriptionService.MutateRecommendationSubscription]",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of create or update operations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__RecommendationSubscriptionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation. The mutable resource will only be returned if the resource has the appropriate response field. For example, MutateCampaignResult.campaign.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RecommendationSubscriptionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__RecommendationSubscriptionOperation",
      "description": "A single operation (create, update) on a recommendation subscription. [RecommendationSubscriptionService.MutateRecommendationSubscription]",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "Optional. FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new subscription.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RecommendationSubscription"
        },
        "update": {
          "description": "Update operation: The subscription is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RecommendationSubscription"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__RecommendationSubscription": {
      "id": "GoogleAdsGoogleadsV21Resources__RecommendationSubscription",
      "description": "Recommendation Subscription resource",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the recommendation subscription. `customers/{customer_id}/recommendationSubscriptions/{recommendation_type}`",
          "type": "string"
        },
        "type": {
          "description": "Required. Immutable. The type of recommendation subscribed to.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Provides optimized budget recommendations for campaigns.",
            "Keyword recommendation.",
            "Recommendation to add a new text ad.",
            "Recommendation to update a campaign to use a Target CPA bidding strategy.",
            "Recommendation to update a campaign to use the Maximize Conversions bidding strategy.",
            "Recommendation to enable Enhanced Cost Per Click for a campaign.",
            "Recommendation to start showing your campaign's ads on Google Search Partners Websites.",
            "Recommendation to update a campaign to use a Maximize Clicks bidding strategy.",
            "Recommendation to start using the \"Optimize\" ad rotation setting for the given ad group.",
            "Recommendation to change an existing keyword from one match type to a broader match type.",
            "Recommendation to move unused budget from one budget to a constrained budget.",
            "Budget recommendation for campaigns that are expected to become budget-constrained in the future (as opposed to the CAMPAIGN_BUDGET recommendation, which applies to campaigns that are currently budget-constrained).",
            "Recommendation to update a campaign to use a Target ROAS bidding strategy.",
            "Recommendation to add a new responsive search ad.",
            "Budget recommendation for campaigns whose ROI is predicted to increase with a budget adjustment.",
            "Recommendation to add broad match versions of keywords for fully automated conversion-based bidding campaigns.",
            "Recommendation to add new responsive search ad assets.",
            "Recommendation to upgrade a Smart Shopping campaign to a Performance Max campaign.",
            "Recommendation to improve strength of responsive search ad.",
            "Recommendation to update a campaign to use Display Expansion.",
            "Recommendation to upgrade a Local campaign to a Performance Max campaign.",
            "Recommendation to raise target CPA when it is too low and there are very few or no conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to raise the budget in advance of a seasonal event that is forecasted to increase traffic, and change bidding strategy from maximize conversion value to target ROAS.",
            "Recommendation to add callout assets to campaign or customer level.",
            "Recommendation to add sitelink assets to campaign or customer level.",
            "Recommendation to add call assets to campaign or customer level.",
            "Recommendation to add the age group attribute to offers that are demoted because of a missing age group.",
            "Recommendation to add a color to offers that are demoted because of a missing color.",
            "Recommendation to add a gender to offers that are demoted because of a missing gender.",
            "Recommendation to add a GTIN (Global Trade Item Number) to offers that are demoted because of a missing GTIN.",
            "Recommendation to add more identifiers to offers that are demoted because of missing identifiers.",
            "Recommendation to add the size to offers that are demoted because of a missing size.",
            "Recommendation informing a customer about a campaign that cannot serve because no products are being targeted.",
            "The shopping recommendation informing a customer about campaign with a high percentage of disapproved products.",
            "Recommendation to create a catch-all campaign that targets all offers.",
            "Recommendation to fix Merchant Center account suspension issues.",
            "Recommendation to fix Merchant Center account suspension warning issues.",
            "Recommendation to migrate offers targeted by Regular Shopping Campaigns to existing Performance Max campaigns.",
            "Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
            "Recommendation to raise Target CPA based on Google predictions modeled from past conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to lower Target ROAS.",
            "Recommendation to opt into Performance Max campaigns.",
            "Recommendation to improve the asset group strength of a Performance Max campaign to an \"Excellent\" rating.",
            "Recommendation to migrate Dynamic Search Ads to Performance Max campaigns.",
            "Recommendation to set a target CPA for campaigns that do not have one specified, in advance of a seasonal event that is forecasted to increase traffic.",
            "Recommendation to set a target CPA for campaigns that do not have one specified.",
            "Recommendation to set a target ROAS for campaigns that do not have one specified.",
            "Recommendation to update a campaign to use the Maximize Conversion Value bidding strategy.",
            "Recommendation to deploy Google Tag on more pages.",
            "Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
            "Recommendation to update a customer list that hasn't been updated in the last 90 days.",
            "Recommendation to create a custom audience.",
            "Recommendation to add lead form assets to campaign or customer level.",
            "Recommendation to improve the strength of ads in Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BUDGET",
            "KEYWORD",
            "TEXT_AD",
            "TARGET_CPA_OPT_IN",
            "MAXIMIZE_CONVERSIONS_OPT_IN",
            "ENHANCED_CPC_OPT_IN",
            "SEARCH_PARTNERS_OPT_IN",
            "MAXIMIZE_CLICKS_OPT_IN",
            "OPTIMIZE_AD_ROTATION",
            "KEYWORD_MATCH_TYPE",
            "MOVE_UNUSED_BUDGET",
            "FORECASTING_CAMPAIGN_BUDGET",
            "TARGET_ROAS_OPT_IN",
            "RESPONSIVE_SEARCH_AD",
            "MARGINAL_ROI_CAMPAIGN_BUDGET",
            "USE_BROAD_MATCH_KEYWORD",
            "RESPONSIVE_SEARCH_AD_ASSET",
            "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH",
            "DISPLAY_EXPANSION_OPT_IN",
            "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RAISE_TARGET_CPA_BID_TOO_LOW",
            "FORECASTING_SET_TARGET_ROAS",
            "CALLOUT_ASSET",
            "SITELINK_ASSET",
            "CALL_ASSET",
            "SHOPPING_ADD_AGE_GROUP",
            "SHOPPING_ADD_COLOR",
            "SHOPPING_ADD_GENDER",
            "SHOPPING_ADD_GTIN",
            "SHOPPING_ADD_MORE_IDENTIFIERS",
            "SHOPPING_ADD_SIZE",
            "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN",
            "SHOPPING_FIX_DISAPPROVED_PRODUCTS",
            "SHOPPING_TARGET_ALL_OFFERS",
            "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT",
            "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING",
            "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX",
            "DYNAMIC_IMAGE_EXTENSION_OPT_IN",
            "RAISE_TARGET_CPA",
            "LOWER_TARGET_ROAS",
            "PERFORMANCE_MAX_OPT_IN",
            "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH",
            "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX",
            "FORECASTING_SET_TARGET_CPA",
            "SET_TARGET_CPA",
            "SET_TARGET_ROAS",
            "MAXIMIZE_CONVERSION_VALUE_OPT_IN",
            "IMPROVE_GOOGLE_TAG_COVERAGE",
            "PERFORMANCE_MAX_FINAL_URL_OPT_IN",
            "REFRESH_CUSTOMER_MATCH_LIST",
            "CUSTOM_AUDIENCE_OPT_IN",
            "LEAD_FORM_ASSET",
            "IMPROVE_DEMAND_GEN_AD_STRENGTH"
          ]
        },
        "createDateTime": {
          "description": "Output only. Time in seconds when the subscription was first created. The datetime is in the customer's time zone and in \"yyyy-MM-dd HH:mm:ss\" format.",
          "readOnly": true,
          "type": "string"
        },
        "modifyDateTime": {
          "description": "Output only. Contains the time in microseconds, when the Recommendation Subscription was last updated. The datetime is in the customer's time zone and in \"yyyy-MM-dd HH:mm:ss.ssssss\" format.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Required. Status of the subscription, either enabled or paused.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Output-only. Represents a format not yet defined in this enum.",
            "A subscription in the enabled state will automatically apply any recommendations of that type.",
            "Recommendations of the relevant type will not be automatically applied. Subscriptions cannot be deleted. Once created, they can only move between enabled and paused states."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "PAUSED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResponse",
      "description": "Response message for [RecommendationSubscriptionService.MutateRecommendationSubscription]",
      "type": "object",
      "properties": {
        "results": {
          "description": "Results, one per operation.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors) we return the RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResult",
      "description": "Result message for [RecommendationSubscriptionService.MutateRecommendationSubscription]",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Resource name of the subscription that was modified.",
          "type": "string"
        },
        "recommendationSubscription": {
          "description": "The mutated recommendation subscription with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__RecommendationSubscription"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsRequest",
      "description": "Request message for RemarketingActionService.MutateRemarketingActions.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual remarketing actions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__RemarketingActionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemarketingActionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__RemarketingActionOperation",
      "description": "A single operation (create, update) on a remarketing action.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new remarketing action.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RemarketingAction"
        },
        "update": {
          "description": "Update operation: The remarketing action is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RemarketingAction"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__RemarketingAction": {
      "id": "GoogleAdsGoogleadsV21Resources__RemarketingAction",
      "description": "A remarketing action. A snippet of JavaScript code that will collect the product id and the type of page people visited (product page, shopping cart page, purchase page, general site visit) on an advertiser's website.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the remarketing action. Remarketing action resource names have the form: `customers/{customer_id}/remarketingActions/{remarketing_action_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. Id of the remarketing action.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "The name of the remarketing action. This field is required and should not be empty when creating new remarketing actions.",
          "type": "string"
        },
        "tagSnippets": {
          "description": "Output only. The snippets used for tracking remarketing actions.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TagSnippet"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionsResponse",
      "description": "Response message for remarketing action mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateRemarketingActionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionResult",
      "description": "The result for the remarketing action mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaRequest",
      "description": "Request message for SharedCriterionService.MutateSharedCriteria.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual shared criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__SharedCriterionOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SharedCriterionOperation": {
      "id": "GoogleAdsGoogleadsV21Services__SharedCriterionOperation",
      "description": "A single operation (create, remove) on an shared criterion.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new shared criterion.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedCriterion"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed shared criterion is expected, in this format: `customers/{customer_id}/sharedCriteria/{shared_set_id}~{criterion_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__SharedCriterion": {
      "id": "GoogleAdsGoogleadsV21Resources__SharedCriterion",
      "description": "A criterion belonging to a shared set.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the shared criterion. Shared set resource names have the form: `customers/{customer_id}/sharedCriteria/{shared_set_id}~{criterion_id}`",
          "type": "string"
        },
        "sharedSet": {
          "description": "Immutable. The shared set to which the shared criterion belongs.",
          "type": "string"
        },
        "criterionId": {
          "description": "Output only. The ID of the criterion. This field is ignored for mutates.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The type of the criterion.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Keyword, for example, 'mars cruise'.",
            "Placement, also known as Website, for example, 'www.flowers4sale.com'",
            "Mobile application categories to target.",
            "Mobile applications to target.",
            "Devices to target.",
            "Locations to target.",
            "Listing groups to target.",
            "Ad Schedule.",
            "Age range.",
            "Gender.",
            "Income Range.",
            "Parental status.",
            "YouTube Video.",
            "YouTube Channel.",
            "User list.",
            "Proximity.",
            "A topic target on the display network (for example, \"Pets & Animals\").",
            "Listing scope to target.",
            "Language.",
            "IpBlock.",
            "Content Label for category exclusion.",
            "Carrier.",
            "A category the user is interested in.",
            "Webpage criterion for dynamic search ads.",
            "Operating system version.",
            "App payment model.",
            "Mobile device.",
            "Custom affinity.",
            "Custom intent.",
            "Location group.",
            "Custom audience",
            "Combined audience",
            "Smart Campaign keyword theme",
            "Audience",
            "Negative Keyword List",
            "Local Services Ads Service ID.",
            "Search Theme.",
            "Brand",
            "Brand List",
            "Life Event",
            "Webpage List",
            "Video lineup",
            "Placement List"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "PLACEMENT",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "DEVICE",
            "LOCATION",
            "LISTING_GROUP",
            "AD_SCHEDULE",
            "AGE_RANGE",
            "GENDER",
            "INCOME_RANGE",
            "PARENTAL_STATUS",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "USER_LIST",
            "PROXIMITY",
            "TOPIC",
            "LISTING_SCOPE",
            "LANGUAGE",
            "IP_BLOCK",
            "CONTENT_LABEL",
            "CARRIER",
            "USER_INTEREST",
            "WEBPAGE",
            "OPERATING_SYSTEM_VERSION",
            "APP_PAYMENT_MODEL",
            "MOBILE_DEVICE",
            "CUSTOM_AFFINITY",
            "CUSTOM_INTENT",
            "LOCATION_GROUP",
            "CUSTOM_AUDIENCE",
            "COMBINED_AUDIENCE",
            "KEYWORD_THEME",
            "AUDIENCE",
            "NEGATIVE_KEYWORD_LIST",
            "LOCAL_SERVICE_ID",
            "SEARCH_THEME",
            "BRAND",
            "BRAND_LIST",
            "LIFE_EVENT",
            "WEBPAGE_LIST",
            "VIDEO_LINEUP",
            "PLACEMENT_LIST"
          ]
        },
        "keyword": {
          "description": "Immutable. Keyword.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "youtubeVideo": {
          "description": "Immutable. YouTube Video.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeVideoInfo"
        },
        "youtubeChannel": {
          "description": "Immutable. YouTube Channel.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "placement": {
          "description": "Immutable. Placement.",
          "$ref": "GoogleAdsGoogleadsV21Common__PlacementInfo"
        },
        "mobileAppCategory": {
          "description": "Immutable. Mobile App Category.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileAppCategoryInfo"
        },
        "mobileApplication": {
          "description": "Immutable. Mobile application.",
          "$ref": "GoogleAdsGoogleadsV21Common__MobileApplicationInfo"
        },
        "brand": {
          "description": "Immutable. Brand.",
          "$ref": "GoogleAdsGoogleadsV21Common__BrandInfo"
        },
        "webpage": {
          "description": "Immutable. Webpage.",
          "$ref": "GoogleAdsGoogleadsV21Common__WebpageInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BrandInfo": {
      "id": "GoogleAdsGoogleadsV21Common__BrandInfo",
      "description": "Represents a Brand Criterion used for targeting based on commercial knowledge graph.",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "Output only. A text representation of a brand.",
          "readOnly": true,
          "type": "string"
        },
        "entityId": {
          "description": "The Commercial KG MID for the brand.",
          "type": "string"
        },
        "primaryUrl": {
          "description": "Output only. The primary url of a brand.",
          "readOnly": true,
          "type": "string"
        },
        "rejectionReason": {
          "description": "Output only. The rejection reason when a brand status is REJECTED.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Brand is already present in the commercial brand set.",
            "Brand is already present in the commercial brand set, but is a variant.",
            "Brand information is not correct (eg: URL and name don't match).",
            "Not a valid brand as per Google policy."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXISTING_BRAND",
            "EXISTING_BRAND_VARIANT",
            "INCORRECT_INFORMATION",
            "NOT_A_BRAND"
          ]
        },
        "status": {
          "description": "Output only. The status of a brand.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Brand is verified and globally available for selection",
            "Brand was globally available in past but is no longer a valid brand (based on business criteria)",
            "Brand is unverified and customer scoped, but can be selected by customer (only who requested for same) for targeting",
            "Was a customer-scoped (unverified) brand, which got approved by business and added to the global list. Its assigned CKG MID should be used instead of this",
            "Was a customer-scoped (unverified) brand, but the request was canceled by customer and this brand id is no longer valid",
            "Was a customer-scoped (unverified) brand, but the request was rejected by internal business team and this brand id is no longer valid"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "DEPRECATED",
            "UNVERIFIED",
            "APPROVED",
            "CANCELLED",
            "REJECTED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedCriteriaResponse",
      "description": "Response message for a shared criterion mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedCriterionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedCriterionResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedCriterionResult",
      "description": "The result for the shared criterion mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "sharedCriterion": {
          "description": "The mutated shared criterion with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedCriterion"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedSetsRequest",
      "description": "Request message for SharedSetService.MutateSharedSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual shared sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__SharedSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SharedSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__SharedSetOperation",
      "description": "A single operation (create, update, remove) on an shared set.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new shared set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedSet"
        },
        "update": {
          "description": "Update operation: The shared set is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed shared set is expected, in this format: `customers/{customer_id}/sharedSets/{shared_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__SharedSet": {
      "id": "GoogleAdsGoogleadsV21Resources__SharedSet",
      "description": "SharedSets are used for sharing criterion exclusions across multiple campaigns.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the shared set. Shared set resource names have the form: `customers/{customer_id}/sharedSets/{shared_set_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of this shared set. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Immutable. The type of this shared set: each shared set holds only a single kind of resource. Required. Immutable.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A set of keywords that can be excluded from targeting.",
            "A set of placements that can be excluded from targeting.",
            "An account-level set of keywords that can be excluded from targeting.",
            "A set of brands can be included or excluded from targeting.",
            "A set of webpages that can be excluded from targeting. This shared set type is not publicly available."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEGATIVE_KEYWORDS",
            "NEGATIVE_PLACEMENTS",
            "ACCOUNT_LEVEL_NEGATIVE_KEYWORDS",
            "BRANDS",
            "WEBPAGES"
          ]
        },
        "name": {
          "description": "The name of this shared set. Required. Shared Sets must have names that are unique among active shared sets of the same type. The length of this string should be between 1 and 255 UTF-8 bytes, inclusive.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of this shared set. Read only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The shared set is enabled.",
            "The shared set is removed and can no longer be used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "memberCount": {
          "description": "Output only. The number of shared criteria within this shared set. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "referenceCount": {
          "description": "Output only. The number of campaigns associated with this shared set. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedSetsResponse",
      "description": "Response message for a shared set mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedSetResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSharedSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSharedSetResult",
      "description": "The result for the shared set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "sharedSet": {
          "description": "The mutated shared set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GetSmartCampaignStatusResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GetSmartCampaignStatusResponse",
      "description": "Response message for SmartCampaignSettingService.GetSmartCampaignStatus.",
      "type": "object",
      "properties": {
        "smartCampaignStatus": {
          "description": "The status of this Smart campaign.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The campaign was paused.",
            "The campaign is not eligible to serve and has issues that may require intervention.",
            "The campaign is pending the approval of at least one ad.",
            "The campaign is eligible to serve.",
            "The campaign has been removed.",
            "The campaign has ended."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PAUSED",
            "NOT_ELIGIBLE",
            "PENDING",
            "ELIGIBLE",
            "REMOVED",
            "ENDED"
          ]
        },
        "notEligibleDetails": {
          "description": "Details related to Smart campaigns that are ineligible to serve.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignNotEligibleDetails"
        },
        "eligibleDetails": {
          "description": "Details related to Smart campaigns that are eligible to serve.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignEligibleDetails"
        },
        "pausedDetails": {
          "description": "Details related to paused Smart campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignPausedDetails"
        },
        "removedDetails": {
          "description": "Details related to removed Smart campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignRemovedDetails"
        },
        "endedDetails": {
          "description": "Details related to Smart campaigns that have ended.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignEndedDetails"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignNotEligibleDetails": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignNotEligibleDetails",
      "description": "Details related to Smart campaigns that are not eligible to serve.",
      "type": "object",
      "properties": {
        "notEligibleReason": {
          "description": "The reason why the Smart campaign is not eligible to serve.",
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The campaign is not eligible to serve because of an issue with the account.",
            "The campaign is not eligible to serve because of a payment issue.",
            "The business profile location associated with the campaign has been removed.",
            "All system-generated ads have been disapproved. Consult the policy_summary field in the AdGroupAd resource for more details."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCOUNT_ISSUE",
            "BILLING_ISSUE",
            "BUSINESS_PROFILE_LOCATION_REMOVED",
            "ALL_ADS_DISAPPROVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignEligibleDetails": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignEligibleDetails",
      "description": "Details related to Smart campaigns that are eligible to serve.",
      "type": "object",
      "properties": {
        "lastImpressionDateTime": {
          "description": "The timestamp of the last impression observed in the last 48 hours for this campaign. The timestamp is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.",
          "type": "string"
        },
        "endDateTime": {
          "description": "The timestamp of when the campaign will end, if applicable. The timestamp is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignPausedDetails": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignPausedDetails",
      "description": "Details related to paused Smart campaigns.",
      "type": "object",
      "properties": {
        "pausedDateTime": {
          "description": "The timestamp of when the campaign was last paused. The timestamp is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignRemovedDetails": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignRemovedDetails",
      "description": "Details related to removed Smart campaigns.",
      "type": "object",
      "properties": {
        "removedDateTime": {
          "description": "The timestamp of when the campaign was removed. The timestamp is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignEndedDetails": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignEndedDetails",
      "description": "Details related to Smart campaigns that have ended.",
      "type": "object",
      "properties": {
        "endDateTime": {
          "description": "The timestamp of when the campaign ended. The timestamp is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsRequest",
      "description": "Request message for SmartCampaignSettingService.MutateSmartCampaignSettings.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual Smart campaign settings.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignSettingOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignSettingOperation": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignSettingOperation",
      "description": "A single operation to update Smart campaign settings for a campaign.",
      "type": "object",
      "properties": {
        "update": {
          "description": "Update operation: The Smart campaign setting must specify a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SmartCampaignSetting"
        },
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__SmartCampaignSetting": {
      "id": "GoogleAdsGoogleadsV21Resources__SmartCampaignSetting",
      "description": "Settings for configuring Smart campaigns.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Smart campaign setting. Smart campaign setting resource names have the form: `customers/{customer_id}/smartCampaignSettings/{campaign_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign to which these settings apply.",
          "readOnly": true,
          "type": "string"
        },
        "phoneNumber": {
          "description": "Phone number and country code.",
          "$ref": "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_PhoneNumber"
        },
        "advertisingLanguageCode": {
          "description": "The language code to advertise in from the set of [supported language codes] (https://developers.google.com/google-ads/api/reference/data/codes-formats#languages).",
          "type": "string"
        },
        "finalUrl": {
          "description": "The user-provided landing page URL for this Campaign.",
          "type": "string"
        },
        "adOptimizedBusinessProfileSetting": {
          "description": "Settings for configuring a business profile optimized for ads as this campaign's landing page. This campaign must be linked to a business profile to use this option. For more information on this feature, consult https://support.google.com/google-ads/answer/9827068.",
          "$ref": "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_AdOptimizedBusinessProfileSetting"
        },
        "businessName": {
          "description": "The name of the business.",
          "type": "string"
        },
        "businessProfileLocation": {
          "description": "The resource name of a Business Profile location. Business Profile location resource names can be fetched through the Business Profile API and adhere to the following format: `locations/{locationId}`. See the [Business Profile API] (https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations) for additional details.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_PhoneNumber": {
      "id": "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_PhoneNumber",
      "description": "Phone number and country code in smart campaign settings.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "Phone number of the smart campaign.",
          "type": "string"
        },
        "countryCode": {
          "description": "Upper-case, two-letter country code as defined by ISO-3166.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_AdOptimizedBusinessProfileSetting": {
      "id": "GoogleAdsGoogleadsV21Resources_SmartCampaignSetting_AdOptimizedBusinessProfileSetting",
      "description": "Settings for configuring a business profile optimized for ads as this campaign's landing page.",
      "type": "object",
      "properties": {
        "includeLeadForm": {
          "description": "Enabling a lead form on your business profile enables prospective customers to contact your business by filling out a simple form, and you'll receive their information through email.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingsResponse",
      "description": "Response message for campaign mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingResult",
      "description": "The result for the Smart campaign setting mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "smartCampaignSetting": {
          "description": "The mutated Smart campaign setting with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__SmartCampaignSetting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListsRequest",
      "description": "Request message for UserListService.MutateUserLists.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual user lists.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__UserListOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UserListOperation": {
      "id": "GoogleAdsGoogleadsV21Services__UserListOperation",
      "description": "A single operation (create, update) on a user list.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new user list.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserList"
        },
        "update": {
          "description": "Update operation: The user list is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserList"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed user list is expected, in this format: `customers/{customer_id}/userLists/{user_list_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__UserList": {
      "id": "GoogleAdsGoogleadsV21Resources__UserList",
      "description": "A user list. This is a list of users a customer may target.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the user list. User list resource names have the form: `customers/{customer_id}/userLists/{user_list_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. Id of the user list.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "readOnly": {
          "description": "Output only. An option that indicates if a user may edit a list. Depends on the list ownership and list type. For example, external remarketing user lists are not editable. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "name": {
          "description": "Name of this user list. Depending on its access_reason, the user list name may not be unique (for example, if access_reason=SHARED)",
          "type": "string"
        },
        "description": {
          "description": "Description of this user list.",
          "type": "string"
        },
        "membershipStatus": {
          "description": "Membership status of this user list. Indicates whether a user list is open or active. Only open user lists can accumulate more users and can be targeted to.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Open status - List is accruing members and can be targeted to.",
            "Closed status - No new members being added. Cannot be used for targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPEN",
            "CLOSED"
          ]
        },
        "integrationCode": {
          "description": "An ID from external system. It is used by user list sellers to correlate IDs on their systems.",
          "type": "string"
        },
        "membershipLifeSpan": {
          "description": "Number of days a user's cookie stays on your list since its most recent addition to the list. This field must be between 0 and 540 inclusive. However, for CRM based userlists, this field can be set to 10000 which means no expiration. Beginning on April 7, 2025, using a value of 10000 to indicate no expiration will no longer be supported. This field is ignored for logical_user_list and rule_based_user_list types. Membership to lists of these types depends on the rules defined by the lists.",
          "type": "string",
          "format": "int64"
        },
        "sizeForDisplay": {
          "description": "Output only. Estimated number of users in this user list, on the Google Display Network. This value is null if the number of users has not yet been determined. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "sizeRangeForDisplay": {
          "description": "Output only. Size range in terms of number of users of the UserList, on the Google Display Network. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "User list has less than 500 users.",
            "User list has number of users in range of 500 to 1000.",
            "User list has number of users in range of 1000 to 10000.",
            "User list has number of users in range of 10000 to 50000.",
            "User list has number of users in range of 50000 to 100000.",
            "User list has number of users in range of 100000 to 300000.",
            "User list has number of users in range of 300000 to 500000.",
            "User list has number of users in range of 500000 to 1 million.",
            "User list has number of users in range of 1 to 2 millions.",
            "User list has number of users in range of 2 to 3 millions.",
            "User list has number of users in range of 3 to 5 millions.",
            "User list has number of users in range of 5 to 10 millions.",
            "User list has number of users in range of 10 to 20 millions.",
            "User list has number of users in range of 20 to 30 millions.",
            "User list has number of users in range of 30 to 50 millions.",
            "User list has over 50 million users."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LESS_THAN_FIVE_HUNDRED",
            "LESS_THAN_ONE_THOUSAND",
            "ONE_THOUSAND_TO_TEN_THOUSAND",
            "TEN_THOUSAND_TO_FIFTY_THOUSAND",
            "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND",
            "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND",
            "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND",
            "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION",
            "ONE_MILLION_TO_TWO_MILLION",
            "TWO_MILLION_TO_THREE_MILLION",
            "THREE_MILLION_TO_FIVE_MILLION",
            "FIVE_MILLION_TO_TEN_MILLION",
            "TEN_MILLION_TO_TWENTY_MILLION",
            "TWENTY_MILLION_TO_THIRTY_MILLION",
            "THIRTY_MILLION_TO_FIFTY_MILLION",
            "OVER_FIFTY_MILLION"
          ]
        },
        "sizeForSearch": {
          "description": "Output only. Estimated number of users in this user list in the google.com domain. These are the users available for targeting in Search campaigns. This value is null if the number of users has not yet been determined. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "sizeRangeForSearch": {
          "description": "Output only. Size range in terms of number of users of the UserList, for Search ads. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "User list has less than 500 users.",
            "User list has number of users in range of 500 to 1000.",
            "User list has number of users in range of 1000 to 10000.",
            "User list has number of users in range of 10000 to 50000.",
            "User list has number of users in range of 50000 to 100000.",
            "User list has number of users in range of 100000 to 300000.",
            "User list has number of users in range of 300000 to 500000.",
            "User list has number of users in range of 500000 to 1 million.",
            "User list has number of users in range of 1 to 2 millions.",
            "User list has number of users in range of 2 to 3 millions.",
            "User list has number of users in range of 3 to 5 millions.",
            "User list has number of users in range of 5 to 10 millions.",
            "User list has number of users in range of 10 to 20 millions.",
            "User list has number of users in range of 20 to 30 millions.",
            "User list has number of users in range of 30 to 50 millions.",
            "User list has over 50 million users."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LESS_THAN_FIVE_HUNDRED",
            "LESS_THAN_ONE_THOUSAND",
            "ONE_THOUSAND_TO_TEN_THOUSAND",
            "TEN_THOUSAND_TO_FIFTY_THOUSAND",
            "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND",
            "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND",
            "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND",
            "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION",
            "ONE_MILLION_TO_TWO_MILLION",
            "TWO_MILLION_TO_THREE_MILLION",
            "THREE_MILLION_TO_FIVE_MILLION",
            "FIVE_MILLION_TO_TEN_MILLION",
            "TEN_MILLION_TO_TWENTY_MILLION",
            "TWENTY_MILLION_TO_THIRTY_MILLION",
            "THIRTY_MILLION_TO_FIFTY_MILLION",
            "OVER_FIFTY_MILLION"
          ]
        },
        "type": {
          "description": "Output only. Type of this list. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "UserList represented as a collection of conversion types.",
            "UserList represented as a combination of other user lists/interests.",
            "UserList created in the Google Ad Manager platform.",
            "UserList associated with a rule.",
            "UserList with users similar to users of another UserList.",
            "UserList of first-party CRM data provided by advertiser in the form of emails or other formats.",
            "LookalikeUserlist, composed of users similar to those of a configurable seed (set of UserLists)"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REMARKETING",
            "LOGICAL",
            "EXTERNAL_REMARKETING",
            "RULE_BASED",
            "SIMILAR",
            "CRM_BASED",
            "LOOKALIKE"
          ]
        },
        "closingReason": {
          "description": "Indicating the reason why this user list membership status is closed. It is only populated on lists that were automatically closed due to inactivity, and will be cleared once the list membership status becomes open.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The userlist was closed because of not being used for over one year."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNUSED"
          ]
        },
        "accessReason": {
          "description": "Output only. Indicates the reason this account has been granted access to the list. The reason can be SHARED, OWNED, LICENSED or SUBSCRIBED. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The resource is owned by the user.",
            "The resource is shared to the user.",
            "The resource is licensed to the user.",
            "The user subscribed to the resource.",
            "The resource is accessible to the user."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OWNED",
            "SHARED",
            "LICENSED",
            "SUBSCRIBED",
            "AFFILIATED"
          ]
        },
        "accountUserListStatus": {
          "description": "Indicates if this share is still enabled. When a UserList is shared with the user this field is set to ENABLED. Later the userList owner can decide to revoke the share and make it DISABLED. The default value of this field is set to ENABLED.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The access is enabled.",
            "The access is disabled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "DISABLED"
          ]
        },
        "eligibleForSearch": {
          "description": "Indicates if this user list is eligible for Google Search Network.",
          "type": "boolean"
        },
        "eligibleForDisplay": {
          "description": "Output only. Indicates this user list is eligible for Google Display Network. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "matchRatePercentage": {
          "description": "Output only. Indicates match rate for Customer Match lists. The range of this field is [0-100]. This will be null for other list types or when it's not possible to calculate the match rate. This field is read-only.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "crmBasedUserList": {
          "description": "User list of CRM users provided by the advertiser.",
          "$ref": "GoogleAdsGoogleadsV21Common__CrmBasedUserListInfo"
        },
        "similarUserList": {
          "description": "Output only. User list which are similar to users from another UserList. These lists are readonly and automatically created by google.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__SimilarUserListInfo"
        },
        "ruleBasedUserList": {
          "description": "User list generated by a rule.",
          "$ref": "GoogleAdsGoogleadsV21Common__RuleBasedUserListInfo"
        },
        "logicalUserList": {
          "description": "User list that is a custom combination of user lists and user interests.",
          "$ref": "GoogleAdsGoogleadsV21Common__LogicalUserListInfo"
        },
        "basicUserList": {
          "description": "User list targeting as a collection of conversion or remarketing actions.",
          "$ref": "GoogleAdsGoogleadsV21Common__BasicUserListInfo"
        },
        "lookalikeUserList": {
          "description": "Immutable. Lookalike User List.",
          "$ref": "GoogleAdsGoogleadsV21Common__LookalikeUserListInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CrmBasedUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__CrmBasedUserListInfo",
      "description": "UserList of CRM users provided by the advertiser.",
      "type": "object",
      "properties": {
        "appId": {
          "description": "A string that uniquely identifies a mobile application from which the data was collected. For iOS, the ID string is the 9 digit string that appears at the end of an App Store URL (for example, \"476943146\" for \"Flood-It! 2\" whose App Store link is http://itunes.apple.com/us/app/flood-it!-2/id476943146). For Android, the ID string is the application's package name (for example, \"com.labpixies.colordrips\" for \"Color Drips\" given Google Play link https://play.google.com/store/apps/details?id=com.labpixies.colordrips). Required when creating CrmBasedUserList for uploading mobile advertising IDs.",
          "type": "string"
        },
        "uploadKeyType": {
          "description": "Matching key type of the list. Mixed data types are not allowed on the same list. This field is required for an ADD operation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Members are matched from customer info such as email address, phone number or physical address.",
            "Members are matched from a user id generated and assigned by the advertiser.",
            "Members are matched from mobile advertising ids."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONTACT_INFO",
            "CRM_ID",
            "MOBILE_ADVERTISING_ID"
          ]
        },
        "dataSourceType": {
          "description": "Data source of the list. Default value is FIRST_PARTY. Only customers on the allow-list can create third-party sourced CRM lists.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The uploaded data is first-party data.",
            "The uploaded data is from a third-party credit bureau.",
            "The uploaded data is from a third-party voter file."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FIRST_PARTY",
            "THIRD_PARTY_CREDIT_BUREAU",
            "THIRD_PARTY_VOTER_FILE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SimilarUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__SimilarUserListInfo",
      "description": "SimilarUserList is a list of users which are similar to users from another UserList. These lists are read-only and automatically created by Google.",
      "type": "object",
      "properties": {
        "seedUserList": {
          "description": "Seed UserList from which this list is derived.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__RuleBasedUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__RuleBasedUserListInfo",
      "description": "Representation of a userlist that is generated by a rule.",
      "type": "object",
      "properties": {
        "prepopulationStatus": {
          "description": "The status of pre-population. The field is default to NONE if not set which means the previous users will not be considered. If set to REQUESTED, past site visitors or app users who match the list definition will be included in the list (works on the Display Network only). This will only add past users from within the last 30 days, depending on the list's membership duration and the date when the remarketing tag is added. The status will be updated to FINISHED once request is processed, or FAILED if the request fails.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Prepopoulation is being requested.",
            "Prepopulation is finished.",
            "Prepopulation failed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUESTED",
            "FINISHED",
            "FAILED"
          ]
        },
        "flexibleRuleUserList": {
          "description": "Flexible rule representation of visitors with one or multiple actions. The flexible user list is defined by two lists of operands – inclusive_operands and exclusive_operands; each operand represents a set of users based on actions they took in a given timeframe. These lists of operands are combined with the AND_NOT operator, so that users represented by the inclusive operands are included in the user list, minus the users represented by the exclusive operands.",
          "$ref": "GoogleAdsGoogleadsV21Common__FlexibleRuleUserListInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FlexibleRuleUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__FlexibleRuleUserListInfo",
      "description": "Flexible rule representation of visitors with one or multiple actions. The flexible user list is defined by two lists of operands – inclusive_operands and exclusive_operands; each operand represents a set of users based on actions they took in a given timeframe. These lists of operands are combined with the AND_NOT operator, so that users represented by the inclusive operands are included in the user list, minus the users represented by the exclusive operands.",
      "type": "object",
      "properties": {
        "inclusiveRuleOperator": {
          "description": "Operator that defines how the inclusive operands are combined.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A AND B.",
            "A OR B."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AND",
            "OR"
          ]
        },
        "inclusiveOperands": {
          "description": "Rules representing users that should be included in the user list. These are located on the left side of the AND_NOT operator, and joined together by either AND/OR as specified by the inclusive_rule_operator.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__FlexibleRuleOperandInfo"
          }
        },
        "exclusiveOperands": {
          "description": "Rules representing users that should be excluded from the user list. These are located on the right side of the AND_NOT operator, and joined together by OR.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__FlexibleRuleOperandInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__FlexibleRuleOperandInfo": {
      "id": "GoogleAdsGoogleadsV21Common__FlexibleRuleOperandInfo",
      "description": "Flexible rule that wraps the common rule and a lookback window.",
      "type": "object",
      "properties": {
        "rule": {
          "description": "List of rule item groups that defines this rule. Rule item groups are grouped together.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListRuleInfo"
        },
        "lookbackWindowDays": {
          "description": "Lookback window for this rule in days. From now until X days ago.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListRuleInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListRuleInfo",
      "description": "A client defined rule based on custom parameters sent by web sites or uploaded by the advertiser.",
      "type": "object",
      "properties": {
        "ruleType": {
          "description": "Rule type is used to determine how to group rule items. The default is OR of ANDs (disjunctive normal form). That is, rule items will be ANDed together within rule item groups and the groups themselves will be ORed together. OR of ANDs is the only supported type for FlexibleRuleUserList.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conjunctive normal form.",
            "Disjunctive normal form."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AND_OF_ORS",
            "OR_OF_ANDS"
          ]
        },
        "ruleItemGroups": {
          "description": "List of rule item groups that defines this rule. Rule item groups are grouped together based on rule_type.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserListRuleItemGroupInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListRuleItemGroupInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListRuleItemGroupInfo",
      "description": "A group of rule items.",
      "type": "object",
      "properties": {
        "ruleItems": {
          "description": "Rule items that will be grouped together based on rule_type.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserListRuleItemInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListRuleItemInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListRuleItemInfo",
      "description": "An atomic rule item.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Rule variable name. It should match the corresponding key name fired by the pixel. A name must begin with US-ascii letters or underscore or UTF8 code that is greater than 127 and consist of US-ascii letters or digits or underscore or UTF8 code that is greater than 127. For websites, there are two built-in variable URL (name = 'url__') and referrer URL (name = 'ref_url__'). This field must be populated when creating a new rule item.",
          "type": "string"
        },
        "numberRuleItem": {
          "description": "An atomic rule item composed of a number operation.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListNumberRuleItemInfo"
        },
        "stringRuleItem": {
          "description": "An atomic rule item composed of a string operation.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListStringRuleItemInfo"
        },
        "dateRuleItem": {
          "description": "An atomic rule item composed of a date operation.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListDateRuleItemInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListNumberRuleItemInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListNumberRuleItemInfo",
      "description": "A rule item composed of a number operation.",
      "type": "object",
      "properties": {
        "operator": {
          "description": "Number comparison operator. This field is required and must be populated when creating a new number rule item.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Greater than.",
            "Greater than or equal.",
            "Equals.",
            "Not equals.",
            "Less than.",
            "Less than or equal."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GREATER_THAN",
            "GREATER_THAN_OR_EQUAL",
            "EQUALS",
            "NOT_EQUALS",
            "LESS_THAN",
            "LESS_THAN_OR_EQUAL"
          ]
        },
        "value": {
          "description": "Number value to be compared with the variable. This field is required and must be populated when creating a new number rule item.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListStringRuleItemInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListStringRuleItemInfo",
      "description": "A rule item composed of a string operation.",
      "type": "object",
      "properties": {
        "operator": {
          "description": "String comparison operator. This field is required and must be populated when creating a new string rule item.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Contains.",
            "Equals.",
            "Starts with.",
            "Ends with.",
            "Not equals.",
            "Not contains.",
            "Not starts with.",
            "Not ends with."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONTAINS",
            "EQUALS",
            "STARTS_WITH",
            "ENDS_WITH",
            "NOT_EQUALS",
            "NOT_CONTAINS",
            "NOT_STARTS_WITH",
            "NOT_ENDS_WITH"
          ]
        },
        "value": {
          "description": "The right hand side of the string rule item. For URLs or referrer URLs, the value can not contain illegal URL chars such as newlines, quotes, tabs, or parentheses. This field is required and must be populated when creating a new string rule item.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListDateRuleItemInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListDateRuleItemInfo",
      "description": "A rule item composed of a date operation.",
      "type": "object",
      "properties": {
        "operator": {
          "description": "Date comparison operator. This field is required and must be populated when creating new date rule item.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Equals.",
            "Not Equals.",
            "Before.",
            "After."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EQUALS",
            "NOT_EQUALS",
            "BEFORE",
            "AFTER"
          ]
        },
        "value": {
          "description": "String representing date value to be compared with the rule variable. Supported date format is YYYY-MM-DD. Times are reported in the customer's time zone.",
          "type": "string"
        },
        "offsetInDays": {
          "description": "The relative date value of the right hand side denoted by number of days offset from now. The value field will override this field when both are present.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LogicalUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LogicalUserListInfo",
      "description": "Represents a user list that is a custom combination of user lists.",
      "type": "object",
      "properties": {
        "rules": {
          "description": "Logical list rules that define this user list. The rules are defined as a logical operator (ALL/ANY/NONE) and a list of user lists. All the rules are ANDed when they are evaluated. Required for creating a logical user list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserListLogicalRuleInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListLogicalRuleInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListLogicalRuleInfo",
      "description": "A user list logical rule. A rule has a logical operator (and/or/not) and a list of user lists as operands.",
      "type": "object",
      "properties": {
        "operator": {
          "description": "The logical operator of the rule.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "And - all of the operands.",
            "Or - at least one of the operands.",
            "Not - none of the operands."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL",
            "ANY",
            "NONE"
          ]
        },
        "ruleOperands": {
          "description": "The list of operands of the rule.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LogicalUserListOperandInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LogicalUserListOperandInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LogicalUserListOperandInfo",
      "description": "Operand of logical user list that consists of a user list.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "Resource name of a user list as an operand.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BasicUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__BasicUserListInfo",
      "description": "User list targeting as a collection of conversions or remarketing actions.",
      "type": "object",
      "properties": {
        "actions": {
          "description": "Actions associated with this user list.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserListActionInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserListActionInfo": {
      "id": "GoogleAdsGoogleadsV21Common__UserListActionInfo",
      "description": "Represents an action type used for building remarketing user lists.",
      "type": "object",
      "properties": {
        "conversionAction": {
          "description": "A conversion action that's not generated from remarketing.",
          "type": "string"
        },
        "remarketingAction": {
          "description": "A remarketing action.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LookalikeUserListInfo": {
      "id": "GoogleAdsGoogleadsV21Common__LookalikeUserListInfo",
      "description": "LookalikeUserlist, composed of users similar to those of a configurable seed (set of UserLists)",
      "type": "object",
      "properties": {
        "seedUserListIds": {
          "description": "Seed UserList ID from which this list is derived, provided by user.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "expansionLevel": {
          "description": "Expansion level, reflecting the size of the lookalike audience",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Invalid expansion level.",
            "Expansion to a small set of users that are similar to the seed lists",
            "Expansion to a medium set of users that are similar to the seed lists. Includes all users of EXPANSION_LEVEL_NARROW, and more.",
            "Expansion to a large set of users that are similar to the seed lists. Includes all users of EXPANSION_LEVEL_BALANCED, and more."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NARROW",
            "BALANCED",
            "BROAD"
          ]
        },
        "countryCodes": {
          "description": "Countries targeted by the Lookalike. Two-letter country code as defined by ISO-3166",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListsResponse",
      "description": "Response message for user list mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListResult",
      "description": "The result for the user list mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsRequest",
      "description": "Request message for GoogleAdsService.Search.",
      "type": "object",
      "properties": {
        "query": {
          "description": "Required. The query string.",
          "type": "string"
        },
        "pageToken": {
          "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from `next_page_token` in the previous response in order to request the next page of results.",
          "type": "string"
        },
        "pageSize": {
          "description": "This field is deprecated and will be removed in a future version of the API. As of v17, Google Ads API will return a `PAGE_SIZE_NOT_SUPPORTED` error if this field is set in the request body. See https://ads-developers.googleblog.com/2024/07/upcoming-changes-to-page-size-in-google.html to learn more details.",
          "type": "integer",
          "format": "int32"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed.",
          "type": "boolean"
        },
        "searchSettings": {
          "description": "Settings that allow users to specify request count, summary row, and results behavior.",
          "$ref": "GoogleAdsGoogleadsV21Services__SearchSettings"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchSettings": {
      "id": "GoogleAdsGoogleadsV21Services__SearchSettings",
      "description": "Indicates search settings in request parameter.",
      "type": "object",
      "properties": {
        "omitResults": {
          "description": "If true, results will be excluded from the response. Otherwise, results will be returned. Default is false.",
          "type": "boolean"
        },
        "returnSummaryRow": {
          "description": "If true, summary row will be included in the response and sent in a response by itself after all other query results are returned. Default is false.",
          "type": "boolean"
        },
        "returnTotalResultsCount": {
          "description": "If true, the total number of results that match the query ignoring the LIMIT clause will be included in the response. Default is false.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsResponse",
      "description": "Response message for GoogleAdsService.Search.",
      "type": "object",
      "properties": {
        "results": {
          "description": "The list of rows that matched the query.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__GoogleAdsRow"
          }
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        },
        "totalResultsCount": {
          "description": "Total number of results that match the query ignoring the LIMIT clause.",
          "type": "string",
          "format": "int64"
        },
        "fieldMask": {
          "description": "FieldMask that represents what fields were requested by the user.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "summaryRow": {
          "description": "Summary row that contains summary of metrics in results. Summary of metrics means aggregation of metrics across all results, here aggregation could be sum, average, rate, etc.",
          "$ref": "GoogleAdsGoogleadsV21Services__GoogleAdsRow"
        },
        "queryResourceConsumption": {
          "description": "The amount of resources consumed to serve the query.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GoogleAdsRow": {
      "id": "GoogleAdsGoogleadsV21Services__GoogleAdsRow",
      "description": "A returned row from the query.",
      "type": "object",
      "properties": {
        "accountBudget": {
          "description": "The account budget in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountBudget"
        },
        "accountBudgetProposal": {
          "description": "The account budget proposal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountBudgetProposal"
        },
        "accountLink": {
          "description": "The AccountLink referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccountLink"
        },
        "ad": {
          "description": "The Ad referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "adGroup": {
          "description": "The ad group referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroup"
        },
        "adGroupAd": {
          "description": "The ad referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAd"
        },
        "adGroupAdAssetCombinationView": {
          "description": "The ad group ad asset combination view in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetCombinationView"
        },
        "adGroupAdAssetView": {
          "description": "The ad group ad asset view in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetView"
        },
        "adGroupAdLabel": {
          "description": "The ad group ad label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdLabel"
        },
        "adGroupAsset": {
          "description": "The ad group asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAsset"
        },
        "adGroupAssetSet": {
          "description": "The ad group asset set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAssetSet"
        },
        "adGroupAudienceView": {
          "description": "The ad group audience view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAudienceView"
        },
        "adGroupBidModifier": {
          "description": "The bid modifier referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier"
        },
        "adGroupCriterion": {
          "description": "The criterion referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion"
        },
        "adGroupCriterionCustomizer": {
          "description": "The ad group criterion customizer referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionCustomizer"
        },
        "adGroupCriterionLabel": {
          "description": "The ad group criterion label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionLabel"
        },
        "adGroupCriterionSimulation": {
          "description": "The ad group criterion simulation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionSimulation"
        },
        "adGroupCustomizer": {
          "description": "The ad group customizer referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCustomizer"
        },
        "adGroupLabel": {
          "description": "The ad group label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupLabel"
        },
        "adGroupSimulation": {
          "description": "The ad group simulation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupSimulation"
        },
        "adParameter": {
          "description": "The ad parameter referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdParameter"
        },
        "ageRangeView": {
          "description": "The age range view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AgeRangeView"
        },
        "adScheduleView": {
          "description": "The ad schedule view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AdScheduleView"
        },
        "aiMaxSearchTermAdCombinationView": {
          "description": "The AI Max search term ad combination view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AiMaxSearchTermAdCombinationView"
        },
        "domainCategory": {
          "description": "The domain category referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DomainCategory"
        },
        "asset": {
          "description": "The asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
        },
        "assetFieldTypeView": {
          "description": "The asset field type view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetFieldTypeView"
        },
        "channelAggregateAssetView": {
          "description": "The channel aggregate asset view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ChannelAggregateAssetView"
        },
        "campaignAggregateAssetView": {
          "description": "The campaign aggregate asset view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAggregateAssetView"
        },
        "assetGroupAsset": {
          "description": "The asset group asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupAsset"
        },
        "assetGroupSignal": {
          "description": "The asset group signal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupSignal"
        },
        "assetGroupListingGroupFilter": {
          "description": "The asset group listing group filter referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupListingGroupFilter"
        },
        "assetGroupProductGroupView": {
          "description": "The asset group product group view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupProductGroupView"
        },
        "assetGroupTopCombinationView": {
          "description": "The asset group top combination view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupTopCombinationView"
        },
        "assetGroup": {
          "description": "The asset group referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroup"
        },
        "assetSetAsset": {
          "description": "The asset set asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSetAsset"
        },
        "assetSet": {
          "description": "The asset set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSet"
        },
        "assetSetTypeView": {
          "description": "The asset set type view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSetTypeView"
        },
        "batchJob": {
          "description": "The batch job referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BatchJob"
        },
        "biddingDataExclusion": {
          "description": "The bidding data exclusion referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingDataExclusion"
        },
        "biddingSeasonalityAdjustment": {
          "description": "The bidding seasonality adjustment referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingSeasonalityAdjustment"
        },
        "biddingStrategy": {
          "description": "The bidding strategy referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingStrategy"
        },
        "biddingStrategySimulation": {
          "description": "The bidding strategy simulation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BiddingStrategySimulation"
        },
        "billingSetup": {
          "description": "The billing setup referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BillingSetup"
        },
        "callView": {
          "description": "The call view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CallView"
        },
        "campaignBudget": {
          "description": "The campaign budget referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBudget"
        },
        "campaign": {
          "description": "The campaign referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Campaign"
        },
        "campaignAsset": {
          "description": "The campaign asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAsset"
        },
        "campaignAssetSet": {
          "description": "The campaign asset set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAssetSet"
        },
        "campaignAudienceView": {
          "description": "The campaign audience view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAudienceView"
        },
        "campaignBidModifier": {
          "description": "The campaign bid modifier referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBidModifier"
        },
        "campaignConversionGoal": {
          "description": "The CampaignConversionGoal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignConversionGoal"
        },
        "campaignCriterion": {
          "description": "The campaign criterion referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCriterion"
        },
        "campaignCustomizer": {
          "description": "The campaign customizer referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCustomizer"
        },
        "campaignDraft": {
          "description": "The campaign draft referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignDraft"
        },
        "campaignGroup": {
          "description": "Campaign Group referenced in AWQL query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignGroup"
        },
        "campaignLabel": {
          "description": "The campaign label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignLabel"
        },
        "campaignLifecycleGoal": {
          "description": "The campaign lifecycle goal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignLifecycleGoal"
        },
        "campaignSearchTermInsight": {
          "description": "The campaign search term insight referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSearchTermInsight"
        },
        "campaignSearchTermView": {
          "description": "The campaign-level search term view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSearchTermView"
        },
        "campaignSharedSet": {
          "description": "Campaign Shared Set referenced in AWQL query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSharedSet"
        },
        "campaignSimulation": {
          "description": "The campaign simulation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignSimulation"
        },
        "carrierConstant": {
          "description": "The carrier constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CarrierConstant"
        },
        "changeEvent": {
          "description": "The ChangeEvent referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ChangeEvent"
        },
        "changeStatus": {
          "description": "The ChangeStatus referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ChangeStatus"
        },
        "combinedAudience": {
          "description": "The CombinedAudience referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CombinedAudience"
        },
        "audience": {
          "description": "The Audience referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Audience"
        },
        "conversionAction": {
          "description": "The conversion action referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionAction"
        },
        "conversionCustomVariable": {
          "description": "The conversion custom variable referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionCustomVariable"
        },
        "conversionGoalCampaignConfig": {
          "description": "The ConversionGoalCampaignConfig referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionGoalCampaignConfig"
        },
        "conversionValueRule": {
          "description": "The conversion value rule referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRule"
        },
        "conversionValueRuleSet": {
          "description": "The conversion value rule set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ConversionValueRuleSet"
        },
        "clickView": {
          "description": "The ClickView referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ClickView"
        },
        "currencyConstant": {
          "description": "The currency constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CurrencyConstant"
        },
        "customAudience": {
          "description": "The CustomAudience referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomAudience"
        },
        "customConversionGoal": {
          "description": "The CustomConversionGoal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomConversionGoal"
        },
        "customInterest": {
          "description": "The CustomInterest referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomInterest"
        },
        "customer": {
          "description": "The customer referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Customer"
        },
        "customerAsset": {
          "description": "The customer asset referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAsset"
        },
        "customerAssetSet": {
          "description": "The customer asset set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAssetSet"
        },
        "accessibleBiddingStrategy": {
          "description": "The accessible bidding strategy referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AccessibleBiddingStrategy"
        },
        "customerCustomizer": {
          "description": "The customer customizer referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerCustomizer"
        },
        "customerManagerLink": {
          "description": "The CustomerManagerLink referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerManagerLink"
        },
        "customerClientLink": {
          "description": "The CustomerClientLink referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerClientLink"
        },
        "customerClient": {
          "description": "The CustomerClient referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerClient"
        },
        "customerConversionGoal": {
          "description": "The CustomerConversionGoal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerConversionGoal"
        },
        "customerLabel": {
          "description": "The customer label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerLabel"
        },
        "customerLifecycleGoal": {
          "description": "The customer lifecycle goal referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerLifecycleGoal"
        },
        "customerNegativeCriterion": {
          "description": "The customer negative criterion referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerNegativeCriterion"
        },
        "customerSearchTermInsight": {
          "description": "The customer search term insight referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerSearchTermInsight"
        },
        "customerUserAccess": {
          "description": "The CustomerUserAccess referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerUserAccess"
        },
        "customerUserAccessInvitation": {
          "description": "The CustomerUserAccessInvitation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerUserAccessInvitation"
        },
        "customizerAttribute": {
          "description": "The customizer attribute referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomizerAttribute"
        },
        "dataLink": {
          "description": "The data link referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DataLink"
        },
        "detailContentSuitabilityPlacementView": {
          "description": "The detail content suitability placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DetailContentSuitabilityPlacementView"
        },
        "detailPlacementView": {
          "description": "The detail placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DetailPlacementView"
        },
        "detailedDemographic": {
          "description": "The detailed demographic referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DetailedDemographic"
        },
        "displayKeywordView": {
          "description": "The display keyword view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DisplayKeywordView"
        },
        "distanceView": {
          "description": "The distance view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DistanceView"
        },
        "dynamicSearchAdsSearchTermView": {
          "description": "The dynamic search ads search term view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DynamicSearchAdsSearchTermView"
        },
        "expandedLandingPageView": {
          "description": "The expanded landing page view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ExpandedLandingPageView"
        },
        "finalUrlExpansionAssetView": {
          "description": "The final url expansion asset view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__FinalUrlExpansionAssetView"
        },
        "genderView": {
          "description": "The gender view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GenderView"
        },
        "geoTargetConstant": {
          "description": "The geo target constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GeoTargetConstant"
        },
        "geographicView": {
          "description": "The geographic view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GeographicView"
        },
        "groupContentSuitabilityPlacementView": {
          "description": "The group content suitability placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GroupContentSuitabilityPlacementView"
        },
        "groupPlacementView": {
          "description": "The group placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GroupPlacementView"
        },
        "hotelGroupView": {
          "description": "The hotel group view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__HotelGroupView"
        },
        "hotelPerformanceView": {
          "description": "The hotel performance view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__HotelPerformanceView"
        },
        "hotelReconciliation": {
          "description": "The hotel reconciliation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__HotelReconciliation"
        },
        "incomeRangeView": {
          "description": "The income range view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__IncomeRangeView"
        },
        "keywordView": {
          "description": "The keyword view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordView"
        },
        "keywordPlan": {
          "description": "The keyword plan referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlan"
        },
        "keywordPlanCampaign": {
          "description": "The keyword plan campaign referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaign"
        },
        "keywordPlanCampaignKeyword": {
          "description": "The keyword plan campaign keyword referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanCampaignKeyword"
        },
        "keywordPlanAdGroup": {
          "description": "The keyword plan ad group referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroup"
        },
        "keywordPlanAdGroupKeyword": {
          "description": "The keyword plan ad group referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordPlanAdGroupKeyword"
        },
        "keywordThemeConstant": {
          "description": "The keyword theme constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordThemeConstant"
        },
        "label": {
          "description": "The label referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Label"
        },
        "landingPageView": {
          "description": "The landing page view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LandingPageView"
        },
        "languageConstant": {
          "description": "The language constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LanguageConstant"
        },
        "locationView": {
          "description": "The location view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocationView"
        },
        "locationInterestView": {
          "description": "The location interest view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocationInterestView"
        },
        "managedPlacementView": {
          "description": "The managed placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ManagedPlacementView"
        },
        "contentCriterionView": {
          "description": "The content criterion view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ContentCriterionView"
        },
        "mediaFile": {
          "description": "The media file referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MediaFile"
        },
        "localServicesEmployee": {
          "description": "The local services employee referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocalServicesEmployee"
        },
        "localServicesVerificationArtifact": {
          "description": "The local services verification artifact referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocalServicesVerificationArtifact"
        },
        "mobileAppCategoryConstant": {
          "description": "The mobile app category constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MobileAppCategoryConstant"
        },
        "mobileDeviceConstant": {
          "description": "The mobile device constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MobileDeviceConstant"
        },
        "offlineConversionUploadClientSummary": {
          "description": "Offline conversion upload summary at customer level.",
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadClientSummary"
        },
        "offlineConversionUploadConversionActionSummary": {
          "description": "Offline conversion upload summary at conversion type level.",
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadConversionActionSummary"
        },
        "offlineUserDataJob": {
          "description": "The offline user data job referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineUserDataJob"
        },
        "operatingSystemVersionConstant": {
          "description": "The operating system version constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__OperatingSystemVersionConstant"
        },
        "paidOrganicSearchTermView": {
          "description": "The paid organic search term view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__PaidOrganicSearchTermView"
        },
        "qualifyingQuestion": {
          "description": "The qualifying question referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__QualifyingQuestion"
        },
        "parentalStatusView": {
          "description": "The parental status view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ParentalStatusView"
        },
        "perStoreView": {
          "description": "The per store view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__PerStoreView"
        },
        "performanceMaxPlacementView": {
          "description": "The performance max placement view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__PerformanceMaxPlacementView"
        },
        "productCategoryConstant": {
          "description": "The product category referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductCategoryConstant"
        },
        "productGroupView": {
          "description": "The product group view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductGroupView"
        },
        "productLink": {
          "description": "The product link referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductLink"
        },
        "productLinkInvitation": {
          "description": "The product link invitation in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductLinkInvitation"
        },
        "recommendation": {
          "description": "The recommendation referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Recommendation"
        },
        "recommendationSubscription": {
          "description": "The recommendation subscription referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RecommendationSubscription"
        },
        "searchTermView": {
          "description": "The search term view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SearchTermView"
        },
        "sharedCriterion": {
          "description": "The shared set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedCriterion"
        },
        "sharedSet": {
          "description": "The shared set referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SharedSet"
        },
        "smartCampaignSetting": {
          "description": "The Smart campaign setting referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SmartCampaignSetting"
        },
        "shoppingPerformanceView": {
          "description": "The shopping performance view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ShoppingPerformanceView"
        },
        "shoppingProduct": {
          "description": "The shopping product referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ShoppingProduct"
        },
        "smartCampaignSearchTermView": {
          "description": "The Smart campaign search term view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__SmartCampaignSearchTermView"
        },
        "thirdPartyAppAnalyticsLink": {
          "description": "The AccountLink referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLink"
        },
        "topicView": {
          "description": "The topic view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__TopicView"
        },
        "travelActivityGroupView": {
          "description": "The travel activity group view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__TravelActivityGroupView"
        },
        "travelActivityPerformanceView": {
          "description": "The travel activity performance view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__TravelActivityPerformanceView"
        },
        "experiment": {
          "description": "The experiment referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Experiment"
        },
        "experimentArm": {
          "description": "The experiment arm referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ExperimentArm"
        },
        "userInterest": {
          "description": "The user interest referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserInterest"
        },
        "lifeEvent": {
          "description": "The life event referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LifeEvent"
        },
        "userList": {
          "description": "The user list referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserList"
        },
        "userListCustomerType": {
          "description": "The user list customer type in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserListCustomerType"
        },
        "userLocationView": {
          "description": "The user location view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserLocationView"
        },
        "remarketingAction": {
          "description": "The remarketing action referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__RemarketingAction"
        },
        "topicConstant": {
          "description": "The topic constant referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__TopicConstant"
        },
        "video": {
          "description": "The video referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Video"
        },
        "webpageView": {
          "description": "The webpage view referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__WebpageView"
        },
        "leadFormSubmissionData": {
          "description": "The lead form user submission referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionData"
        },
        "localServicesLead": {
          "description": "The local services lead referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocalServicesLead"
        },
        "localServicesLeadConversation": {
          "description": "The local services lead conversationreferenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__LocalServicesLeadConversation"
        },
        "androidPrivacySharedKeyGoogleAdGroup": {
          "description": "The android privacy shared key google ad group referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleAdGroup"
        },
        "androidPrivacySharedKeyGoogleCampaign": {
          "description": "The android privacy shared key google campaign referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleCampaign"
        },
        "androidPrivacySharedKeyGoogleNetworkType": {
          "description": "The android privacy shared key google network type referenced in the query.",
          "$ref": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleNetworkType"
        },
        "metrics": {
          "description": "The metrics.",
          "$ref": "GoogleAdsGoogleadsV21Common__Metrics"
        },
        "segments": {
          "description": "The segments.",
          "$ref": "GoogleAdsGoogleadsV21Common__Segments"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AccountBudget": {
      "id": "GoogleAdsGoogleadsV21Resources__AccountBudget",
      "description": "An account-level budget. It contains information about the budget itself, as well as the most recently approved changes to the budget and proposed changes that are pending approval. The proposed changes that are pending approval, if any, are found in 'pending_proposal'. Effective details about the budget are found in fields prefixed 'approved_', 'adjusted_' and those without a prefix. Since some effective details may differ from what the user had originally requested (for example, spending limit), these differences are juxtaposed through 'proposed_', 'approved_', and possibly 'adjusted_' fields. This resource is mutated using AccountBudgetProposal and cannot be mutated directly. A budget may have at most one pending proposal at any given time. It is read through pending_proposal. Once approved, a budget may be subject to adjustments, such as credit adjustments. Adjustments create differences between the 'approved' and 'adjusted' fields, which would otherwise be identical.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the account-level budget. AccountBudget resource names have the form: `customers/{customer_id}/accountBudgets/{account_budget_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the account-level budget.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billingSetup": {
          "description": "Output only. The resource name of the billing setup associated with this account-level budget. BillingSetup resource names have the form: `customers/{customer_id}/billingSetups/{billing_setup_id}`",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of this account-level budget.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The account budget is pending approval.",
            "The account budget has been approved.",
            "The account budget has been cancelled by the user."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "APPROVED",
            "CANCELLED"
          ]
        },
        "name": {
          "description": "Output only. The name of the account-level budget.",
          "readOnly": true,
          "type": "string"
        },
        "proposedStartDateTime": {
          "description": "Output only. The proposed start time of the account-level budget in yyyy-MM-dd HH:mm:ss format. If a start time type of NOW was proposed, this is the time of request.",
          "readOnly": true,
          "type": "string"
        },
        "approvedStartDateTime": {
          "description": "Output only. The approved start time of the account-level budget in yyyy-MM-dd HH:mm:ss format. For example, if a new budget is approved after the proposed start time, the approved start time is the time of approval.",
          "readOnly": true,
          "type": "string"
        },
        "totalAdjustmentsMicros": {
          "description": "Output only. The total adjustments amount. An example of an adjustment is courtesy credits.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "amountServedMicros": {
          "description": "Output only. The value of Ads that have been served, in micros. This includes overdelivery costs, in which case a credit might be automatically applied to the budget (see total_adjustments_micros).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "purchaseOrderNumber": {
          "description": "Output only. A purchase order number is a value that helps users reference this budget in their monthly invoices.",
          "readOnly": true,
          "type": "string"
        },
        "notes": {
          "description": "Output only. Notes associated with the budget.",
          "readOnly": true,
          "type": "string"
        },
        "pendingProposal": {
          "description": "Output only. The pending proposal to modify this budget, if applicable.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccountBudget_PendingAccountBudgetProposal"
        },
        "proposedEndDateTime": {
          "description": "Output only. The proposed end time in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "proposedEndTimeType": {
          "description": "Output only. The proposed end time as a well-defined type, for example, FOREVER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "approvedEndDateTime": {
          "description": "Output only. The approved end time in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "approvedEndTimeType": {
          "description": "Output only. The approved end time as a well-defined type, for example, FOREVER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "proposedSpendingLimitMicros": {
          "description": "Output only. The proposed spending limit in micros. One million is equivalent to one unit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "proposedSpendingLimitType": {
          "description": "Output only. The proposed spending limit as a well-defined type, for example, INFINITE.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        },
        "approvedSpendingLimitMicros": {
          "description": "Output only. The approved spending limit in micros. One million is equivalent to one unit. This will only be populated if the proposed spending limit is finite, and will always be greater than or equal to the proposed spending limit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "approvedSpendingLimitType": {
          "description": "Output only. The approved spending limit as a well-defined type, for example, INFINITE. This will only be populated if the approved spending limit is INFINITE.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        },
        "adjustedSpendingLimitMicros": {
          "description": "Output only. The adjusted spending limit in micros. One million is equivalent to one unit. If the approved spending limit is finite, the adjusted spending limit may vary depending on the types of adjustments applied to this budget, if applicable. The different kinds of adjustments are described here: https://support.google.com/google-ads/answer/1704323 For example, a debit adjustment reduces how much the account is allowed to spend.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "adjustedSpendingLimitType": {
          "description": "Output only. The adjusted spending limit as a well-defined type, for example, INFINITE. This will only be populated if the adjusted spending limit is INFINITE, which is guaranteed to be true if the approved spending limit is INFINITE.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccountBudget_PendingAccountBudgetProposal": {
      "id": "GoogleAdsGoogleadsV21Resources_AccountBudget_PendingAccountBudgetProposal",
      "description": "A pending proposal associated with the enclosing account-level budget, if applicable.",
      "type": "object",
      "properties": {
        "accountBudgetProposal": {
          "description": "Output only. The resource name of the proposal. AccountBudgetProposal resource names have the form: `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`",
          "readOnly": true,
          "type": "string"
        },
        "proposalType": {
          "description": "Output only. The type of this proposal, for example, END to end the budget associated with this proposal.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Identifies a request to create a new budget.",
            "Identifies a request to edit an existing budget.",
            "Identifies a request to end a budget that has already started.",
            "Identifies a request to remove a budget that hasn't started yet."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CREATE",
            "UPDATE",
            "END",
            "REMOVE"
          ]
        },
        "name": {
          "description": "Output only. The name to assign to the account-level budget.",
          "readOnly": true,
          "type": "string"
        },
        "startDateTime": {
          "description": "Output only. The start time in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "purchaseOrderNumber": {
          "description": "Output only. A purchase order number is a value that helps users reference this budget in their monthly invoices.",
          "readOnly": true,
          "type": "string"
        },
        "notes": {
          "description": "Output only. Notes associated with this budget.",
          "readOnly": true,
          "type": "string"
        },
        "creationDateTime": {
          "description": "Output only. The time when this account-level budget proposal was created. Formatted as yyyy-MM-dd HH:mm:ss.",
          "readOnly": true,
          "type": "string"
        },
        "endDateTime": {
          "description": "Output only. The end time in yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "endTimeType": {
          "description": "Output only. The end time as a well-defined type, for example, FOREVER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "spendingLimitMicros": {
          "description": "Output only. The spending limit in micros. One million is equivalent to one unit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "spendingLimitType": {
          "description": "Output only. The spending limit as a well-defined type, for example, INFINITE.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Infinite, indicates unlimited spending power."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INFINITE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetCombinationView": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetCombinationView",
      "description": "A view on the usage of ad group ad asset combination. Now we only support AdGroupAdAssetCombinationView for Responsive Search Ads, with more ad types planned for the future.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad group ad asset combination view. The combination ID is 128 bits long, where the upper 64 bits are stored in asset_combination_id_high, and the lower 64 bits are stored in asset_combination_id_low. AdGroupAd Asset Combination view resource names have the form: `customers/{customer_id}/adGroupAdAssetCombinationViews/{AdGroupAd.ad_group_id}~{AdGroupAd.ad.ad_id}~{AssetCombination.asset_combination_id_low}~{AssetCombination.asset_combination_id_high}`",
          "readOnly": true,
          "type": "string"
        },
        "servedAssets": {
          "description": "Output only. Served assets.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetUsage"
          }
        },
        "enabled": {
          "description": "Output only. The status between the asset combination and the latest version of the ad. If true, the asset combination is linked to the latest version of the ad. If false, it means the link once existed but has been removed and is no longer present in the latest version of the ad.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AssetUsage": {
      "id": "GoogleAdsGoogleadsV21Common__AssetUsage",
      "description": "Contains the usage information of the asset.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "Resource name of the asset.",
          "type": "string"
        },
        "servedAssetFieldType": {
          "description": "The served field type of the asset.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The asset is used in headline 1.",
            "The asset is used in headline 2.",
            "The asset is used in headline 3.",
            "The asset is used in description 1.",
            "The asset is used in description 2.",
            "The asset was used in a headline. Use this only if there is only one headline in the ad. Otherwise, use the HEADLINE_1, HEADLINE_2 or HEADLINE_3 enums",
            "The asset was used as a headline in portrait image.",
            "The asset was used in a long headline (used in MultiAssetResponsiveAd).",
            "The asset was used in a description. Use this only if there is only one description in the ad. Otherwise, use the DESCRIPTION_1 or DESCRIPTION_@ enums",
            "The asset was used as description in portrait image.",
            "The asset was used as business name in portrait image.",
            "The asset was used as business name.",
            "The asset was used as a marketing image.",
            "The asset was used as a marketing image in portrait image.",
            "The asset was used as a square marketing image.",
            "The asset was used as a portrait marketing image.",
            "The asset was used as a logo.",
            "The asset was used as a landscape logo.",
            "The asset was used as a call-to-action.",
            "The asset was used as a YouTube video.",
            "This asset is used as a sitelink.",
            "This asset is used as a call.",
            "This asset is used as a mobile app.",
            "This asset is used as a callout.",
            "This asset is used as a structured snippet.",
            "This asset is used as a price.",
            "This asset is used as a promotion.",
            "This asset is used as an image.",
            "The asset is used as a lead form.",
            "The asset is used as a business logo.",
            "The asset is used as a description prefix."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE_1",
            "HEADLINE_2",
            "HEADLINE_3",
            "DESCRIPTION_1",
            "DESCRIPTION_2",
            "HEADLINE",
            "HEADLINE_IN_PORTRAIT",
            "LONG_HEADLINE",
            "DESCRIPTION",
            "DESCRIPTION_IN_PORTRAIT",
            "BUSINESS_NAME_IN_PORTRAIT",
            "BUSINESS_NAME",
            "MARKETING_IMAGE",
            "MARKETING_IMAGE_IN_PORTRAIT",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "CALL_TO_ACTION",
            "YOU_TUBE_VIDEO",
            "SITELINK",
            "CALL",
            "MOBILE_APP",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "PRICE",
            "PROMOTION",
            "AD_IMAGE",
            "LEAD_FORM",
            "BUSINESS_LOGO",
            "DESCRIPTION_PREFIX"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetView": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetView",
      "description": "A link between an AdGroupAd and an Asset. AdGroupAdAssetView supports AppAds, Demand Gen campaigns, and Responsive Search Ads.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad group ad asset view. Ad group ad asset view resource names have the form (Before V4): `customers/{customer_id}/adGroupAdAssets/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.field_type}` Ad group ad asset view resource names have the form (Beginning from V4): `customers/{customer_id}/adGroupAdAssetViews/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.field_type}`",
          "readOnly": true,
          "type": "string"
        },
        "adGroupAd": {
          "description": "Output only. The ad group ad to which the asset is linked.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. The asset which is linked to the ad group ad.",
          "readOnly": true,
          "type": "string"
        },
        "fieldType": {
          "description": "Output only. Role that the asset takes in the ad.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "enabled": {
          "description": "Output only. The status between the asset and the latest version of the ad. If true, the asset is linked to the latest version of the ad. If false, it means the link once existed but has been removed and is no longer present in the latest version of the ad.",
          "readOnly": true,
          "type": "boolean"
        },
        "policySummary": {
          "description": "Output only. Policy information for the ad group ad asset.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetPolicySummary"
        },
        "performanceLabel": {
          "description": "Output only. Performance of an asset linkage.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "This asset does not yet have any performance informantion. This may be because it is still under review.",
            "The asset has started getting impressions but the stats are not statistically significant enough to get an asset performance label.",
            "Worst performing assets.",
            "Good performing assets.",
            "Best performing assets."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "LEARNING",
            "LOW",
            "GOOD",
            "BEST"
          ]
        },
        "pinnedField": {
          "description": "Output only. Pinned field.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The asset is used in headline 1.",
            "The asset is used in headline 2.",
            "The asset is used in headline 3.",
            "The asset is used in description 1.",
            "The asset is used in description 2.",
            "The asset was used in a headline. Use this only if there is only one headline in the ad. Otherwise, use the HEADLINE_1, HEADLINE_2 or HEADLINE_3 enums",
            "The asset was used as a headline in portrait image.",
            "The asset was used in a long headline (used in MultiAssetResponsiveAd).",
            "The asset was used in a description. Use this only if there is only one description in the ad. Otherwise, use the DESCRIPTION_1 or DESCRIPTION_@ enums",
            "The asset was used as description in portrait image.",
            "The asset was used as business name in portrait image.",
            "The asset was used as business name.",
            "The asset was used as a marketing image.",
            "The asset was used as a marketing image in portrait image.",
            "The asset was used as a square marketing image.",
            "The asset was used as a portrait marketing image.",
            "The asset was used as a logo.",
            "The asset was used as a landscape logo.",
            "The asset was used as a call-to-action.",
            "The asset was used as a YouTube video.",
            "This asset is used as a sitelink.",
            "This asset is used as a call.",
            "This asset is used as a mobile app.",
            "This asset is used as a callout.",
            "This asset is used as a structured snippet.",
            "This asset is used as a price.",
            "This asset is used as a promotion.",
            "This asset is used as an image.",
            "The asset is used as a lead form.",
            "The asset is used as a business logo.",
            "The asset is used as a description prefix."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE_1",
            "HEADLINE_2",
            "HEADLINE_3",
            "DESCRIPTION_1",
            "DESCRIPTION_2",
            "HEADLINE",
            "HEADLINE_IN_PORTRAIT",
            "LONG_HEADLINE",
            "DESCRIPTION",
            "DESCRIPTION_IN_PORTRAIT",
            "BUSINESS_NAME_IN_PORTRAIT",
            "BUSINESS_NAME",
            "MARKETING_IMAGE",
            "MARKETING_IMAGE_IN_PORTRAIT",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "CALL_TO_ACTION",
            "YOU_TUBE_VIDEO",
            "SITELINK",
            "CALL",
            "MOBILE_APP",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "PRICE",
            "PROMOTION",
            "AD_IMAGE",
            "LEAD_FORM",
            "BUSINESS_LOGO",
            "DESCRIPTION_PREFIX"
          ]
        },
        "source": {
          "description": "Output only. Source of the ad group ad asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetPolicySummary": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAdAssetPolicySummary",
      "description": "Contains policy information for an ad group ad asset.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "Output only. The list of policy findings for the ad group ad asset.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        },
        "reviewStatus": {
          "description": "Output only. Where in the review process this ad group ad asset is.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Currently under review.",
            "Primary review complete. Other reviews may be continuing.",
            "The resource has been resubmitted for approval or its policy decision has been appealed.",
            "The resource is eligible and may be serving but could still undergo further review."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REVIEW_IN_PROGRESS",
            "REVIEWED",
            "UNDER_APPEAL",
            "ELIGIBLE_MAY_SERVE"
          ]
        },
        "approvalStatus": {
          "description": "Output only. The overall approval status of this ad group ad asset, calculated based on the status of its individual policy topic entries.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Will not serve.",
            "Serves with restrictions.",
            "Serves without restrictions.",
            "Will not serve in targeted countries, but may serve for users who are searching for information about the targeted countries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISAPPROVED",
            "APPROVED_LIMITED",
            "APPROVED",
            "AREA_OF_INTEREST_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupAudienceView": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupAudienceView",
      "description": "An ad group audience view. Includes performance data from interests and remarketing lists for Display Network and YouTube Network ads, and remarketing lists for search ads (RLSA), aggregated at the audience level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad group audience view. Ad group audience view resource names have the form: `customers/{customer_id}/adGroupAudienceViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupCriterionSimulation": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupCriterionSimulation",
      "description": "An ad group criterion simulation. Supported combinations of advertising channel type, criterion type, simulation type, and simulation modification method are detailed below respectively. Hotel AdGroupCriterion simulation operations starting in V5. 1. DISPLAY - KEYWORD - CPC_BID - UNIFORM 2. SEARCH - KEYWORD - CPC_BID - UNIFORM 3. SHOPPING - LISTING_GROUP - CPC_BID - UNIFORM 4. HOTEL - LISTING_GROUP - CPC_BID - UNIFORM 5. HOTEL - LISTING_GROUP - PERCENT_CPC_BID - UNIFORM",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad group criterion simulation. Ad group criterion simulation resource names have the form: `customers/{customer_id}/adGroupCriterionSimulations/{ad_group_id}~{criterion_id}~{type}~{modification_method}~{start_date}~{end_date}`",
          "readOnly": true,
          "type": "string"
        },
        "adGroupId": {
          "description": "Output only. AdGroup ID of the simulation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "criterionId": {
          "description": "Output only. Criterion ID of the simulation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The field that the simulation modifies.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The simulation is for a CPC bid.",
            "The simulation is for a CPV bid.",
            "The simulation is for a CPA target.",
            "The simulation is for a bid modifier.",
            "The simulation is for a ROAS target.",
            "The simulation is for a percent CPC bid.",
            "The simulation is for an impression share target.",
            "The simulation is for a budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CPC_BID",
            "CPV_BID",
            "TARGET_CPA",
            "BID_MODIFIER",
            "TARGET_ROAS",
            "PERCENT_CPC_BID",
            "TARGET_IMPRESSION_SHARE",
            "BUDGET"
          ]
        },
        "modificationMethod": {
          "description": "Output only. How the simulation modifies the field.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The values in a simulation were applied to all children of a given resource uniformly. Overrides on child resources were not respected.",
            "The values in a simulation were applied to the given resource. Overrides on child resources were respected, and traffic estimates do not include these resources.",
            "The values in a simulation were all scaled by the same factor. For example, in a simulated TargetCpa campaign, the campaign target and all ad group targets were scaled by a factor of X."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNIFORM",
            "DEFAULT",
            "SCALING"
          ]
        },
        "startDate": {
          "description": "Output only. First day on which the simulation is based, in YYYY-MM-DD format.",
          "readOnly": true,
          "type": "string"
        },
        "endDate": {
          "description": "Output only. Last day on which the simulation is based, in YYYY-MM-DD format.",
          "readOnly": true,
          "type": "string"
        },
        "cpcBidPointList": {
          "description": "Output only. Simulation points if the simulation type is CPC_BID.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPointList"
        },
        "percentCpcBidPointList": {
          "description": "Output only. Simulation points if the simulation type is PERCENT_CPC_BID.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPointList"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CpcBidSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPointList",
      "description": "A container for simulation points for simulations of type CPC_BID.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of CPC bid amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CpcBidSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPoint",
      "description": "Projected metrics for a specific CPC bid amount.",
      "type": "object",
      "properties": {
        "requiredBudgetAmountMicros": {
          "description": "Projected required daily budget that the advertiser must set in order to receive the estimated traffic, in micros of advertiser currency.",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions. Only search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidMicros": {
          "description": "The simulated CPC bid upon which projected metrics are based.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidScalingModifier": {
          "description": "The simulated scaling modifier upon which projected metrics are based. All CPC bids relevant to the simulated entity are scaled by this modifier.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPointList",
      "description": "A container for simulation points for simulations of type PERCENT_CPC_BID.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of percent CPC bid amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__PercentCpcBidSimulationPoint",
      "description": "Projected metrics for a specific percent CPC amount. Only Hotel advertising channel type supports this field.",
      "type": "object",
      "properties": {
        "percentCpcBidMicros": {
          "description": "The simulated percent CPC upon which projected metrics are based. Percent CPC expressed as fraction of the advertised price for some good or service. The value stored here is 1,000,000 * [fraction].",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions in local currency.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdGroupSimulation": {
      "id": "GoogleAdsGoogleadsV21Resources__AdGroupSimulation",
      "description": "An ad group simulation. Supported combinations of advertising channel type, simulation type and simulation modification method is detailed below respectively. 1. SEARCH - CPC_BID - DEFAULT 2. SEARCH - CPC_BID - UNIFORM 3. SEARCH - TARGET_CPA - UNIFORM 4. SEARCH - TARGET_ROAS - UNIFORM 5. DISPLAY - CPC_BID - DEFAULT 6. DISPLAY - CPC_BID - UNIFORM 7. DISPLAY - TARGET_CPA - UNIFORM",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad group simulation. Ad group simulation resource names have the form: `customers/{customer_id}/adGroupSimulations/{ad_group_id}~{type}~{modification_method}~{start_date}~{end_date}`",
          "readOnly": true,
          "type": "string"
        },
        "adGroupId": {
          "description": "Output only. Ad group id of the simulation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The field that the simulation modifies.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The simulation is for a CPC bid.",
            "The simulation is for a CPV bid.",
            "The simulation is for a CPA target.",
            "The simulation is for a bid modifier.",
            "The simulation is for a ROAS target.",
            "The simulation is for a percent CPC bid.",
            "The simulation is for an impression share target.",
            "The simulation is for a budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CPC_BID",
            "CPV_BID",
            "TARGET_CPA",
            "BID_MODIFIER",
            "TARGET_ROAS",
            "PERCENT_CPC_BID",
            "TARGET_IMPRESSION_SHARE",
            "BUDGET"
          ]
        },
        "modificationMethod": {
          "description": "Output only. How the simulation modifies the field.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The values in a simulation were applied to all children of a given resource uniformly. Overrides on child resources were not respected.",
            "The values in a simulation were applied to the given resource. Overrides on child resources were respected, and traffic estimates do not include these resources.",
            "The values in a simulation were all scaled by the same factor. For example, in a simulated TargetCpa campaign, the campaign target and all ad group targets were scaled by a factor of X."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNIFORM",
            "DEFAULT",
            "SCALING"
          ]
        },
        "startDate": {
          "description": "Output only. First day on which the simulation is based, in YYYY-MM-DD format.",
          "readOnly": true,
          "type": "string"
        },
        "endDate": {
          "description": "Output only. Last day on which the simulation is based, in YYYY-MM-DD format",
          "readOnly": true,
          "type": "string"
        },
        "cpcBidPointList": {
          "description": "Output only. Simulation points if the simulation type is CPC_BID.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPointList"
        },
        "cpvBidPointList": {
          "description": "Output only. Simulation points if the simulation type is CPV_BID.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__CpvBidSimulationPointList"
        },
        "targetCpaPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_CPA.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPointList"
        },
        "targetRoasPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_ROAS.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPointList"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CpvBidSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__CpvBidSimulationPointList",
      "description": "A container for simulation points for simulations of type CPV_BID.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of CPV bid amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CpvBidSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CpvBidSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__CpvBidSimulationPoint",
      "description": "Projected metrics for a specific CPV bid amount.",
      "type": "object",
      "properties": {
        "cpvBidMicros": {
          "description": "The simulated CPV bid upon which projected metrics are based.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "views": {
          "description": "Projected number of views.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPointList",
      "description": "A container for simulation points for simulations of type TARGET_CPA.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of target CPA amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPoint",
      "description": "Projected metrics for a specific target CPA amount.",
      "type": "object",
      "properties": {
        "requiredBudgetAmountMicros": {
          "description": "Projected required daily budget that the advertiser must set in order to receive the estimated traffic, in micros of advertiser currency.",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "appInstalls": {
          "description": "Projected number of app installs.",
          "type": "number",
          "format": "double"
        },
        "inAppActions": {
          "description": "Projected number of in-app actions.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions. Only search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        },
        "interactions": {
          "description": "Projected number of interactions. Only discovery advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        },
        "targetCpaMicros": {
          "description": "The simulated target CPA upon which projected metrics are based.",
          "type": "string",
          "format": "int64"
        },
        "targetCpaScalingModifier": {
          "description": "The simulated scaling modifier upon which projected metrics are based. All CPA targets relevant to the simulated entity are scaled by this modifier.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPointList",
      "description": "A container for simulation points for simulations of type TARGET_ROAS.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of target ROAS amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPoint",
      "description": "Projected metrics for a specific target ROAS amount.",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "The simulated target ROAS upon which projected metrics are based.",
          "type": "number",
          "format": "double"
        },
        "requiredBudgetAmountMicros": {
          "description": "Projected required daily budget that the advertiser must set in order to receive the estimated traffic, in micros of advertiser currency.",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions. Only Search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AgeRangeView": {
      "id": "GoogleAdsGoogleadsV21Resources__AgeRangeView",
      "description": "An age range view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the age range view. Age range view resource names have the form: `customers/{customer_id}/ageRangeViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdScheduleView": {
      "id": "GoogleAdsGoogleadsV21Resources__AdScheduleView",
      "description": "An ad schedule view summarizes the performance of campaigns by AdSchedule criteria.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the ad schedule view. AdSchedule view resource names have the form: `customers/{customer_id}/adScheduleViews/{campaign_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AiMaxSearchTermAdCombinationView": {
      "id": "GoogleAdsGoogleadsV21Resources__AiMaxSearchTermAdCombinationView",
      "description": "AiMaxSearchTermAdCombinationView Resource.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the AI Max Search Term Ad Combination view AI Max Search Term Ad Combination view resource names have the form: `customers/{customer_id}/aiMaxSearchTermAdCombinationViews/{ad_group_id}~{URL-base64_search_term}~{URL-base64_landing_page}~{URL-base64_headline}`",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. Ad group where the search term served.",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. The search term that triggered the ad. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "landingPage": {
          "description": "Output only. The destination URL, which was dynamically generated. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "headline": {
          "description": "Output only. The concatenated string containing headline assets for the ad. Up to three headline assets are concatenated, separated by \" | \". This field is read-only.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DomainCategory": {
      "id": "GoogleAdsGoogleadsV21Resources__DomainCategory",
      "description": "A category generated automatically by crawling a domain. If a campaign uses the DynamicSearchAdsSetting, then domain categories will be generated for the domain. The categories can be targeted using WebpageConditionInfo. See: https://support.google.com/google-ads/answer/2471185",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the domain category. Domain category resource names have the form: `customers/{customer_id}/domainCategories/{campaign_id}~{category_base64}~{language_code}`",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign this category is recommended for.",
          "readOnly": true,
          "type": "string"
        },
        "category": {
          "description": "Output only. Recommended category for the website domain, for example, if you have a website about electronics, the categories could be \"cameras\", \"televisions\", etc.",
          "readOnly": true,
          "type": "string"
        },
        "languageCode": {
          "description": "Output only. The language code specifying the language of the website, for example, \"en\" for English. The language can be specified in the DynamicSearchAdsSetting required for dynamic search ads. This is the language of the pages from your website that you want Google Ads to find, create ads for, and match searches with.",
          "readOnly": true,
          "type": "string"
        },
        "domain": {
          "description": "Output only. The domain for the website. The domain can be specified in the DynamicSearchAdsSetting required for dynamic search ads.",
          "readOnly": true,
          "type": "string"
        },
        "coverageFraction": {
          "description": "Output only. Fraction of pages on your site that this category matches.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "categoryRank": {
          "description": "Output only. The position of this category in the set of categories. Lower numbers indicate a better match for the domain. null indicates not recommended.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "hasChildren": {
          "description": "Output only. Indicates whether this category has sub-categories.",
          "readOnly": true,
          "type": "boolean"
        },
        "recommendedCpcBidMicros": {
          "description": "Output only. The recommended cost per click for the category.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetFieldTypeView": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetFieldTypeView",
      "description": "An asset field type view. This view reports non-overcounted metrics for each asset field type when the asset is used as extension.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the asset field type view. Asset field type view resource names have the form: `customers/{customer_id}/assetFieldTypeViews/{field_type}`",
          "readOnly": true,
          "type": "string"
        },
        "fieldType": {
          "description": "Output only. The asset field type of the asset field type view.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ChannelAggregateAssetView": {
      "id": "GoogleAdsGoogleadsV21Resources__ChannelAggregateAssetView",
      "description": "A channel-level aggregate asset view that shows where the asset is linked, performamce of the asset and stats.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the channel aggregate asset view. Channel aggregate asset view resource names have the form: `customers/{customer_id}/channelAggregateAssetViews/{ChannelAssetV2.advertising_channel_type}~{ChannelAssetV2.asset_id}~{ChannelAssetV2.asset_source}~{ChannelAssetV2.field_type}\"`",
          "readOnly": true,
          "type": "string"
        },
        "advertisingChannelType": {
          "description": "Output only. Channel in which the asset served.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search Network. Includes display bundled, and Search+ campaigns.",
            "Google Display Network only.",
            "Shopping campaigns serve on the shopping property and on google.com search results.",
            "Hotel Ads campaigns.",
            "Video campaigns.",
            "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
            "Local ads campaigns.",
            "Smart campaigns.",
            "Performance Max campaigns.",
            "Local services campaigns.",
            "Travel campaigns.",
            "Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "SHOPPING",
            "HOTEL",
            "VIDEO",
            "MULTI_CHANNEL",
            "LOCAL",
            "SMART",
            "PERFORMANCE_MAX",
            "LOCAL_SERVICES",
            "TRAVEL",
            "DEMAND_GEN"
          ]
        },
        "asset": {
          "description": "Output only. The ID of the asset.",
          "readOnly": true,
          "type": "string"
        },
        "assetSource": {
          "description": "Output only. Source of the asset link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "fieldType": {
          "description": "Output only. FieldType of the asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignAggregateAssetView": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignAggregateAssetView",
      "description": "A campaign-level aggregate asset view that shows where the asset is linked, performamce of the asset and stats.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the campaign aggregate asset view. Campaign aggregate asset view resource names have the form: `customers/{customer_id}/campaignAggregateAssetViews/{Campaign.campaign_id}~{Asset.asset_id}~{AssetLinkSource.asset_link_source}~{AssetFieldType.field_type}`",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. Campaign in which the asset served.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. The ID of the asset.",
          "readOnly": true,
          "type": "string"
        },
        "assetSource": {
          "description": "Output only. Source of the asset link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset or asset link is provided by advertiser.",
            "The asset or asset link is generated by Google."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATICALLY_CREATED"
          ]
        },
        "fieldType": {
          "description": "Output only. FieldType of the asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupProductGroupView": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupProductGroupView",
      "description": "An asset group product group view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the asset group product group view. Asset group product group view resource names have the form: `customers/{customer_id}/assetGroupProductGroupViews/{asset_group_id}~{listing_group_filter_id}`",
          "readOnly": true,
          "type": "string"
        },
        "assetGroup": {
          "description": "Output only. The asset group associated with the listing group filter.",
          "readOnly": true,
          "type": "string"
        },
        "assetGroupListingGroupFilter": {
          "description": "Output only. The resource name of the asset group listing group filter.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupTopCombinationView": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupTopCombinationView",
      "description": "A view on the usage of asset group asset top combinations.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the asset group top combination view. AssetGroup Top Combination view resource names have the form: `\"customers/{customer_id}/assetGroupTopCombinationViews/{asset_group_id}~{asset_combination_category}\"",
          "readOnly": true,
          "type": "string"
        },
        "assetGroupTopCombinations": {
          "description": "Output only. The top combinations of assets that served together.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__AssetGroupAssetCombinationData"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetGroupAssetCombinationData": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetGroupAssetCombinationData",
      "description": "Asset group asset combination data",
      "type": "object",
      "properties": {
        "assetCombinationServedAssets": {
          "description": "Output only. Served assets.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AssetUsage"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AssetSetTypeView": {
      "id": "GoogleAdsGoogleadsV21Resources__AssetSetTypeView",
      "description": "An asset set type view. This view reports non-overcounted metrics for each asset set type. Child asset set types are not included in this report. Their stats are aggregated under the parent asset set type.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the asset set type view. Asset set type view resource names have the form: `customers/{customer_id}/assetSetTypeViews/{asset_set_type}`",
          "readOnly": true,
          "type": "string"
        },
        "assetSetType": {
          "description": "Output only. The asset set type of the asset set type view.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Page asset set.",
            "Dynamic education asset set.",
            "Google Merchant Center asset set.",
            "Dynamic real estate asset set.",
            "Dynamic custom asset set.",
            "Dynamic hotels and rentals asset set.",
            "Dynamic flights asset set.",
            "Dynamic travel asset set.",
            "Dynamic local asset set.",
            "Dynamic jobs asset set.",
            "Location sync level asset set.",
            "Business Profile location group asset set.",
            "Chain location group asset set which can be used for both owned locations and affiliate locations.",
            "Static location group asset set which can be used for both owned locations and affiliate locations.",
            "Hotel Property asset set which is used to link a hotel property feed to Performance Max for travel goals campaigns.",
            "Travel Feed asset set type. Can represent either a Hotel feed or a Things to Do (activities) feed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PAGE_FEED",
            "DYNAMIC_EDUCATION",
            "MERCHANT_CENTER_FEED",
            "DYNAMIC_REAL_ESTATE",
            "DYNAMIC_CUSTOM",
            "DYNAMIC_HOTELS_AND_RENTALS",
            "DYNAMIC_FLIGHTS",
            "DYNAMIC_TRAVEL",
            "DYNAMIC_LOCAL",
            "DYNAMIC_JOBS",
            "LOCATION_SYNC",
            "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP",
            "CHAIN_DYNAMIC_LOCATION_GROUP",
            "STATIC_LOCATION_GROUP",
            "HOTEL_PROPERTY",
            "TRAVEL_FEED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BatchJob": {
      "id": "GoogleAdsGoogleadsV21Resources__BatchJob",
      "description": "A list of mutates being processed asynchronously. The mutates are uploaded by the user. The mutates themselves aren't readable and the results of the job can only be read using BatchJobService.ListBatchJobResults.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the batch job. Batch job resource names have the form: `customers/{customer_id}/batchJobs/{batch_job_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of this batch job.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "nextAddSequenceToken": {
          "description": "Output only. The next sequence token to use when adding operations. Only set when the batch job status is PENDING.",
          "readOnly": true,
          "type": "string"
        },
        "metadata": {
          "description": "Output only. Contains additional information about this batch job.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_BatchJob_BatchJobMetadata"
        },
        "status": {
          "description": "Output only. Status of this batch job.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The job is not currently running.",
            "The job is running.",
            "The job is done."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "RUNNING",
            "DONE"
          ]
        },
        "longRunningOperation": {
          "description": "Output only. The resource name of the long-running operation that can be used to poll for completion. Only set when the batch job status is RUNNING or DONE.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_BatchJob_BatchJobMetadata": {
      "id": "GoogleAdsGoogleadsV21Resources_BatchJob_BatchJobMetadata",
      "description": "Additional information about the batch job. This message is also used as metadata returned in batch job Long Running Operations.",
      "type": "object",
      "properties": {
        "creationDateTime": {
          "description": "Output only. The time when this batch job was created. Formatted as yyyy-mm-dd hh:mm:ss. Example: \"2018-03-05 09:15:00\"",
          "readOnly": true,
          "type": "string"
        },
        "startDateTime": {
          "description": "Output only. The time when this batch job started running. Formatted as yyyy-mm-dd hh:mm:ss. Example: \"2018-03-05 09:15:30\"",
          "readOnly": true,
          "type": "string"
        },
        "completionDateTime": {
          "description": "Output only. The time when this batch job was completed. Formatted as yyyy-MM-dd HH:mm:ss. Example: \"2018-03-05 09:16:00\"",
          "readOnly": true,
          "type": "string"
        },
        "estimatedCompletionRatio": {
          "description": "Output only. The fraction (between 0.0 and 1.0) of mutates that have been processed. This is empty if the job hasn't started running yet.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "operationCount": {
          "description": "Output only. The number of mutate operations in the batch job.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "executedOperationCount": {
          "description": "Output only. The number of mutate operations executed by the batch job. Present only if the job has started running.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "executionLimitSeconds": {
          "description": "Immutable. The approximate upper bound for how long a batch job can be executed, in seconds. If the job runs more than the given upper bound, the job will be canceled.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BiddingStrategySimulation": {
      "id": "GoogleAdsGoogleadsV21Resources__BiddingStrategySimulation",
      "description": "A bidding strategy simulation. Supported combinations of simulation type and simulation modification method are detailed below respectively. 1. TARGET_CPA - UNIFORM 2. TARGET_ROAS - UNIFORM",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the bidding strategy simulation. Bidding strategy simulation resource names have the form: `customers/{customer_id}/biddingStrategySimulations/{bidding_strategy_id}~{type}~{modification_method}~{start_date}~{end_date}`",
          "readOnly": true,
          "type": "string"
        },
        "biddingStrategyId": {
          "description": "Output only. Bidding strategy shared set id of the simulation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The field that the simulation modifies.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The simulation is for a CPC bid.",
            "The simulation is for a CPV bid.",
            "The simulation is for a CPA target.",
            "The simulation is for a bid modifier.",
            "The simulation is for a ROAS target.",
            "The simulation is for a percent CPC bid.",
            "The simulation is for an impression share target.",
            "The simulation is for a budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CPC_BID",
            "CPV_BID",
            "TARGET_CPA",
            "BID_MODIFIER",
            "TARGET_ROAS",
            "PERCENT_CPC_BID",
            "TARGET_IMPRESSION_SHARE",
            "BUDGET"
          ]
        },
        "modificationMethod": {
          "description": "Output only. How the simulation modifies the field.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The values in a simulation were applied to all children of a given resource uniformly. Overrides on child resources were not respected.",
            "The values in a simulation were applied to the given resource. Overrides on child resources were respected, and traffic estimates do not include these resources.",
            "The values in a simulation were all scaled by the same factor. For example, in a simulated TargetCpa campaign, the campaign target and all ad group targets were scaled by a factor of X."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNIFORM",
            "DEFAULT",
            "SCALING"
          ]
        },
        "startDate": {
          "description": "Output only. First day on which the simulation is based, in YYYY-MM-DD format.",
          "readOnly": true,
          "type": "string"
        },
        "endDate": {
          "description": "Output only. Last day on which the simulation is based, in YYYY-MM-DD format",
          "readOnly": true,
          "type": "string"
        },
        "targetCpaPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_CPA.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPointList"
        },
        "targetRoasPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_ROAS.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPointList"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BillingSetup": {
      "id": "GoogleAdsGoogleadsV21Resources__BillingSetup",
      "description": "A billing setup, which associates a payments account and an advertiser. A billing setup is specific to one advertiser.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the billing setup. BillingSetup resource names have the form: `customers/{customer_id}/billingSetups/{billing_setup_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the billing setup.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. The status of the billing setup.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The billing setup is pending approval.",
            "The billing setup has been approved but the corresponding first budget has not. This can only occur for billing setups configured for monthly invoicing.",
            "The billing setup has been approved.",
            "The billing setup was cancelled by the user prior to approval."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "APPROVED_HELD",
            "APPROVED",
            "CANCELLED"
          ]
        },
        "paymentsAccount": {
          "description": "Immutable. The resource name of the payments account associated with this billing setup. Payments resource names have the form: `customers/{customer_id}/paymentsAccounts/{payments_account_id}` When setting up billing, this is used to signup with an existing payments account (and then payments_account_info should not be set). When getting a billing setup, this and payments_account_info will be populated.",
          "type": "string"
        },
        "paymentsAccountInfo": {
          "description": "Immutable. The payments account information associated with this billing setup. When setting up billing, this is used to signup with a new payments account (and then payments_account should not be set). When getting a billing setup, this and payments_account will be populated.",
          "$ref": "GoogleAdsGoogleadsV21Resources_BillingSetup_PaymentsAccountInfo"
        },
        "startDateTime": {
          "description": "Immutable. The start date time in yyyy-MM-dd or yyyy-MM-dd HH:mm:ss format. Only a future time is allowed.",
          "type": "string"
        },
        "startTimeType": {
          "description": "Immutable. The start time as a type. Only NOW is allowed.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        },
        "endDateTime": {
          "description": "Output only. The end date time in yyyy-MM-dd or yyyy-MM-dd HH:mm:ss format.",
          "readOnly": true,
          "type": "string"
        },
        "endTimeType": {
          "description": "Output only. The end time as a type. The only possible value is FOREVER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "As soon as possible.",
            "An infinite point in the future."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOW",
            "FOREVER"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_BillingSetup_PaymentsAccountInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_BillingSetup_PaymentsAccountInfo",
      "description": "Container of payments account information for this billing.",
      "type": "object",
      "properties": {
        "paymentsAccountId": {
          "description": "Output only. A 16 digit id used to identify the payments account associated with the billing setup. This must be passed as a string with dashes, for example, \"1234-5678-9012-3456\".",
          "readOnly": true,
          "type": "string"
        },
        "paymentsAccountName": {
          "description": "Immutable. The name of the payments account associated with the billing setup. This enables the user to specify a meaningful name for a payments account to aid in reconciling monthly invoices. This name will be printed in the monthly invoices.",
          "type": "string"
        },
        "paymentsProfileId": {
          "description": "Immutable. A 12 digit id used to identify the payments profile associated with the billing setup. This must be passed in as a string with dashes, for example, \"1234-5678-9012\".",
          "type": "string"
        },
        "paymentsProfileName": {
          "description": "Output only. The name of the payments profile associated with the billing setup.",
          "readOnly": true,
          "type": "string"
        },
        "secondaryPaymentsProfileId": {
          "description": "Output only. A secondary payments profile id present in uncommon situations, for example, when a sequential liability agreement has been arranged.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CallView": {
      "id": "GoogleAdsGoogleadsV21Resources__CallView",
      "description": "A call view that includes data for call tracking of call-only ads or call extensions.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the call view. Call view resource names have the form: `customers/{customer_id}/callViews/{call_detail_id}`",
          "readOnly": true,
          "type": "string"
        },
        "callerCountryCode": {
          "description": "Output only. Country code of the caller.",
          "readOnly": true,
          "type": "string"
        },
        "callerAreaCode": {
          "description": "Output only. Area code of the caller. Null if the call duration is shorter than 15 seconds.",
          "readOnly": true,
          "type": "string"
        },
        "callDurationSeconds": {
          "description": "Output only. The advertiser-provided call duration in seconds.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "startCallDateTime": {
          "description": "Output only. The advertiser-provided call start date time.",
          "readOnly": true,
          "type": "string"
        },
        "endCallDateTime": {
          "description": "Output only. The advertiser-provided call end date time.",
          "readOnly": true,
          "type": "string"
        },
        "callTrackingDisplayLocation": {
          "description": "Output only. The call tracking display location.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The phone call placed from the ad.",
            "The phone call placed from the landing page ad points to."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD",
            "LANDING_PAGE"
          ]
        },
        "type": {
          "description": "Output only. The type of the call.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The phone call was manually dialed.",
            "The phone call was a mobile click-to-call."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MANUALLY_DIALED",
            "HIGH_END_MOBILE_SEARCH"
          ]
        },
        "callStatus": {
          "description": "Output only. The status of the call.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The call was missed.",
            "The call was received."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MISSED",
            "RECEIVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignAudienceView": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignAudienceView",
      "description": "A campaign audience view. Includes performance data from interests and remarketing lists for Display Network and YouTube Network ads, and remarketing lists for search ads (RLSA), aggregated by campaign and audience criterion. This view only includes audiences attached at the campaign level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the campaign audience view. Campaign audience view resource names have the form: `customers/{customer_id}/campaignAudienceViews/{campaign_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignLifecycleGoal": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignLifecycleGoal",
      "description": "Campaign level customer lifecycle goal settings.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer lifecycle goal of a campaign. `customers/{customer_id}/campaignLifecycleGoal/{campaign_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign where the goal is attached.",
          "readOnly": true,
          "type": "string"
        },
        "customerAcquisitionGoalSettings": {
          "description": "Output only. The customer acquisition goal settings for the campaign. The customer acquisition goal is described in this article: https://support.google.com/google-ads/answer/12080169",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAcquisitionGoalSettings"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerAcquisitionGoalSettings": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerAcquisitionGoalSettings",
      "description": "The customer acquisition goal settings for the campaign.",
      "type": "object",
      "properties": {
        "optimizationMode": {
          "description": "Output only. Customer acquisition optimization mode of this campaign.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The mode is used when campaign is optimizing equally for existing and new customers, which is the default value.",
            "The mode is used when campaign is bidding higher for new customers than existing customer.",
            "The mode is used when campaign is only optimizing for new customers."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TARGET_ALL_EQUALLY",
            "BID_HIGHER_FOR_NEW_CUSTOMER",
            "TARGET_NEW_CUSTOMER"
          ]
        },
        "valueSettings": {
          "description": "Output only. Campaign specific values for the customer acquisition goal.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LifecycleGoalValueSettings"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LifecycleGoalValueSettings": {
      "id": "GoogleAdsGoogleadsV21Common__LifecycleGoalValueSettings",
      "description": "Lifecycle goal value settings.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Value of the lifecycle goal. For example, for customer acquisition goal, value is the incremental conversion value for new customers who are not of high value.",
          "type": "number",
          "format": "double"
        },
        "highLifetimeValue": {
          "description": "High lifetime value of the lifecycle goal. For example, for customer acquisition goal, high lifetime value is the incremental conversion value for new customers who are of high value. High lifetime value should be greater than value, if set.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignSearchTermInsight": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignSearchTermInsight",
      "description": "This report provides a high-level view of search demand at the campaign level by grouping similar search terms into categories and showing their search volume. Historical data is available starting March 2023.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the campaign level search term insight. Campaign level search term insight resource names have the form: `customers/{customer_id}/campaignSearchTermInsights/{campaign_id}~{category_id}`",
          "readOnly": true,
          "type": "string"
        },
        "categoryLabel": {
          "description": "Output only. The label for the search category. An empty string denotes the catch-all category for search terms that didn't fit into another category.",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the insight.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "campaignId": {
          "description": "Output only. The ID of the campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignSearchTermView": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignSearchTermView",
      "description": "This report provides granular performance data, including cost metrics, for each individual search term that triggered your ads.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the campaign search term view. Campaign search term view resource names have the form: `customers/{customer_id}/campaignSearchTermViews/{campaign_id}~{URL-base64_search_term}`",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. The search term.",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign the search term served in.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CampaignSimulation": {
      "id": "GoogleAdsGoogleadsV21Resources__CampaignSimulation",
      "description": "A campaign simulation. Supported combinations of advertising channel type, simulation type and simulation modification method is detailed below respectively. * SEARCH - CPC_BID - UNIFORM * SEARCH - CPC_BID - SCALING * SEARCH - TARGET_CPA - UNIFORM * SEARCH - TARGET_CPA - SCALING * SEARCH - TARGET_ROAS - UNIFORM * SEARCH - TARGET_IMPRESSION_SHARE - UNIFORM * SEARCH - BUDGET - UNIFORM * SHOPPING - BUDGET - UNIFORM * SHOPPING - TARGET_ROAS - UNIFORM * MULTI_CHANNEL - TARGET_CPA - UNIFORM * MULTI_CHANNEL - TARGET_ROAS - UNIFORM * DEMAND_GEN - TARGET_CPA - DEFAULT * DISPLAY - TARGET_CPA - UNIFORM * PERFORMANCE_MAX - TARGET_CPA - UNIFORM * PERFORMANCE_MAX - TARGET_ROAS - UNIFORM * PERFORMANCE_MAX - BUDGET - UNIFORM",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the campaign simulation. Campaign simulation resource names have the form: `customers/{customer_id}/campaignSimulations/{campaign_id}~{type}~{modification_method}~{start_date}~{end_date}`",
          "readOnly": true,
          "type": "string"
        },
        "campaignId": {
          "description": "Output only. Campaign id of the simulation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The field that the simulation modifies.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The simulation is for a CPC bid.",
            "The simulation is for a CPV bid.",
            "The simulation is for a CPA target.",
            "The simulation is for a bid modifier.",
            "The simulation is for a ROAS target.",
            "The simulation is for a percent CPC bid.",
            "The simulation is for an impression share target.",
            "The simulation is for a budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CPC_BID",
            "CPV_BID",
            "TARGET_CPA",
            "BID_MODIFIER",
            "TARGET_ROAS",
            "PERCENT_CPC_BID",
            "TARGET_IMPRESSION_SHARE",
            "BUDGET"
          ]
        },
        "modificationMethod": {
          "description": "Output only. How the simulation modifies the field.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The values in a simulation were applied to all children of a given resource uniformly. Overrides on child resources were not respected.",
            "The values in a simulation were applied to the given resource. Overrides on child resources were respected, and traffic estimates do not include these resources.",
            "The values in a simulation were all scaled by the same factor. For example, in a simulated TargetCpa campaign, the campaign target and all ad group targets were scaled by a factor of X."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNIFORM",
            "DEFAULT",
            "SCALING"
          ]
        },
        "startDate": {
          "description": "Output only. First day on which the simulation is based, in YYYY-MM-DD format.",
          "readOnly": true,
          "type": "string"
        },
        "endDate": {
          "description": "Output only. Last day on which the simulation is based, in YYYY-MM-DD format",
          "readOnly": true,
          "type": "string"
        },
        "cpcBidPointList": {
          "description": "Output only. Simulation points if the simulation type is CPC_BID.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__CpcBidSimulationPointList"
        },
        "targetCpaPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_CPA.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetCpaSimulationPointList"
        },
        "targetRoasPointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_ROAS.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetRoasSimulationPointList"
        },
        "targetImpressionSharePointList": {
          "description": "Output only. Simulation points if the simulation type is TARGET_IMPRESSION_SHARE.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPointList"
        },
        "budgetPointList": {
          "description": "Output only. Simulation points if the simulation type is BUDGET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__BudgetSimulationPointList"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPointList",
      "description": "A container for simulation points for simulations of type TARGET_IMPRESSION_SHARE.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a specific target impression share value.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__TargetImpressionShareSimulationPoint",
      "description": "Projected metrics for a specific target impression share value.",
      "type": "object",
      "properties": {
        "targetImpressionShareMicros": {
          "description": "The simulated target impression share value (in micros) upon which projected metrics are based. For example, 10% impression share, which is equal to 0.1, is stored as 100_000. This value is validated and will not exceed 1M (100%).",
          "type": "string",
          "format": "int64"
        },
        "requiredCpcBidCeilingMicros": {
          "description": "Projected required daily cpc bid ceiling that the advertiser must set to realize this simulation, in micros of the advertiser currency.",
          "type": "string",
          "format": "int64"
        },
        "requiredBudgetAmountMicros": {
          "description": "Projected required daily budget that the advertiser must set in order to receive the estimated traffic, in micros of advertiser currency.",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions. Only search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        },
        "absoluteTopImpressions": {
          "description": "Projected number of absolute top impressions. Only search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BudgetSimulationPointList": {
      "id": "GoogleAdsGoogleadsV21Common__BudgetSimulationPointList",
      "description": "A container for simulation points for simulations of type BUDGET.",
      "type": "object",
      "properties": {
        "points": {
          "description": "Projected metrics for a series of budget amounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__BudgetSimulationPoint"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BudgetSimulationPoint": {
      "id": "GoogleAdsGoogleadsV21Common__BudgetSimulationPoint",
      "description": "Projected metrics for a specific budget amount.",
      "type": "object",
      "properties": {
        "budgetAmountMicros": {
          "description": "The simulated budget upon which projected metrics are based.",
          "type": "string",
          "format": "int64"
        },
        "requiredCpcBidCeilingMicros": {
          "description": "Projected required daily cpc bid ceiling that the advertiser must set to realize this simulation, in micros of the advertiser currency. Only campaigns with the Target Spend bidding strategy support this field.",
          "type": "string",
          "format": "int64"
        },
        "biddableConversions": {
          "description": "Projected number of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "biddableConversionsValue": {
          "description": "Projected total value of biddable conversions.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Projected number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "costMicros": {
          "description": "Projected cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Projected number of impressions.",
          "type": "string",
          "format": "int64"
        },
        "topSlotImpressions": {
          "description": "Projected number of top slot impressions. Only search advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        },
        "interactions": {
          "description": "Projected number of interactions. Only discovery advertising channel type supports this field.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CarrierConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__CarrierConstant",
      "description": "A carrier criterion that can be used in campaign targeting.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the carrier criterion. Carrier criterion resource names have the form: `carrierConstants/{criterion_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the carrier criterion.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The full name of the carrier in English.",
          "readOnly": true,
          "type": "string"
        },
        "countryCode": {
          "description": "Output only. The country code of the country where the carrier is located, for example, \"AR\", \"FR\", etc.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ChangeEvent": {
      "id": "GoogleAdsGoogleadsV21Resources__ChangeEvent",
      "description": "Describes the granular change of returned resources of certain resource types. Changes made through the UI or API in the past 30 days are included. Previous and new values of the changed fields are shown. ChangeEvent could have up to 3 minutes delay to reflect a new change.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the change event. Change event resource names have the form: `customers/{customer_id}/changeEvents/{timestamp_micros}~{command_index}~{mutate_index}`",
          "readOnly": true,
          "type": "string"
        },
        "changeDateTime": {
          "description": "Output only. Time at which the change was committed on this resource.",
          "readOnly": true,
          "type": "string"
        },
        "changeResourceType": {
          "description": "Output only. The type of the changed resource. This dictates what resource will be set in old_resource and new_resource.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified resource unknown in this version.",
            "An Ad resource change.",
            "An AdGroup resource change.",
            "An AdGroupCriterion resource change.",
            "A Campaign resource change.",
            "A CampaignBudget resource change.",
            "An AdGroupBidModifier resource change.",
            "A CampaignCriterion resource change.",
            "A Feed resource change.",
            "A FeedItem resource change.",
            "A CampaignFeed resource change.",
            "An AdGroupFeed resource change.",
            "An AdGroupAd resource change.",
            "An Asset resource change.",
            "A CustomerAsset resource change.",
            "A CampaignAsset resource change.",
            "An AdGroupAsset resource change.",
            "An AssetSet resource change.",
            "An AssetSetAsset resource change.",
            "A CampaignAssetSet resource change."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD",
            "AD_GROUP",
            "AD_GROUP_CRITERION",
            "CAMPAIGN",
            "CAMPAIGN_BUDGET",
            "AD_GROUP_BID_MODIFIER",
            "CAMPAIGN_CRITERION",
            "FEED",
            "FEED_ITEM",
            "CAMPAIGN_FEED",
            "AD_GROUP_FEED",
            "AD_GROUP_AD",
            "ASSET",
            "CUSTOMER_ASSET",
            "CAMPAIGN_ASSET",
            "AD_GROUP_ASSET",
            "ASSET_SET",
            "ASSET_SET_ASSET",
            "CAMPAIGN_ASSET_SET"
          ]
        },
        "changeResourceName": {
          "description": "Output only. The Simply resource this change occurred on.",
          "readOnly": true,
          "type": "string"
        },
        "clientType": {
          "description": "Output only. Where the change was made through.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified client type unknown in this version.",
            "Changes made through the \"ads.google.com\". For example, changes made through campaign management.",
            "Changes made through Google Ads automated rules.",
            "Changes made through Google Ads scripts.",
            "Changes made by Google Ads bulk upload.",
            "Changes made by Google Ads API.",
            "Changes made by Google Ads Editor. This value is a placeholder. The API does not return these changes.",
            "Changes made by Google Ads mobile app.",
            "Changes made through Google Ads recommendations.",
            "Changes made through Search Ads 360 Sync.",
            "Changes made through Search Ads 360 Post.",
            "Changes made through internal tools. For example, when a user sets a URL template on an entity like a Campaign, it's automatically wrapped with the SA360 Clickserver URL.",
            "Types of changes that are not categorized, for example, changes made by coupon redemption through Google Ads.",
            "Changes made by subscribing to Google Ads recommendations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_ADS_WEB_CLIENT",
            "GOOGLE_ADS_AUTOMATED_RULE",
            "GOOGLE_ADS_SCRIPTS",
            "GOOGLE_ADS_BULK_UPLOAD",
            "GOOGLE_ADS_API",
            "GOOGLE_ADS_EDITOR",
            "GOOGLE_ADS_MOBILE_APP",
            "GOOGLE_ADS_RECOMMENDATIONS",
            "SEARCH_ADS_360_SYNC",
            "SEARCH_ADS_360_POST",
            "INTERNAL_TOOL",
            "OTHER",
            "GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION"
          ]
        },
        "userEmail": {
          "description": "Output only. The email of the user who made this change.",
          "readOnly": true,
          "type": "string"
        },
        "oldResource": {
          "description": "Output only. The old resource before the change. Only changed fields will be populated.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_ChangeEvent_ChangedResource"
        },
        "newResource": {
          "description": "Output only. The new resource after the change. Only changed fields will be populated.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_ChangeEvent_ChangedResource"
        },
        "resourceChangeOperation": {
          "description": "Output only. The operation on the changed resource.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified operation unknown in this version.",
            "The resource was created.",
            "The resource was modified.",
            "The resource was removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CREATE",
            "UPDATE",
            "REMOVE"
          ]
        },
        "changedFields": {
          "description": "Output only. A list of fields that are changed in the returned resource.",
          "readOnly": true,
          "type": "string",
          "format": "google-fieldmask"
        },
        "campaign": {
          "description": "Output only. The Campaign affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. The AdGroup affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. The Asset affected by this change.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ChangeEvent_ChangedResource": {
      "id": "GoogleAdsGoogleadsV21Resources_ChangeEvent_ChangedResource",
      "description": "A wrapper proto presenting all supported resources. Only the resource of the change_resource_type will be set.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "Output only. Set if change_resource_type == AD.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "adGroup": {
          "description": "Output only. Set if change_resource_type == AD_GROUP.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroup"
        },
        "adGroupCriterion": {
          "description": "Output only. Set if change_resource_type == AD_GROUP_CRITERION.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupCriterion"
        },
        "campaign": {
          "description": "Output only. Set if change_resource_type == CAMPAIGN.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Campaign"
        },
        "campaignBudget": {
          "description": "Output only. Set if change_resource_type == CAMPAIGN_BUDGET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignBudget"
        },
        "adGroupBidModifier": {
          "description": "Output only. Set if change_resource_type == AD_GROUP_BID_MODIFIER.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupBidModifier"
        },
        "campaignCriterion": {
          "description": "Output only. Set if change_resource_type == CAMPAIGN_CRITERION.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignCriterion"
        },
        "adGroupAd": {
          "description": "Output only. Set if change_resource_type == AD_GROUP_AD.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAd"
        },
        "asset": {
          "description": "Output only. Set if change_resource_type == ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
        },
        "customerAsset": {
          "description": "Output only. Set if change_resource_type == CUSTOMER_ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAsset"
        },
        "campaignAsset": {
          "description": "Output only. Set if change_resource_type == CAMPAIGN_ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAsset"
        },
        "adGroupAsset": {
          "description": "Output only. Set if change_resource_type == AD_GROUP_ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdGroupAsset"
        },
        "assetSet": {
          "description": "Output only. Set if change_resource_type == ASSET_SET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSet"
        },
        "assetSetAsset": {
          "description": "Output only. Set if change_resource_type == ASSET_SET_ASSET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AssetSetAsset"
        },
        "campaignAssetSet": {
          "description": "Output only. Set if change_resource_type == CAMPAIGN_ASSET_SET.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignAssetSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ChangeStatus": {
      "id": "GoogleAdsGoogleadsV21Resources__ChangeStatus",
      "description": "Describes the status of returned resource. ChangeStatus could have up to 3 minutes delay to reflect a new change.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the change status. Change status resource names have the form: `customers/{customer_id}/changeStatus/{change_status_id}`",
          "readOnly": true,
          "type": "string"
        },
        "lastChangeDateTime": {
          "description": "Output only. Time at which the most recent change has occurred on this resource.",
          "readOnly": true,
          "type": "string"
        },
        "resourceType": {
          "description": "Output only. Represents the type of the changed resource. This dictates what fields will be set. For example, for AD_GROUP, campaign and ad_group fields will be set.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified resource unknown in this version.",
            "An AdGroup resource change.",
            "An AdGroupAd resource change.",
            "An AdGroupCriterion resource change.",
            "A Campaign resource change.",
            "A CampaignCriterion resource change.",
            "A CampaignBudget resource change.",
            "A Feed resource change.",
            "A FeedItem resource change.",
            "An AdGroupFeed resource change.",
            "A CampaignFeed resource change.",
            "An AdGroupBidModifier resource change.",
            "A SharedSet resource change.",
            "A CampaignSharedSet resource change.",
            "An Asset resource change.",
            "A CustomerAsset resource change.",
            "A CampaignAsset resource change.",
            "An AdGroupAsset resource change.",
            "A CombinedAudience resource change.",
            "An AssetGroup resource change.",
            "An AssetSet resource change.",
            "A CampaignAssetSet resource change."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP",
            "AD_GROUP_AD",
            "AD_GROUP_CRITERION",
            "CAMPAIGN",
            "CAMPAIGN_CRITERION",
            "CAMPAIGN_BUDGET",
            "FEED",
            "FEED_ITEM",
            "AD_GROUP_FEED",
            "CAMPAIGN_FEED",
            "AD_GROUP_BID_MODIFIER",
            "SHARED_SET",
            "CAMPAIGN_SHARED_SET",
            "ASSET",
            "CUSTOMER_ASSET",
            "CAMPAIGN_ASSET",
            "AD_GROUP_ASSET",
            "COMBINED_AUDIENCE",
            "ASSET_GROUP",
            "ASSET_SET",
            "CAMPAIGN_ASSET_SET"
          ]
        },
        "campaign": {
          "description": "Output only. The Campaign affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. The AdGroup affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "resourceStatus": {
          "description": "Output only. Represents the status of the changed resource.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified resource unknown in this version.",
            "The resource was created.",
            "The resource was modified.",
            "The resource was removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADDED",
            "CHANGED",
            "REMOVED"
          ]
        },
        "adGroupAd": {
          "description": "Output only. The AdGroupAd affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "adGroupCriterion": {
          "description": "Output only. The AdGroupCriterion affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "campaignCriterion": {
          "description": "Output only. The CampaignCriterion affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "adGroupBidModifier": {
          "description": "Output only. The AdGroupBidModifier affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "sharedSet": {
          "description": "Output only. The SharedSet affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "campaignSharedSet": {
          "description": "Output only. The CampaignSharedSet affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. The Asset affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "customerAsset": {
          "description": "Output only. The CustomerAsset affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "campaignAsset": {
          "description": "Output only. The CampaignAsset affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "adGroupAsset": {
          "description": "Output only. The AdGroupAsset affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "combinedAudience": {
          "description": "Output only. The CombinedAudience affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "assetGroup": {
          "description": "Output only. The AssetGroup affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "assetSet": {
          "description": "Output only. The AssetSet affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "campaignBudget": {
          "description": "Output only. The CampaignBudget affected by this change.",
          "readOnly": true,
          "type": "string"
        },
        "campaignAssetSet": {
          "description": "Output only. The CampaignAssetSet affected by this change.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CombinedAudience": {
      "id": "GoogleAdsGoogleadsV21Resources__CombinedAudience",
      "description": "Describe a resource for combined audiences which includes different audiences.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the combined audience. Combined audience names have the form: `customers/{customer_id}/combinedAudience/{combined_audience_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of the combined audience.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. Status of this combined audience. Indicates whether the combined audience is enabled or removed.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Enabled status - combined audience is enabled and can be targeted.",
            "Removed status - combined audience is removed and cannot be used for targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "name": {
          "description": "Output only. Name of the combined audience. It should be unique across all combined audiences.",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Output only. Description of this combined audience.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ClickView": {
      "id": "GoogleAdsGoogleadsV21Resources__ClickView",
      "description": "A click view with metrics aggregated at each click level, including both valid and invalid clicks. For non-Search campaigns, metrics.clicks represents the number of valid and invalid interactions. Queries including ClickView must have a filter limiting the results to one day and can be requested for dates back to 90 days before the time of the request.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the click view. Click view resource names have the form: `customers/{customer_id}/clickViews/{date (yyyy-MM-dd)}~{gclid}`",
          "readOnly": true,
          "type": "string"
        },
        "gclid": {
          "description": "Output only. The Google Click ID.",
          "readOnly": true,
          "type": "string"
        },
        "areaOfInterest": {
          "description": "Output only. The location criteria matching the area of interest associated with the impression.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__ClickLocation"
        },
        "locationOfPresence": {
          "description": "Output only. The location criteria matching the location of presence associated with the impression.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__ClickLocation"
        },
        "pageNumber": {
          "description": "Output only. Page number in search results where the ad was shown.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "adGroupAd": {
          "description": "Output only. The associated ad.",
          "readOnly": true,
          "type": "string"
        },
        "campaignLocationTarget": {
          "description": "Output only. The associated campaign location target, if one exists.",
          "readOnly": true,
          "type": "string"
        },
        "userList": {
          "description": "Output only. The associated user list, if one exists.",
          "readOnly": true,
          "type": "string"
        },
        "keyword": {
          "description": "Output only. The associated keyword, if one exists and the click corresponds to the SEARCH channel.",
          "readOnly": true,
          "type": "string"
        },
        "keywordInfo": {
          "description": "Output only. Basic information about the associated keyword, if it exists.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ClickLocation": {
      "id": "GoogleAdsGoogleadsV21Common__ClickLocation",
      "description": "Location criteria associated with a click.",
      "type": "object",
      "properties": {
        "city": {
          "description": "The city location criterion associated with the impression.",
          "type": "string"
        },
        "country": {
          "description": "The country location criterion associated with the impression.",
          "type": "string"
        },
        "metro": {
          "description": "The metro location criterion associated with the impression.",
          "type": "string"
        },
        "mostSpecific": {
          "description": "The most specific location criterion associated with the impression.",
          "type": "string"
        },
        "region": {
          "description": "The region location criterion associated with the impression.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CurrencyConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__CurrencyConstant",
      "description": "A currency constant.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the currency constant. Currency constant resource names have the form: `currencyConstants/{code}`",
          "readOnly": true,
          "type": "string"
        },
        "code": {
          "description": "Output only. ISO 4217 three-letter currency code, for example, \"USD\"",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "Output only. Full English name of the currency.",
          "readOnly": true,
          "type": "string"
        },
        "symbol": {
          "description": "Output only. Standard symbol for describing this currency, for example, '$' for US Dollars.",
          "readOnly": true,
          "type": "string"
        },
        "billableUnitMicros": {
          "description": "Output only. The billable unit for this currency. Billed amounts should be multiples of this value.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomAudience": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomAudience",
      "description": "A custom audience. This is a list of users by interest. The unique key of a custom audience consists of the following fields: name. Violating the unique key constraint produces error: CustomAudienceError.NAME_ALREADY_USED",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the custom audience. Custom audience resource names have the form: `customers/{customer_id}/customAudiences/{custom_audience_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of the custom audience.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. Status of this custom audience. Indicates whether the custom audience is enabled or removed.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Enabled status - custom audience is enabled and can be targeted.",
            "Removed status - custom audience is removed and cannot be used for targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "name": {
          "description": "Name of the custom audience. It should be unique for all custom audiences created by a customer. This field is required for creating operations.",
          "type": "string"
        },
        "type": {
          "description": "Type of the custom audience. (\"INTEREST\" OR \"PURCHASE_INTENT\" is not allowed for newly created custom audience but kept for existing audiences)",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Google Ads will auto-select the best interpretation at serving time.",
            "Matches users by their interests.",
            "Matches users by topics they are researching or products they are considering for purchase.",
            "Matches users by what they searched on Google Search."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AUTO",
            "INTEREST",
            "PURCHASE_INTENT",
            "SEARCH"
          ]
        },
        "description": {
          "description": "Description of this custom audience.",
          "type": "string"
        },
        "members": {
          "description": "List of custom audience members that this custom audience is composed of. Members can be added during CustomAudience creation. If members are presented in UPDATE operation, existing members will be overridden.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__CustomAudienceMember"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomAudienceMember": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomAudienceMember",
      "description": "A member of custom audience. A member can be a KEYWORD, URL, PLACE_CATEGORY or APP. It can only be created or removed but not changed.",
      "type": "object",
      "properties": {
        "memberType": {
          "description": "The type of custom audience member, KEYWORD, URL, PLACE_CATEGORY or APP.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Users whose interests or actions are described by a keyword.",
            "Users who have interests related to the website's content.",
            "Users who visit place types described by a place category.",
            "Users who have installed a mobile app."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "URL",
            "PLACE_CATEGORY",
            "APP"
          ]
        },
        "keyword": {
          "description": "A keyword or keyword phrase — at most 10 words and 80 characters. Languages with double-width characters such as Chinese, Japanese, or Korean, are allowed 40 characters, which describes the user's interests or actions.",
          "type": "string"
        },
        "url": {
          "description": "An HTTP URL, protocol-included — at most 2048 characters, which includes contents users have interests in.",
          "type": "string"
        },
        "placeCategory": {
          "description": "A place type described by a place category users visit.",
          "type": "string",
          "format": "int64"
        },
        "app": {
          "description": "A package name of Android apps which users installed such as com.google.example.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomInterest": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomInterest",
      "description": "A custom interest. This is a list of users by interest.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the custom interest. Custom interest resource names have the form: `customers/{customer_id}/customInterests/{custom_interest_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. Id of the custom interest.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Status of this custom interest. Indicates whether the custom interest is enabled or removed.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Enabled status - custom interest is enabled and can be targeted to.",
            "Removed status - custom interest is removed and cannot be used for targeting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "name": {
          "description": "Name of the custom interest. It should be unique across the same custom affinity audience. This field is required for create operations.",
          "type": "string"
        },
        "type": {
          "description": "Type of the custom interest, CUSTOM_AFFINITY or CUSTOM_INTENT. By default the type is set to CUSTOM_AFFINITY.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Allows brand advertisers to define custom affinity audience lists.",
            "Allows advertisers to define custom intent audience lists."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOM_AFFINITY",
            "CUSTOM_INTENT"
          ]
        },
        "description": {
          "description": "Description of this custom interest audience.",
          "type": "string"
        },
        "members": {
          "description": "List of custom interest members that this custom interest is composed of. Members can be added during CustomInterest creation. If members are presented in UPDATE operation, existing members will be overridden.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__CustomInterestMember"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomInterestMember": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomInterestMember",
      "description": "A member of custom interest audience. A member can be a keyword or url. It is immutable, that is, it can only be created or removed but not changed.",
      "type": "object",
      "properties": {
        "memberType": {
          "description": "The type of custom interest member, KEYWORD or URL.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Custom interest member type KEYWORD.",
            "Custom interest member type URL."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "KEYWORD",
            "URL"
          ]
        },
        "parameter": {
          "description": "Keyword text when member_type is KEYWORD or URL string when member_type is URL.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerAssetSet": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerAssetSet",
      "description": "CustomerAssetSet is the linkage between a customer and an asset set. Adding a CustomerAssetSet links an asset set with a customer.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer asset set. Asset set asset resource names have the form: `customers/{customer_id}/customerAssetSets/{asset_set_id}`",
          "type": "string"
        },
        "assetSet": {
          "description": "Immutable. The asset set which is linked to the customer.",
          "type": "string"
        },
        "customer": {
          "description": "Immutable. The customer to which this asset set is linked.",
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the customer asset set asset. Read-only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The status has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The linkage between asset set and its container is enabled.",
            "The linkage between asset set and its container is removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AccessibleBiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Resources__AccessibleBiddingStrategy",
      "description": "Represents a view of BiddingStrategies owned by and shared with the customer. In contrast to BiddingStrategy, this resource includes strategies owned by managers of the customer and shared with this customer - in addition to strategies owned by this customer. This resource does not provide metrics and only exposes a limited subset of the BiddingStrategy attributes.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the accessible bidding strategy. AccessibleBiddingStrategy resource names have the form: `customers/{customer_id}/accessibleBiddingStrategies/{bidding_strategy_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the bidding strategy.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the bidding strategy.",
          "readOnly": true,
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of the bidding strategy.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
            "Enhanced CPC is a bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely.",
            "Fixed CPM is a manual bidding strategy with a fixed CPM.",
            "Used for return value only. Indicates that a campaign does not have a bidding strategy. This prevents the campaign from serving. For example, a campaign may be attached to a manager bidding strategy and the serving account is subsequently unlinked from the manager account. In this case the campaign will automatically be detached from the now inaccessible manager bidding strategy and transition to the INVALID bidding strategy type.",
            "Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action.",
            "Manual click based bidding where user pays per click.",
            "Manual impression based bidding where user pays per thousand impressions.",
            "A bidding strategy that pays a configurable amount per video view.",
            "A bidding strategy that automatically maximizes number of conversions given a daily budget.",
            "An automated bidding strategy that automatically sets bids to maximize revenue while spending your budget.",
            "Page-One Promoted bidding scheme, which sets max cpc bids to target impressions on page one or page one promoted slots on google.com. This enum value is deprecated.",
            "Percent Cpc is bidding strategy where bids are a fraction of the advertised price for some good or service.",
            "Target CPA is an automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
            "Target CPM is an automated bid strategy that sets bids to help get as many impressions as possible at the target cost per one thousand impressions (CPM) you set.",
            "Target CPV is an automated bidding strategy that sets bids to optimize performance given the average target cost per view.",
            "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
            "Target Outrank Share is an automated bidding strategy that sets bids based on the target fraction of auctions where the advertiser should outrank a specific competitor. This enum value is deprecated.",
            "Target ROAS is an automated bidding strategy that helps you maximize revenue while averaging a specific target Return On Average Spend (ROAS).",
            "Target Spend is an automated bid strategy that sets your bids to help get as many clicks as possible within your budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "COMMISSION",
            "ENHANCED_CPC",
            "FIXED_CPM",
            "INVALID",
            "MANUAL_CPA",
            "MANUAL_CPC",
            "MANUAL_CPM",
            "MANUAL_CPV",
            "MAXIMIZE_CONVERSIONS",
            "MAXIMIZE_CONVERSION_VALUE",
            "PAGE_ONE_PROMOTED",
            "PERCENT_CPC",
            "TARGET_CPA",
            "TARGET_CPM",
            "TARGET_CPV",
            "TARGET_IMPRESSION_SHARE",
            "TARGET_OUTRANK_SHARE",
            "TARGET_ROAS",
            "TARGET_SPEND"
          ]
        },
        "ownerCustomerId": {
          "description": "Output only. The ID of the Customer which owns the bidding strategy.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "ownerDescriptiveName": {
          "description": "Output only. descriptive_name of the Customer which owns the bidding strategy.",
          "readOnly": true,
          "type": "string"
        },
        "maximizeConversionValue": {
          "description": "Output only. An automated bidding strategy to help get the most conversion value for your campaigns while spending your budget.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversionValue"
        },
        "maximizeConversions": {
          "description": "Output only. An automated bidding strategy to help get the most conversions for your campaigns while spending your budget.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversions"
        },
        "targetCpa": {
          "description": "Output only. A bidding strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetCpa"
        },
        "targetImpressionShare": {
          "description": "Output only. A bidding strategy that automatically optimizes towards a chosen percentage of impressions.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetImpressionShare"
        },
        "targetRoas": {
          "description": "Output only. A bidding strategy that helps you maximize revenue while averaging a specific target Return On Ad Spend (ROAS).",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetRoas"
        },
        "targetSpend": {
          "description": "Output only. A bid strategy that sets your bids to help get as many clicks as possible within your budget.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetSpend"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversionValue": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversionValue",
      "description": "An automated bidding strategy to help get the most conversion value for your campaigns while spending your budget.",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "Output only. The target return on ad spend (ROAS) option. If set, the bid strategy will maximize revenue while averaging the target return on ad spend. If the target ROAS is high, the bid strategy may not be able to spend the full budget. If the target ROAS is not set, the bid strategy will aim to achieve the highest possible ROAS for the budget.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversions": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_MaximizeConversions",
      "description": "An automated bidding strategy to help get the most conversions for your campaigns while spending your budget.",
      "type": "object",
      "properties": {
        "targetCpaMicros": {
          "description": "Output only. The target cost per acquisition (CPA) option. This is the average amount that you would like to spend per acquisition.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetCpa": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetCpa",
      "description": "An automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
      "type": "object",
      "properties": {
        "targetCpaMicros": {
          "description": "Output only. Average CPA target. This target should be greater than or equal to minimum billable unit based on the currency for the account.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetImpressionShare": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetImpressionShare",
      "description": "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
      "type": "object",
      "properties": {
        "location": {
          "description": "Output only. The targeted location on the search results page.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Any location on the web page.",
            "Top box of ads.",
            "Top slot in the top box of ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ANYWHERE_ON_PAGE",
            "TOP_OF_PAGE",
            "ABSOLUTE_TOP_OF_PAGE"
          ]
        },
        "locationFractionMicros": {
          "description": "The chosen fraction of ads to be shown in the targeted location in micros. For example, 1% equals 10,000.",
          "type": "string",
          "format": "int64"
        },
        "cpcBidCeilingMicros": {
          "description": "Output only. The highest CPC bid the automated bidding system is permitted to specify. This is a required field entered by the advertiser that sets the ceiling and specified in local micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetRoas": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetRoas",
      "description": "An automated bidding strategy that helps you maximize revenue while averaging a specific target return on ad spend (ROAS).",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "Output only. The chosen revenue (based on conversion data) per unit of spend.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetSpend": {
      "id": "GoogleAdsGoogleadsV21Resources_AccessibleBiddingStrategy_TargetSpend",
      "description": "An automated bid strategy that sets your bids to help get as many clicks as possible within your budget.",
      "type": "object",
      "properties": {
        "targetSpendMicros": {
          "description": "Output only. The spend target under which to maximize clicks. A TargetSpend bidder will attempt to spend the smaller of this value or the natural throttling spend amount. If not specified, the budget is used as the spend target. This field is deprecated and should no longer be used. See https://ads-developers.googleblog.com/2020/05/reminder-about-sunset-creation-of.html for details.",
          "readOnly": true,
          "deprecated": true,
          "type": "string",
          "format": "int64"
        },
        "cpcBidCeilingMicros": {
          "description": "Output only. Maximum bid limit that can be set by the bid strategy. The limit applies to all keywords managed by the strategy.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerManagerLink": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerManagerLink",
      "description": "Represents customer-manager link relationship.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. CustomerManagerLink resource names have the form: `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`",
          "type": "string"
        },
        "managerCustomer": {
          "description": "Output only. The manager customer linked to the customer.",
          "readOnly": true,
          "type": "string"
        },
        "managerLinkId": {
          "description": "Output only. ID of the customer-manager link. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Status of the link between the customer and the manager.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates current in-effect relationship",
            "Indicates terminated relationship",
            "Indicates relationship has been requested by manager, but the client hasn't accepted yet.",
            "Relationship was requested by the manager, but the client has refused.",
            "Indicates relationship has been requested by manager, but manager canceled it."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACTIVE",
            "INACTIVE",
            "PENDING",
            "REFUSED",
            "CANCELED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerClientLink": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerClientLink",
      "description": "Represents customer client link relationship.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. CustomerClientLink resource names have the form: `customers/{customer_id}/customerClientLinks/{client_customer_id}~{manager_link_id}`",
          "type": "string"
        },
        "clientCustomer": {
          "description": "Immutable. The client customer linked to this customer.",
          "type": "string"
        },
        "managerLinkId": {
          "description": "Output only. This is uniquely identifies a customer client link. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "This is the status of the link between client and manager.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates current in-effect relationship",
            "Indicates terminated relationship",
            "Indicates relationship has been requested by manager, but the client hasn't accepted yet.",
            "Relationship was requested by the manager, but the client has refused.",
            "Indicates relationship has been requested by manager, but manager canceled it."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACTIVE",
            "INACTIVE",
            "PENDING",
            "REFUSED",
            "CANCELED"
          ]
        },
        "hidden": {
          "description": "The visibility of the link. Users can choose whether or not to see hidden links in the Google Ads UI. Default value is false",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerClient": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerClient",
      "description": "A link between the given customer and a client customer. CustomerClients only exist for manager customers. All direct and indirect client customers are included, as well as the manager itself.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the customer client. CustomerClient resource names have the form: `customers/{customer_id}/customerClients/{client_customer_id}`",
          "readOnly": true,
          "type": "string"
        },
        "clientCustomer": {
          "description": "Output only. The resource name of the client-customer which is linked to the given customer. Read only.",
          "readOnly": true,
          "type": "string"
        },
        "hidden": {
          "description": "Output only. Specifies whether this is a [hidden account](https://support.google.com/google-ads/answer/7519830). Read only.",
          "readOnly": true,
          "type": "boolean"
        },
        "level": {
          "description": "Output only. Distance between given customer and client. For self link, the level value will be 0. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "timeZone": {
          "description": "Output only. Common Locale Data Repository (CLDR) string representation of the time zone of the client, for example, America/Los_Angeles. Read only.",
          "readOnly": true,
          "type": "string"
        },
        "testAccount": {
          "description": "Output only. Identifies if the client is a test account. Read only.",
          "readOnly": true,
          "type": "boolean"
        },
        "manager": {
          "description": "Output only. Identifies if the client is a manager. Read only.",
          "readOnly": true,
          "type": "boolean"
        },
        "descriptiveName": {
          "description": "Output only. Descriptive name for the client. Read only.",
          "readOnly": true,
          "type": "string"
        },
        "currencyCode": {
          "description": "Output only. Currency code (for example, 'USD', 'EUR') for the client. Read only.",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the client customer. Read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "appliedLabels": {
          "description": "Output only. The resource names of the labels owned by the requesting customer that are applied to the client customer. Label resource names have the form: `customers/{customer_id}/labels/{label_id}`",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "status": {
          "description": "Output only. The status of the client customer. Read only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Indicates an active account able to serve ads.",
            "Indicates a canceled account unable to serve ads. Can be reactivated by an admin user.",
            "Indicates a suspended account unable to serve ads. May only be activated by Google support.",
            "Indicates a closed account unable to serve ads. Test account will also have CLOSED status. Status is permanent and may not be reopened."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "CANCELED",
            "SUSPENDED",
            "CLOSED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerLifecycleGoal": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerLifecycleGoal",
      "description": "Account level customer lifecycle goal settings.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the customer lifecycle goal. Customer lifecycle resource names have the form: `customers/{customer_id}/customerLifecycleGoal`",
          "type": "string"
        },
        "customerAcquisitionGoalValueSettings": {
          "description": "Output only. Customer acquisition goal customer level value settings.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LifecycleGoalValueSettings"
        },
        "ownerCustomer": {
          "description": "Output only. The resource name of the customer which owns the lifecycle goal.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerSearchTermInsight": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerSearchTermInsight",
      "description": "This report provides a high-level view of search demand at the customer level by grouping similar search terms into categories and showing their search volume. Historical data is available starting March 2023.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the customer level search term insight. Customer level search term insight resource names have the form: `customers/{customer_id}/customerSearchTermInsights/{category_id}`",
          "readOnly": true,
          "type": "string"
        },
        "categoryLabel": {
          "description": "Output only. The label for the search category. An empty string denotes the catch-all category for search terms that didn't fit into another category.",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the insight.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerUserAccess": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerUserAccess",
      "description": "Represents the permission of a single user onto a single customer.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. Resource names have the form: `customers/{customer_id}/customerUserAccesses/{user_id}`",
          "type": "string"
        },
        "userId": {
          "description": "Output only. User id of the user with the customer access. Read only field",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "emailAddress": {
          "description": "Output only. Email address of the user. Read only field",
          "readOnly": true,
          "type": "string"
        },
        "accessRole": {
          "description": "Access role of the user.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Owns its account and can control the addition of other users.",
            "Can modify campaigns, but can't affect other users.",
            "Can view campaigns and account changes, but cannot make edits.",
            "Role for \\\"email only\\\" access. Represents an email recipient rather than a true User entity."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADMIN",
            "STANDARD",
            "READ_ONLY",
            "EMAIL_ONLY"
          ]
        },
        "accessCreationDateTime": {
          "description": "Output only. The customer user access creation time. Read only field The format is \"YYYY-MM-DD HH:MM:SS\". Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "inviterUserEmailAddress": {
          "description": "Output only. The email address of the inviter user. Read only field",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerUserAccessInvitation": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerUserAccessInvitation",
      "description": "Represent an invitation to a new user on this customer account.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Name of the resource. Resource names have the form: `customers/{customer_id}/customerUserAccessInvitations/{invitation_id}`",
          "type": "string"
        },
        "invitationId": {
          "description": "Output only. The ID of the invitation. This field is read-only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "accessRole": {
          "description": "Immutable. Access role of the user.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Owns its account and can control the addition of other users.",
            "Can modify campaigns, but can't affect other users.",
            "Can view campaigns and account changes, but cannot make edits.",
            "Role for \\\"email only\\\" access. Represents an email recipient rather than a true User entity."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADMIN",
            "STANDARD",
            "READ_ONLY",
            "EMAIL_ONLY"
          ]
        },
        "emailAddress": {
          "description": "Immutable. Email address the invitation was sent to. This can differ from the email address of the account that accepts the invite.",
          "type": "string"
        },
        "creationDateTime": {
          "description": "Output only. Time invitation was created. This field is read-only. The format is \"YYYY-MM-DD HH:MM:SS\". Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "invitationStatus": {
          "description": "Output only. Invitation status of the user.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The initial state of an invitation, before being acted upon by anyone.",
            "Invitation process was terminated by the email recipient. No new user was created.",
            "Invitation URLs expired without being acted upon. No new user can be created. Invitations expire 20 days after creation."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "DECLINED",
            "EXPIRED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DataLink": {
      "id": "GoogleAdsGoogleadsV21Resources__DataLink",
      "description": "Represents the data sharing connection between a Google Ads customer and another product's data.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Resource name of the product data link. DataLink resource names have the form: `customers/{customer_id}/datalinks/{product_link_id}~{data_link_id}}",
          "type": "string"
        },
        "productLinkId": {
          "description": "Output only. The ID of the link. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "dataLinkId": {
          "description": "Output only. The ID of the data link. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The type of the data.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "A data link to YouTube video."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VIDEO"
          ]
        },
        "status": {
          "description": "Output only. The status of the data link.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Link has been requested by one party, but not confirmed by the other party.",
            "Link is waiting for the customer to approve.",
            "Link is established and can be used as needed.",
            "Link is no longer valid and should be ignored.",
            "Link request has been cancelled by the requester and further cleanup may be needed.",
            "Link request has been rejected by the approver."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUESTED",
            "PENDING_APPROVAL",
            "ENABLED",
            "DISABLED",
            "REVOKED",
            "REJECTED"
          ]
        },
        "youtubeVideo": {
          "description": "Immutable. A data link to YouTube video.",
          "$ref": "GoogleAdsGoogleadsV21Resources__YoutubeVideoIdentifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__YoutubeVideoIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__YoutubeVideoIdentifier",
      "description": "The identifier for YouTube video",
      "type": "object",
      "properties": {
        "channelId": {
          "description": "Immutable. The ID of the hosting channel of the video. This is a string value with “UC” prefix. For example, \"UCK8sQmJBp8GCxrOtXWBpyEA\".",
          "type": "string"
        },
        "videoId": {
          "description": "Immutable. The ID of the video associated with the video link. This is the 11 character string value used in the YouTube video URL. For example, video ID is jV1vkHv4zq8 from the YouTube video URL \"https://www.youtube.com/watch?v=jV1vkHv4zq8&t=2s\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DetailContentSuitabilityPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__DetailContentSuitabilityPlacementView",
      "description": "A detail content suitability placement view. {-- next tag to use: 6 --}",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the detail content suitability placement view. Detail content suitability placement view resource names have the form: `customers/{customer_id}/detailContentSuitabilityPlacementViews/{placement_fingerprint}`",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The display name is URL for websites, YouTube video name for YouTube videos, and translated mobile app name for mobile apps.",
          "readOnly": true,
          "type": "string"
        },
        "placement": {
          "description": "Output only. The automatic placement string at detail level, for example. website url, mobile application id, or a YouTube video id.",
          "readOnly": true,
          "type": "string"
        },
        "placementType": {
          "description": "Output only. Represents the type of the placement, for example, Website, YouTubeVideo and MobileApplication.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Websites(for example, 'www.flowers4sale.com').",
            "Mobile application categories(for example, 'Games').",
            "mobile applications(for example, 'mobileapp::2-com.whatsthewordanswers').",
            "YouTube videos(for example, 'youtube.com/video/wtLJPvx7-ys').",
            "YouTube channels(for example, 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').",
            "Surfaces owned and operated by Google(for example, 'tv.google.com')."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "GOOGLE_PRODUCTS"
          ]
        },
        "targetUrl": {
          "description": "Output only. URL of the placement, for example, website, link to the mobile application in app store, or a YouTube video URL.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DetailPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__DetailPlacementView",
      "description": "A view with metrics aggregated by ad group and URL or YouTube video.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the detail placement view. Detail placement view resource names have the form: `customers/{customer_id}/detailPlacementViews/{ad_group_id}~{base64_placement}`",
          "readOnly": true,
          "type": "string"
        },
        "placement": {
          "description": "Output only. The automatic placement string at detail level, e. g. website URL, mobile application ID, or a YouTube video ID.",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The display name is URL name for websites, YouTube video name for YouTube videos, and translated mobile app name for mobile apps.",
          "readOnly": true,
          "type": "string"
        },
        "groupPlacementTargetUrl": {
          "description": "Output only. URL of the group placement, for example, domain, link to the mobile application in app store, or a YouTube channel URL.",
          "readOnly": true,
          "type": "string"
        },
        "targetUrl": {
          "description": "Output only. URL of the placement, for example, website, link to the mobile application in app store, or a YouTube video URL.",
          "readOnly": true,
          "type": "string"
        },
        "placementType": {
          "description": "Output only. Type of the placement, for example, Website, YouTube Video, and Mobile Application.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Websites(for example, 'www.flowers4sale.com').",
            "Mobile application categories(for example, 'Games').",
            "mobile applications(for example, 'mobileapp::2-com.whatsthewordanswers').",
            "YouTube videos(for example, 'youtube.com/video/wtLJPvx7-ys').",
            "YouTube channels(for example, 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').",
            "Surfaces owned and operated by Google(for example, 'tv.google.com')."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "GOOGLE_PRODUCTS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DetailedDemographic": {
      "id": "GoogleAdsGoogleadsV21Resources__DetailedDemographic",
      "description": "A detailed demographic: a particular interest-based vertical to be targeted to reach users based on long-term life facts.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the detailed demographic. Detailed demographic resource names have the form: `customers/{customer_id}/detailedDemographics/{detailed_demographic_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the detailed demographic.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the detailed demographic. For example,\"Highest Level of Educational Attainment\"",
          "readOnly": true,
          "type": "string"
        },
        "parent": {
          "description": "Output only. The parent of the detailed_demographic.",
          "readOnly": true,
          "type": "string"
        },
        "launchedToAll": {
          "description": "Output only. True if the detailed demographic is launched to all channels and locales.",
          "readOnly": true,
          "type": "boolean"
        },
        "availabilities": {
          "description": "Output only. Availability information of the detailed demographic.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CriterionCategoryAvailability"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CriterionCategoryAvailability": {
      "id": "GoogleAdsGoogleadsV21Common__CriterionCategoryAvailability",
      "description": "Information of category availability, per advertising channel.",
      "type": "object",
      "properties": {
        "channel": {
          "description": "Channel types and subtypes that are available to the category.",
          "$ref": "GoogleAdsGoogleadsV21Common__CriterionCategoryChannelAvailability"
        },
        "locale": {
          "description": "Locales that are available to the category for the channel.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CriterionCategoryLocaleAvailability"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CriterionCategoryChannelAvailability": {
      "id": "GoogleAdsGoogleadsV21Common__CriterionCategoryChannelAvailability",
      "description": "Information of advertising channel type and subtypes a category is available in.",
      "type": "object",
      "properties": {
        "availabilityMode": {
          "description": "Format of the channel availability. Can be ALL_CHANNELS (the rest of the fields will not be set), CHANNEL_TYPE (only advertising_channel_type type will be set, the category is available to all sub types under it) or CHANNEL_TYPE_AND_SUBTYPES (advertising_channel_type, advertising_channel_sub_type, and include_default_channel_sub_type will all be set).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The category is available to campaigns of all channel types and subtypes.",
            "The category is available to campaigns of a specific channel type, including all subtypes under it.",
            "The category is available to campaigns of a specific channel type and subtype(s)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_CHANNELS",
            "CHANNEL_TYPE_AND_ALL_SUBTYPES",
            "CHANNEL_TYPE_AND_SUBSET_SUBTYPES"
          ]
        },
        "advertisingChannelType": {
          "description": "Channel type the category is available to.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search Network. Includes display bundled, and Search+ campaigns.",
            "Google Display Network only.",
            "Shopping campaigns serve on the shopping property and on google.com search results.",
            "Hotel Ads campaigns.",
            "Video campaigns.",
            "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
            "Local ads campaigns.",
            "Smart campaigns.",
            "Performance Max campaigns.",
            "Local services campaigns.",
            "Travel campaigns.",
            "Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "SHOPPING",
            "HOTEL",
            "VIDEO",
            "MULTI_CHANNEL",
            "LOCAL",
            "SMART",
            "PERFORMANCE_MAX",
            "LOCAL_SERVICES",
            "TRAVEL",
            "DEMAND_GEN"
          ]
        },
        "advertisingChannelSubType": {
          "description": "Channel subtypes under the channel type the category is available to.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used as a return value only. Represents value unknown in this version.",
              "Mobile app campaigns for Search.",
              "Mobile app campaigns for Display.",
              "AdWords express campaigns for search.",
              "AdWords Express campaigns for display.",
              "Smart Shopping campaigns.",
              "Gmail Ad campaigns.",
              "Smart display campaigns. New campaigns of this sub type cannot be created.",
              "Video TrueView for Action campaigns.",
              "Video campaigns with non-skippable video ads.",
              "App Campaign that lets you easily promote your Android or iOS app across Google's top properties including Search, Play, YouTube, and the Google Display Network.",
              "App Campaign for engagement, focused on driving re-engagement with the app across several of Google's top properties including Search, YouTube, and the Google Display Network.",
              "Campaigns specialized for local advertising.",
              "Shopping Comparison Listing campaigns.",
              "Standard Smart campaigns.",
              "Video campaigns with sequence video ads.",
              "App Campaign for pre registration, specialized for advertising mobile app pre-registration, that targets multiple advertising channels across Google Play, YouTube and Display Network. See https://support.google.com/google-ads/answer/9441344 to learn more.",
              "Video reach campaign with Target Frequency bidding strategy.",
              "Travel Activities campaigns.",
              "YouTube Audio campaigns."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "SEARCH_MOBILE_APP",
              "DISPLAY_MOBILE_APP",
              "SEARCH_EXPRESS",
              "DISPLAY_EXPRESS",
              "SHOPPING_SMART_ADS",
              "DISPLAY_GMAIL_AD",
              "DISPLAY_SMART_CAMPAIGN",
              "VIDEO_ACTION",
              "VIDEO_NON_SKIPPABLE",
              "APP_CAMPAIGN",
              "APP_CAMPAIGN_FOR_ENGAGEMENT",
              "LOCAL_CAMPAIGN",
              "SHOPPING_COMPARISON_LISTING_ADS",
              "SMART_CAMPAIGN",
              "VIDEO_SEQUENCE",
              "APP_CAMPAIGN_FOR_PRE_REGISTRATION",
              "VIDEO_REACH_TARGET_FREQUENCY",
              "TRAVEL_ACTIVITIES",
              "YOUTUBE_AUDIO"
            ]
          }
        },
        "includeDefaultChannelSubType": {
          "description": "Whether default channel sub type is included. For example, advertising_channel_type being DISPLAY and include_default_channel_sub_type being false means that the default display campaign where channel sub type is not set is not included in this availability configuration.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CriterionCategoryLocaleAvailability": {
      "id": "GoogleAdsGoogleadsV21Common__CriterionCategoryLocaleAvailability",
      "description": "Information about which locales a category is available in.",
      "type": "object",
      "properties": {
        "availabilityMode": {
          "description": "Format of the locale availability. Can be LAUNCHED_TO_ALL (both country and language will be empty), COUNTRY (only country will be set), LANGUAGE (only language wil be set), COUNTRY_AND_LANGUAGE (both country and language will be set).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The category is available to campaigns of all locales.",
            "The category is available to campaigns within a list of countries, regardless of language.",
            "The category is available to campaigns within a list of languages, regardless of country.",
            "The category is available to campaigns within a list of country, language pairs."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_LOCALES",
            "COUNTRY_AND_ALL_LANGUAGES",
            "LANGUAGE_AND_ALL_COUNTRIES",
            "COUNTRY_AND_LANGUAGE"
          ]
        },
        "countryCode": {
          "description": "The ISO-3166-1 alpha-2 country code associated with the category.",
          "type": "string"
        },
        "languageCode": {
          "description": "ISO 639-1 code of the language associated with the category.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DisplayKeywordView": {
      "id": "GoogleAdsGoogleadsV21Resources__DisplayKeywordView",
      "description": "A display keyword view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the display keyword view. Display Keyword view resource names have the form: `customers/{customer_id}/displayKeywordViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DistanceView": {
      "id": "GoogleAdsGoogleadsV21Resources__DistanceView",
      "description": "A distance view with metrics aggregated by the user's distance from an advertiser's location extensions. Each DistanceBucket includes all impressions that fall within its distance and a single impression will contribute to the metrics for all DistanceBuckets that include the user's distance.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the distance view. Distance view resource names have the form: `customers/{customer_id}/distanceViews/1~{distance_bucket}`",
          "readOnly": true,
          "type": "string"
        },
        "distanceBucket": {
          "description": "Output only. Grouping of user distance from location extensions.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "User was within 700m of the location.",
            "User was within 1KM of the location.",
            "User was within 5KM of the location.",
            "User was within 10KM of the location.",
            "User was within 15KM of the location.",
            "User was within 20KM of the location.",
            "User was within 25KM of the location.",
            "User was within 30KM of the location.",
            "User was within 35KM of the location.",
            "User was within 40KM of the location.",
            "User was within 45KM of the location.",
            "User was within 50KM of the location.",
            "User was within 55KM of the location.",
            "User was within 60KM of the location.",
            "User was within 65KM of the location.",
            "User was beyond 65KM of the location.",
            "User was within 0.7 miles of the location.",
            "User was within 1 mile of the location.",
            "User was within 5 miles of the location.",
            "User was within 10 miles of the location.",
            "User was within 15 miles of the location.",
            "User was within 20 miles of the location.",
            "User was within 25 miles of the location.",
            "User was within 30 miles of the location.",
            "User was within 35 miles of the location.",
            "User was within 40 miles of the location.",
            "User was beyond 40 miles of the location."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WITHIN_700M",
            "WITHIN_1KM",
            "WITHIN_5KM",
            "WITHIN_10KM",
            "WITHIN_15KM",
            "WITHIN_20KM",
            "WITHIN_25KM",
            "WITHIN_30KM",
            "WITHIN_35KM",
            "WITHIN_40KM",
            "WITHIN_45KM",
            "WITHIN_50KM",
            "WITHIN_55KM",
            "WITHIN_60KM",
            "WITHIN_65KM",
            "BEYOND_65KM",
            "WITHIN_0_7MILES",
            "WITHIN_1MILE",
            "WITHIN_5MILES",
            "WITHIN_10MILES",
            "WITHIN_15MILES",
            "WITHIN_20MILES",
            "WITHIN_25MILES",
            "WITHIN_30MILES",
            "WITHIN_35MILES",
            "WITHIN_40MILES",
            "BEYOND_40MILES"
          ]
        },
        "metricSystem": {
          "description": "Output only. True if the DistanceBucket is using the metric system, false otherwise.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DynamicSearchAdsSearchTermView": {
      "id": "GoogleAdsGoogleadsV21Resources__DynamicSearchAdsSearchTermView",
      "description": "A dynamic search ads search term view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the dynamic search ads search term view. Dynamic search ads search term view resource names have the form: `customers/{customer_id}/dynamicSearchAdsSearchTermViews/{ad_group_id}~{search_term_fingerprint}~{headline_fingerprint}~{landing_page_fingerprint}~{page_url_fingerprint}`",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. Search term This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "headline": {
          "description": "Output only. The dynamically generated headline of the Dynamic Search Ad. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "landingPage": {
          "description": "Output only. The dynamically selected landing page URL of the impression. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "pageUrl": {
          "description": "Output only. The URL of page feed item served for the impression. This field is read-only.",
          "readOnly": true,
          "type": "string"
        },
        "hasNegativeKeyword": {
          "description": "Output only. True if query matches a negative keyword. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "hasMatchingKeyword": {
          "description": "Output only. True if query is added to targeted keywords. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        },
        "hasNegativeUrl": {
          "description": "Output only. True if query matches a negative url. This field is read-only.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ExpandedLandingPageView": {
      "id": "GoogleAdsGoogleadsV21Resources__ExpandedLandingPageView",
      "description": "A landing page view with metrics aggregated at the expanded final URL level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the expanded landing page view. Expanded landing page view resource names have the form: `customers/{customer_id}/expandedLandingPageViews/{expanded_final_url_fingerprint}`",
          "readOnly": true,
          "type": "string"
        },
        "expandedFinalUrl": {
          "description": "Output only. The final URL that clicks are directed to.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__FinalUrlExpansionAssetView": {
      "id": "GoogleAdsGoogleadsV21Resources__FinalUrlExpansionAssetView",
      "description": "FinalUrlExpansionAssetView Resource.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the FinalUrlExpansionAsset.",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. Campaign in which the asset served.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. The ID of the asset.",
          "readOnly": true,
          "type": "string"
        },
        "fieldType": {
          "description": "Output only. The field type of the asset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        },
        "status": {
          "description": "Output only. Status of the FinalUrlExpansionAsset.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Asset link is enabled.",
            "Asset link has been removed.",
            "Asset link is paused."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED",
            "PAUSED"
          ]
        },
        "finalUrl": {
          "description": "Output only. Final URL of the FinalUrlExpansionAsset.",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. Ad Group in which FinalUrlExpansionAsset served.",
          "readOnly": true,
          "type": "string"
        },
        "assetGroup": {
          "description": "Output only. Asset Group in which FinalUrlExpansionAsset served.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GenderView": {
      "id": "GoogleAdsGoogleadsV21Resources__GenderView",
      "description": "A gender view. The gender_view resource reflects the effective serving state, rather than what criteria were added. An ad group without gender criteria by default shows to all genders, so all genders appear in gender_view with stats.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the gender view. Gender view resource names have the form: `customers/{customer_id}/genderViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GeoTargetConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__GeoTargetConstant",
      "description": "A geo target constant.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the geo target constant. Geo target constant resource names have the form: `geoTargetConstants/{geo_target_constant_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the geo target constant.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. Geo target constant English name.",
          "readOnly": true,
          "type": "string"
        },
        "countryCode": {
          "description": "Output only. The ISO-3166-1 alpha-2 country code that is associated with the target.",
          "readOnly": true,
          "type": "string"
        },
        "targetType": {
          "description": "Output only. Geo target constant target type.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. Geo target constant status.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The geo target constant is valid.",
            "The geo target constant is obsolete and will be removed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVAL_PLANNED"
          ]
        },
        "canonicalName": {
          "description": "Output only. The fully qualified English name, consisting of the target's name and that of its parent and country.",
          "readOnly": true,
          "type": "string"
        },
        "parentGeoTarget": {
          "description": "Output only. The resource name of the parent geo target constant. Geo target constant resource names have the form: `geoTargetConstants/{parent_geo_target_constant_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GeographicView": {
      "id": "GoogleAdsGoogleadsV21Resources__GeographicView",
      "description": "A geographic view. Geographic View includes all metrics aggregated at the country level, one row per country. It reports metrics at either actual physical location of the user or an area of interest. If other segment fields are used, you may get more than one row per country.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the geographic view. Geographic view resource names have the form: `customers/{customer_id}/geographicViews/{country_criterion_id}~{location_type}`",
          "readOnly": true,
          "type": "string"
        },
        "locationType": {
          "description": "Output only. Type of the geo targeting of the campaign.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Location the user is interested in while making the query.",
            "Location of the user issuing the query."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AREA_OF_INTEREST",
            "LOCATION_OF_PRESENCE"
          ]
        },
        "countryCriterionId": {
          "description": "Output only. Criterion Id for the country.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GroupContentSuitabilityPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__GroupContentSuitabilityPlacementView",
      "description": "A group content suitability placement view. {-- next tag to use: 6 --}",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the group content suitability placement view. Group content suitability placement view resource names have the form: `customers/{customer_id}/groupContentSuitabilityPlacementViews/{placement_fingerprint}`",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The display name is URL for websites, YouTube video name for YouTube videos, and translated mobile app name for mobile apps.",
          "readOnly": true,
          "type": "string"
        },
        "placement": {
          "description": "Output only. The automatic placement string at group level, for example. website url, mobile application id, or a YouTube video id.",
          "readOnly": true,
          "type": "string"
        },
        "placementType": {
          "description": "Output only. Represents the type of the placement, for example, Website, YouTubeVideo and MobileApplication.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Websites(for example, 'www.flowers4sale.com').",
            "Mobile application categories(for example, 'Games').",
            "mobile applications(for example, 'mobileapp::2-com.whatsthewordanswers').",
            "YouTube videos(for example, 'youtube.com/video/wtLJPvx7-ys').",
            "YouTube channels(for example, 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').",
            "Surfaces owned and operated by Google(for example, 'tv.google.com')."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "GOOGLE_PRODUCTS"
          ]
        },
        "targetUrl": {
          "description": "Output only. URL of the placement, for example, website, link to the mobile application in app store, or a YouTube video URL.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GroupPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__GroupPlacementView",
      "description": "A group placement view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the group placement view. Group placement view resource names have the form: `customers/{customer_id}/groupPlacementViews/{ad_group_id}~{base64_placement}`",
          "readOnly": true,
          "type": "string"
        },
        "placement": {
          "description": "Output only. The automatic placement string at group level, e. g. web domain, mobile app ID, or a YouTube channel ID.",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. Domain name for websites and YouTube channel name for YouTube channels.",
          "readOnly": true,
          "type": "string"
        },
        "targetUrl": {
          "description": "Output only. URL of the group placement, for example, domain, link to the mobile application in app store, or a YouTube channel URL.",
          "readOnly": true,
          "type": "string"
        },
        "placementType": {
          "description": "Output only. Type of the placement, for example, Website, YouTube Channel, Mobile Application.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Websites(for example, 'www.flowers4sale.com').",
            "Mobile application categories(for example, 'Games').",
            "mobile applications(for example, 'mobileapp::2-com.whatsthewordanswers').",
            "YouTube videos(for example, 'youtube.com/video/wtLJPvx7-ys').",
            "YouTube channels(for example, 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').",
            "Surfaces owned and operated by Google(for example, 'tv.google.com')."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "GOOGLE_PRODUCTS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__HotelGroupView": {
      "id": "GoogleAdsGoogleadsV21Resources__HotelGroupView",
      "description": "A hotel group view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the hotel group view. Hotel Group view resource names have the form: `customers/{customer_id}/hotelGroupViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__HotelPerformanceView": {
      "id": "GoogleAdsGoogleadsV21Resources__HotelPerformanceView",
      "description": "A hotel performance view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the hotel performance view. Hotel performance view resource names have the form: `customers/{customer_id}/hotelPerformanceView`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__HotelReconciliation": {
      "id": "GoogleAdsGoogleadsV21Resources__HotelReconciliation",
      "description": "A hotel reconciliation. It contains conversion information from Hotel bookings to reconcile with advertiser records. These rows may be updated or canceled before billing through Bulk Uploads.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the hotel reconciliation. Hotel reconciliation resource names have the form: `customers/{customer_id}/hotelReconciliations/{commission_id}`",
          "type": "string"
        },
        "commissionId": {
          "description": "Required. Output only. The commission ID is Google's ID for this booking. Every booking event is assigned a Commission ID to help you match it to a guest stay.",
          "readOnly": true,
          "type": "string"
        },
        "orderId": {
          "description": "Output only. The order ID is the identifier for this booking as provided in the 'transaction_id' parameter of the conversion tracking tag.",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The resource name for the Campaign associated with the conversion.",
          "readOnly": true,
          "type": "string"
        },
        "hotelCenterId": {
          "description": "Output only. Identifier for the Hotel Center account which provides the rates for the Hotel campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "hotelId": {
          "description": "Output only. Unique identifier for the booked property, as provided in the Hotel Center feed. The hotel ID comes from the 'ID' parameter of the conversion tracking tag.",
          "readOnly": true,
          "type": "string"
        },
        "checkInDate": {
          "description": "Output only. Check-in date recorded when the booking is made. If the check-in date is modified at reconciliation, the revised date will then take the place of the original date in this column. Format is YYYY-MM-DD.",
          "readOnly": true,
          "type": "string"
        },
        "checkOutDate": {
          "description": "Output only. Check-out date recorded when the booking is made. If the check-in date is modified at reconciliation, the revised date will then take the place of the original date in this column. Format is YYYY-MM-DD.",
          "readOnly": true,
          "type": "string"
        },
        "reconciledValueMicros": {
          "description": "Required. Output only. Reconciled value is the final value of a booking as paid by the guest. If original booking value changes for any reason, such as itinerary changes or room upsells, the reconciled value should be the full final amount collected. If a booking is canceled, the reconciled value should include the value of any cancellation fees or non-refundable nights charged. Value is in millionths of the base unit currency. For example, $12.35 would be represented as 12350000. Currency unit is in the default customer currency.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billed": {
          "description": "Output only. Whether a given booking has been billed. Once billed, a booking can't be modified.",
          "readOnly": true,
          "type": "boolean"
        },
        "status": {
          "description": "Required. Output only. Current status of a booking with regards to reconciliation and billing. Bookings should be reconciled within 45 days after the check-out date. Any booking not reconciled within 45 days will be billed at its original value.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Bookings are for a future date, or a stay is underway but the check-out date hasn't passed. An active reservation can't be reconciled.",
            "Check-out has already taken place, or the booked dates have passed without cancellation. Bookings that are not reconciled within 45 days of the check-out date are billed based on the original booking price.",
            "These bookings have been reconciled. Reconciled bookings are billed 45 days after the check-out date.",
            "This booking was marked as canceled. Canceled stays with a value greater than zero (due to minimum stay rules or cancellation fees) are billed 45 days after the check-out date."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESERVATION_ENABLED",
            "RECONCILIATION_NEEDED",
            "RECONCILED",
            "CANCELED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__IncomeRangeView": {
      "id": "GoogleAdsGoogleadsV21Resources__IncomeRangeView",
      "description": "An income range view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the income range view. Income range view resource names have the form: `customers/{customer_id}/incomeRangeViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordView": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordView",
      "description": "A keyword view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the keyword view. Keyword view resource names have the form: `customers/{customer_id}/keywordViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__KeywordThemeConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__KeywordThemeConstant",
      "description": "A Smart Campaign keyword theme constant.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the keyword theme constant. Keyword theme constant resource names have the form: `keywordThemeConstants/{keyword_theme_id}~{sub_keyword_theme_id}`",
          "readOnly": true,
          "type": "string"
        },
        "countryCode": {
          "description": "Output only. The ISO-3166 Alpha-2 country code of the constant, eg. \"US\". To display and query matching purpose, the keyword theme needs to be localized.",
          "readOnly": true,
          "type": "string"
        },
        "languageCode": {
          "description": "Output only. The ISO-639-1 language code with 2 letters of the constant, eg. \"en\". To display and query matching purpose, the keyword theme needs to be localized.",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The display name of the keyword theme or sub keyword theme.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LandingPageView": {
      "id": "GoogleAdsGoogleadsV21Resources__LandingPageView",
      "description": "A landing page view with metrics aggregated at the unexpanded final URL level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the landing page view. Landing page view resource names have the form: `customers/{customer_id}/landingPageViews/{unexpanded_final_url_fingerprint}`",
          "readOnly": true,
          "type": "string"
        },
        "unexpandedFinalUrl": {
          "description": "Output only. The advertiser-specified final URL.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LanguageConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__LanguageConstant",
      "description": "A language.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the language constant. Language constant resource names have the form: `languageConstants/{criterion_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the language constant.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "code": {
          "description": "Output only. The language code, for example, \"en_US\", \"en_AU\", \"es\", \"fr\", etc.",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "Output only. The full name of the language in English, for example, \"English (US)\", \"Spanish\", etc.",
          "readOnly": true,
          "type": "string"
        },
        "targetable": {
          "description": "Output only. Whether the language is targetable.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocationView": {
      "id": "GoogleAdsGoogleadsV21Resources__LocationView",
      "description": "A location view summarizes the performance of campaigns by a Location criterion. If no Location criterion is set, no results are returned; instead, use geographic_view or user_location_view for visitor location data.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the location view. Location view resource names have the form: `customers/{customer_id}/locationViews/{campaign_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocationInterestView": {
      "id": "GoogleAdsGoogleadsV21Resources__LocationInterestView",
      "description": "A location interest view summarizes the performance of adgroup location interest criteria.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the location interest view. Location interest view resource names have the form: `customers/{customer_id}/locationInterestViews/{campaign_id}~{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ManagedPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__ManagedPlacementView",
      "description": "A managed placement view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Managed Placement view. Managed placement view resource names have the form: `customers/{customer_id}/managedPlacementViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ContentCriterionView": {
      "id": "GoogleAdsGoogleadsV21Resources__ContentCriterionView",
      "description": "A content criterion view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the content criterion view. Content criterion view resource names have the form: `customers/{customer_id}/contentCriterionViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MediaFile": {
      "id": "GoogleAdsGoogleadsV21Resources__MediaFile",
      "description": "A media file.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the media file. Media file resource names have the form: `customers/{customer_id}/mediaFiles/{media_file_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the media file.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Immutable. Type of the media file.",
          "type": "string",
          "enumDescriptions": [
            "The media type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "Static image, used for image ad.",
            "Small image, used for map ad.",
            "ZIP file, used in fields of template ads.",
            "Audio file.",
            "Video file.",
            "Animated image, such as animated GIF."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMAGE",
            "ICON",
            "MEDIA_BUNDLE",
            "AUDIO",
            "VIDEO",
            "DYNAMIC_IMAGE"
          ]
        },
        "mimeType": {
          "description": "Output only. The mime type of the media file.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "The mime type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "MIME type of image/jpeg.",
            "MIME type of image/gif.",
            "MIME type of image/png.",
            "MIME type of application/x-shockwave-flash.",
            "MIME type of text/html.",
            "MIME type of application/pdf.",
            "MIME type of application/msword.",
            "MIME type of application/vnd.ms-excel.",
            "MIME type of application/rtf.",
            "MIME type of audio/wav.",
            "MIME type of audio/mp3.",
            "MIME type of application/x-html5-ad-zip."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMAGE_JPEG",
            "IMAGE_GIF",
            "IMAGE_PNG",
            "FLASH",
            "TEXT_HTML",
            "PDF",
            "MSWORD",
            "MSEXCEL",
            "RTF",
            "AUDIO_WAV",
            "AUDIO_MP3",
            "HTML5_AD_ZIP"
          ]
        },
        "sourceUrl": {
          "description": "Immutable. The URL of where the original media file was downloaded from (or a file name). Only used for media of type AUDIO and IMAGE.",
          "type": "string"
        },
        "name": {
          "description": "Immutable. The name of the media file. The name can be used by clients to help identify previously uploaded media.",
          "type": "string"
        },
        "fileSize": {
          "description": "Output only. The size of the media file in bytes.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "image": {
          "description": "Immutable. Encapsulates an Image.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MediaImage"
        },
        "mediaBundle": {
          "description": "Immutable. A ZIP archive media the content of which contains HTML5 assets.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MediaBundle"
        },
        "audio": {
          "description": "Output only. Encapsulates an Audio.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__MediaAudio"
        },
        "video": {
          "description": "Immutable. Encapsulates a Video.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MediaVideo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MediaImage": {
      "id": "GoogleAdsGoogleadsV21Resources__MediaImage",
      "description": "Encapsulates an Image.",
      "type": "object",
      "properties": {
        "data": {
          "description": "Immutable. Raw image data.",
          "type": "string",
          "format": "byte"
        },
        "fullSizeImageUrl": {
          "description": "Output only. The url to the full size version of the image.",
          "readOnly": true,
          "type": "string"
        },
        "previewSizeImageUrl": {
          "description": "Output only. The url to the preview size version of the image.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MediaBundle": {
      "id": "GoogleAdsGoogleadsV21Resources__MediaBundle",
      "description": "Represents a ZIP archive media the content of which contains HTML5 assets.",
      "type": "object",
      "properties": {
        "data": {
          "description": "Immutable. Raw zipped data.",
          "type": "string",
          "format": "byte"
        },
        "url": {
          "description": "Output only. The url to access the uploaded zipped data. For example, https://tpc.googlesyndication.com/simgad/123 This field is read-only.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MediaAudio": {
      "id": "GoogleAdsGoogleadsV21Resources__MediaAudio",
      "description": "Encapsulates an Audio.",
      "type": "object",
      "properties": {
        "adDurationMillis": {
          "description": "Output only. The duration of the Audio in milliseconds.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MediaVideo": {
      "id": "GoogleAdsGoogleadsV21Resources__MediaVideo",
      "description": "Encapsulates a Video.",
      "type": "object",
      "properties": {
        "adDurationMillis": {
          "description": "Output only. The duration of the Video in milliseconds.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "youtubeVideoId": {
          "description": "Immutable. The YouTube video ID (as seen in YouTube URLs). Adding prefix \"https://www.youtube.com/watch?v=\" to this ID will get the YouTube streaming URL for this video.",
          "type": "string"
        },
        "advertisingIdCode": {
          "description": "Output only. The Advertising Digital Identification code for this video, as defined by the American Association of Advertising Agencies, used mainly for television commercials.",
          "readOnly": true,
          "type": "string"
        },
        "isciCode": {
          "description": "Output only. The Industry Standard Commercial Identifier code for this video, used mainly for television commercials.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocalServicesEmployee": {
      "id": "GoogleAdsGoogleadsV21Resources__LocalServicesEmployee",
      "description": "A local services employee resource.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Local Services Verification. Local Services Verification resource names have the form: `customers/{customer_id}/localServicesEmployees/{gls_employee_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the employee.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "creationDateTime": {
          "description": "Output only. Timestamp of employee creation. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. Employee status, such as DELETED or ENABLED.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Employee is not removed, and employee status is active.",
            "Employee is removed. Used to delete an employee from the business."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        },
        "type": {
          "description": "Output only. Employee type.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Represents the owner of the business.",
            "Represents an employee of the business."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_OWNER",
            "EMPLOYEE"
          ]
        },
        "universityDegrees": {
          "description": "Output only. A list of degrees this employee has obtained, and wants to feature.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__UniversityDegree"
          }
        },
        "residencies": {
          "description": "Output only. The institutions where the employee has completed their residency.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Residency"
          }
        },
        "fellowships": {
          "description": "Output only. The institutions where the employee has completed their fellowship.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Fellowship"
          }
        },
        "jobTitle": {
          "description": "Output only. Job title for this employee, such as \"Senior partner\" in legal verticals.",
          "readOnly": true,
          "type": "string"
        },
        "yearStartedPracticing": {
          "description": "Output only. The year that this employee started practicing in this field.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "languagesSpoken": {
          "description": "Output only. Languages that the employee speaks, represented as language tags from https://developers.google.com/admin-sdk/directory/v1/languages",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "categoryIds": {
          "description": "Output only. Category of the employee. A list of Local Services category IDs can be found at https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "nationalProviderIdNumber": {
          "description": "Output only. NPI id associated with the employee.",
          "readOnly": true,
          "type": "string"
        },
        "emailAddress": {
          "description": "Output only. Email address of the employee.",
          "readOnly": true,
          "type": "string"
        },
        "firstName": {
          "description": "Output only. First name of the employee.",
          "readOnly": true,
          "type": "string"
        },
        "middleName": {
          "description": "Output only. Middle name of the employee.",
          "readOnly": true,
          "type": "string"
        },
        "lastName": {
          "description": "Output only. Last name of the employee.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__UniversityDegree": {
      "id": "GoogleAdsGoogleadsV21Resources__UniversityDegree",
      "description": "A list of degrees this employee has obtained, and wants to feature.",
      "type": "object",
      "properties": {
        "institutionName": {
          "description": "Output only. Name of the university at which the degree was obtained.",
          "readOnly": true,
          "type": "string"
        },
        "degree": {
          "description": "Output only. Name of the degree obtained.",
          "readOnly": true,
          "type": "string"
        },
        "graduationYear": {
          "description": "Output only. Year of graduation.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Residency": {
      "id": "GoogleAdsGoogleadsV21Resources__Residency",
      "description": "Details about the employee's medical residency. Residency is a stage of graduate medical education in which a qualified medical professional practices under the supervision of a senior clinician.",
      "type": "object",
      "properties": {
        "institutionName": {
          "description": "Output only. Name of the institution at which the residency was completed.",
          "readOnly": true,
          "type": "string"
        },
        "completionYear": {
          "description": "Output only. Year of completion.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Fellowship": {
      "id": "GoogleAdsGoogleadsV21Resources__Fellowship",
      "description": "Details about the employee's medical Fellowship. Fellowship is a period of medical training that the professional undertakes after finishing their residency.",
      "type": "object",
      "properties": {
        "institutionName": {
          "description": "Output only. Name of the instutition at which the fellowship was completed.",
          "readOnly": true,
          "type": "string"
        },
        "completionYear": {
          "description": "Output only. Year of completion.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocalServicesVerificationArtifact": {
      "id": "GoogleAdsGoogleadsV21Resources__LocalServicesVerificationArtifact",
      "description": "A local services verification resource.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the Local Services Verification. Local Services Verification resource names have the form: `customers/{customer_id}/localServicesVerificationArtifacts/{verification_artifact_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the verification artifact.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "creationDateTime": {
          "description": "Output only. The timestamp when this verification artifact was created. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. The status of the verification artifact.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Artifact has passed verification.",
            "Artifact has failed verification.",
            "Artifact is in the process of verification.",
            "Artifact needs user to upload information before it is verified.",
            "Artifact has been cancelled by the user."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PASSED",
            "FAILED",
            "PENDING",
            "NO_SUBMISSION",
            "CANCELLED"
          ]
        },
        "artifactType": {
          "description": "Output only. The type of the verification artifact.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Background check verification artifact.",
            "Insurance verification artifact.",
            "License verification artifact.",
            "Business registration check verification artifact."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BACKGROUND_CHECK",
            "INSURANCE",
            "LICENSE",
            "BUSINESS_REGISTRATION_CHECK"
          ]
        },
        "backgroundCheckVerificationArtifact": {
          "description": "Output only. A background check verification artifact.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__BackgroundCheckVerificationArtifact"
        },
        "insuranceVerificationArtifact": {
          "description": "Output only. An insurance verification artifact.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__InsuranceVerificationArtifact"
        },
        "licenseVerificationArtifact": {
          "description": "Output only. A license verification artifact.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__LicenseVerificationArtifact"
        },
        "businessRegistrationCheckVerificationArtifact": {
          "description": "Output only. A business registration check verification artifact.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationCheckVerificationArtifact"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BackgroundCheckVerificationArtifact": {
      "id": "GoogleAdsGoogleadsV21Resources__BackgroundCheckVerificationArtifact",
      "description": "A proto holding information specific to local services background check.",
      "type": "object",
      "properties": {
        "caseUrl": {
          "description": "Output only. URL to access background case.",
          "readOnly": true,
          "type": "string"
        },
        "finalAdjudicationDateTime": {
          "description": "Output only. The timestamp when this background check case result was adjudicated. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__InsuranceVerificationArtifact": {
      "id": "GoogleAdsGoogleadsV21Resources__InsuranceVerificationArtifact",
      "description": "A proto holding information specific to a local services insurance.",
      "type": "object",
      "properties": {
        "amountMicros": {
          "description": "Output only. Insurance amount. This is measured in \"micros\" of the currency mentioned in the insurance document.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "rejectionReason": {
          "description": "Output only. Insurance document's rejection reason.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Business name doesn't match business name for the Local Services Ad.",
            "Insurance amount doesn't meet requirement listed in the legal summaries documentation for that geographic + category ID combination.",
            "Insurance document is expired.",
            "Insurance document is missing a signature.",
            "Insurance document is missing a policy number.",
            "Commercial General Liability(CGL) box is not marked in the insurance document.",
            "Insurance document is in an editable format.",
            "Insurance document does not cover insurance for a particular category.",
            "Insurance document is missing an expiration date.",
            "Insurance document is poor quality - blurry images, illegible, etc...",
            "Insurance document is suspected of being edited.",
            "Insurance document not accepted. For example, documents of insurance proposals, but missing coverages are not accepted.",
            "Insurance document is not final.",
            "Insurance document has another flaw not listed explicitly."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_NAME_MISMATCH",
            "INSURANCE_AMOUNT_INSUFFICIENT",
            "EXPIRED",
            "NO_SIGNATURE",
            "NO_POLICY_NUMBER",
            "NO_COMMERCIAL_GENERAL_LIABILITY",
            "EDITABLE_FORMAT",
            "CATEGORY_MISMATCH",
            "MISSING_EXPIRATION_DATE",
            "POOR_QUALITY",
            "POTENTIALLY_EDITED",
            "WRONG_DOCUMENT_TYPE",
            "NON_FINAL",
            "OTHER"
          ]
        },
        "insuranceDocumentReadonly": {
          "description": "Output only. The readonly field containing the information for an uploaded insurance document.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LocalServicesDocumentReadOnly"
        },
        "expirationDateTime": {
          "description": "Output only. The timestamp when this insurance expires. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__LocalServicesDocumentReadOnly": {
      "id": "GoogleAdsGoogleadsV21Common__LocalServicesDocumentReadOnly",
      "description": "A Local Services Document with read only accessible data.",
      "type": "object",
      "properties": {
        "documentUrl": {
          "description": "URL to access an already uploaded Local Services document.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LicenseVerificationArtifact": {
      "id": "GoogleAdsGoogleadsV21Resources__LicenseVerificationArtifact",
      "description": "A proto holding information specific to a local services license.",
      "type": "object",
      "properties": {
        "licenseType": {
          "description": "Output only. License type / name.",
          "readOnly": true,
          "type": "string"
        },
        "licenseNumber": {
          "description": "Output only. License number.",
          "readOnly": true,
          "type": "string"
        },
        "licenseeFirstName": {
          "description": "Output only. First name of the licensee.",
          "readOnly": true,
          "type": "string"
        },
        "licenseeLastName": {
          "description": "Output only. Last name of the licensee.",
          "readOnly": true,
          "type": "string"
        },
        "rejectionReason": {
          "description": "Output only. License rejection reason.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Business name doesn't match business name for the Local Services Ad.",
            "License is unauthorized or been revoked.",
            "License is expired.",
            "License is poor quality - blurry images, illegible, etc...",
            "License cannot be verified due to a not legitimate image.",
            "License is not the requested document type or contains an invalid ID.",
            "License has another flaw not listed explicitly."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_NAME_MISMATCH",
            "UNAUTHORIZED",
            "EXPIRED",
            "POOR_QUALITY",
            "UNVERIFIABLE",
            "WRONG_DOCUMENT_OR_ID",
            "OTHER"
          ]
        },
        "licenseDocumentReadonly": {
          "description": "Output only. The readonly field containing the information for an uploaded license document.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LocalServicesDocumentReadOnly"
        },
        "expirationDateTime": {
          "description": "Output only. The timestamp when this license expires. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BusinessRegistrationCheckVerificationArtifact": {
      "id": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationCheckVerificationArtifact",
      "description": "A proto holding information specific to a local services business registration check.",
      "type": "object",
      "properties": {
        "registrationType": {
          "description": "Output only. The type of business registration check (number, document).",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Registration number check type.",
            "Registration document check type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NUMBER",
            "DOCUMENT"
          ]
        },
        "checkId": {
          "description": "Output only. The id of the check, such as vat_tax_id, representing \"VAT Tax ID\" requirement.",
          "readOnly": true,
          "type": "string"
        },
        "rejectionReason": {
          "description": "Output only. Registration document rejection reason.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Business name doesn't match business name for the Local Services Ad.",
            "Business details mismatch.",
            "Business registration ID not found.",
            "Uploaded document not clear, blurry, etc.",
            "Uploaded document has expired.",
            "Document revoked or annuled.",
            "Document type mismatch.",
            "Uploaded document could not be verified as legitimate.",
            "The business registration process could not be completed due to an issue. Contact https://support.google.com/localservices to learn more."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUSINESS_NAME_MISMATCH",
            "BUSINESS_DETAILS_MISMATCH",
            "ID_NOT_FOUND",
            "POOR_DOCUMENT_IMAGE_QUALITY",
            "DOCUMENT_EXPIRED",
            "DOCUMENT_INVALID",
            "DOCUMENT_TYPE_MISMATCH",
            "DOCUMENT_UNVERIFIABLE",
            "OTHER"
          ]
        },
        "registrationNumber": {
          "description": "Output only. Message storing government issued number for the business.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationNumber"
        },
        "registrationDocument": {
          "description": "Output only. Message storing document info for the business.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationDocument"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BusinessRegistrationNumber": {
      "id": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationNumber",
      "description": "A proto holding information specific to a local services business registration number.",
      "type": "object",
      "properties": {
        "number": {
          "description": "Output only. Government-issued number for the business.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__BusinessRegistrationDocument": {
      "id": "GoogleAdsGoogleadsV21Resources__BusinessRegistrationDocument",
      "description": "A proto holding information specific to a local services business registration document.",
      "type": "object",
      "properties": {
        "documentReadonly": {
          "description": "Output only. The readonly field containing the information for an uploaded business registration document.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__LocalServicesDocumentReadOnly"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MobileAppCategoryConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__MobileAppCategoryConstant",
      "description": "A mobile application category constant.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the mobile app category constant. Mobile app category constant resource names have the form: `mobileAppCategoryConstants/{mobile_app_category_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the mobile app category constant.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "name": {
          "description": "Output only. Mobile app category name.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MobileDeviceConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__MobileDeviceConstant",
      "description": "A mobile device constant.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the mobile device constant. Mobile device constant resource names have the form: `mobileDeviceConstants/{criterion_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the mobile device constant.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the mobile device.",
          "readOnly": true,
          "type": "string"
        },
        "manufacturerName": {
          "description": "Output only. The manufacturer of the mobile device.",
          "readOnly": true,
          "type": "string"
        },
        "operatingSystemName": {
          "description": "Output only. The operating system of the mobile device.",
          "readOnly": true,
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of mobile device.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Mobile phones.",
            "Tablets."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MOBILE",
            "TABLET"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadClientSummary": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadClientSummary",
      "description": "Offline conversion upload summary at customer level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the offline conversion upload summary at customer level. Offline conversion upload client summary resource names have the form: `customers/{customer_id}/offlineConversionUploadClientSummaries/{client}`",
          "readOnly": true,
          "type": "string"
        },
        "client": {
          "description": "Output only. Client type of the upload event.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Google Ads API.",
            "Google Ads web client, which could include multiple sources like Ads UI, SFTP, etc.",
            "Connection platform."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_ADS_API",
            "GOOGLE_ADS_WEB_CLIENT",
            "ADS_DATA_CONNECTOR"
          ]
        },
        "status": {
          "description": "Output only. Overall status for offline conversion client summary. Status is generated from most recent calendar day with upload stats.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Your offline data ingestion setup is active and optimal for downstream processing.",
            "Your offline ingestion setup is active, but there are further improvements you could make. See alerts.",
            "Your offline ingestion setup is active, but there are errors that require your attention. See alerts.",
            "Your offline ingestion setup has not received data in the last 28 days, there may be something wrong."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXCELLENT",
            "GOOD",
            "NEEDS_ATTENTION",
            "NO_RECENT_UPLOAD"
          ]
        },
        "totalEventCount": {
          "description": "Output only. Total count of uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "successfulEventCount": {
          "description": "Output only. Total count of successful uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "successRate": {
          "description": "Output only. Successful rate.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "pendingEventCount": {
          "description": "Output only. Total count of pending uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "pendingRate": {
          "description": "Output only. The ratio of total pending events to total events.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "lastUploadDateTime": {
          "description": "Output only. Date for the latest upload batch. The format is \"yyyy-mm-dd hh:mm:ss\", and it's in the time zone of the Google Ads account.",
          "readOnly": true,
          "type": "string"
        },
        "dailySummaries": {
          "description": "Output only. Summary of history stats by last N days.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary"
          }
        },
        "jobSummaries": {
          "description": "Output only. Summary of history stats by last N jobs.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary"
          }
        },
        "alerts": {
          "description": "Output only. Details for each error code. Alerts are generated from most recent calendar day with upload stats.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionAlert"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary",
      "description": "Historical upload summary, grouped by upload date or job.",
      "type": "object",
      "properties": {
        "successfulCount": {
          "description": "Output only. Total count of successful event.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "failedCount": {
          "description": "Output only. Total count of failed event.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "pendingCount": {
          "description": "Output only. Total count of pending uploaded event.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "jobId": {
          "description": "Output only. Dimension key for last N jobs.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "uploadDate": {
          "description": "Output only. Dimension key for last N days.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineConversionAlert": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineConversionAlert",
      "description": "Alert for offline conversion client summary.",
      "type": "object",
      "properties": {
        "error": {
          "description": "Output only. Error for offline conversion client alert.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionError"
        },
        "errorPercentage": {
          "description": "Output only. Percentage of the error, the range of this field should be [0, 1.0].",
          "readOnly": true,
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineConversionError": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineConversionError",
      "description": "Possible errors for offline conversion client summary.",
      "type": "object",
      "properties": {
        "collectionSizeError": {
          "description": "Output only. Collection size error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Too few.",
            "Too many."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_FEW",
            "TOO_MANY"
          ]
        },
        "conversionAdjustmentUploadError": {
          "description": "Output only. Conversion adjustment upload error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Can't import events to a conversion action that was just created. Try importing again in 6 hours.",
            "The conversion was already retracted. This adjustment was not processed.",
            "The conversion for this conversion action and conversion identifier can't be found. Make sure your conversion identifiers are associated with the correct conversion action and try again.",
            "Adjustment can't be made to a conversion that occurred more than 54 days ago.",
            "Adjustment has an `adjustment_date_time` that occurred before the associated conversion. Make sure your `adjustment_date_time` is correct and try again.",
            "More recent adjustment `adjustment_date_time` has already been reported for the associated conversion. Make sure your adjustment `adjustment_date_time` is correct and try again.",
            "Adjustment can't be recorded because the conversion occurred too recently. Try adjusting a conversion that occurred at least 24 hours ago.",
            "Can't make an adjustment to a conversion that is set up to use the default value. Check your conversion action value setting and try again.",
            "Try uploading fewer than 2001 adjustments in a single API request.",
            "The conversion has already been adjusted the maximum number of times. Make sure you're only making necessary adjustment to existing conversion.",
            "The conversion has prior a restatement with the same `adjustment_date_time`. Make sure your adjustment has the correct and unique `adjustment_date_time` and try again.",
            "Imported adjustment has a duplicate conversion adjustment with same `adjustment_date_time`. Make sure your adjustment has the correct `adjustment_date_time` and try again.",
            "Make sure you agree to the customer data processing terms in conversion settings and try again.",
            "Can't use enhanced conversions with the specified conversion action.",
            "Make sure you hash user provided data using SHA-256 and ensure you are normalizing according to the guidelines.",
            "Use user provided data such as emails or phone numbers hashed using SHA-256 and try again.",
            "Cannot set both gclid_date_time_pair and order_id. Use only 1 type and try again.",
            "Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.",
            "Multiple enhancements have the same conversion action and Order ID. Make sure your data is correctly configured and try again.",
            "Enhanced conversions can't be used for this account because of Google customer data policies. Contact your Google representative.",
            "Adjustment for website conversion requires Order ID (ie, transaction ID). Make sure your website tags capture Order IDs and you send the same Order IDs with your adjustment.",
            "Can't use adjustment with Order IDs containing personally-identifiable information (PII).",
            "The provided job id in the request is not within the allowed range. A job ID must be a positive integer in the range [1, 2^31).",
            "The conversion action specified in the adjustment request cannot be found. Make sure it's available in this account.",
            "The type of the conversion action specified in the adjustment request isn't supported for uploading adjustments. A conversion adjustment of type `RETRACTION` or `RESTATEMENT` is only permitted for conversion actions of type `SALESFORCE`, `UPLOAD_CLICK` or `WEBPAGE`. A conversion adjustment of type `ENHANCEMENT` is only permitted for conversion actions of type `WEBPAGE`."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_RECENT_CONVERSION_ACTION",
            "CONVERSION_ALREADY_RETRACTED",
            "CONVERSION_NOT_FOUND",
            "CONVERSION_EXPIRED",
            "ADJUSTMENT_PRECEDES_CONVERSION",
            "MORE_RECENT_RESTATEMENT_FOUND",
            "TOO_RECENT_CONVERSION",
            "CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE",
            "TOO_MANY_ADJUSTMENTS_IN_REQUEST",
            "TOO_MANY_ADJUSTMENTS",
            "RESTATEMENT_ALREADY_EXISTS",
            "DUPLICATE_ADJUSTMENT_IN_REQUEST",
            "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS",
            "CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT",
            "INVALID_USER_IDENTIFIER",
            "UNSUPPORTED_USER_IDENTIFIER",
            "GCLID_DATE_TIME_PAIR_AND_ORDER_ID_BOTH_SET",
            "CONVERSION_ALREADY_ENHANCED",
            "DUPLICATE_ENHANCEMENT_IN_REQUEST",
            "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCEMENT",
            "MISSING_ORDER_ID_FOR_WEBPAGE",
            "ORDER_ID_CONTAINS_PII",
            "INVALID_JOB_ID",
            "NO_CONVERSION_ACTION_FOUND",
            "INVALID_CONVERSION_ACTION_TYPE"
          ]
        },
        "conversionUploadError": {
          "description": "Output only. Conversion upload error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "Used for return value only. Represents value unknown in this version.",
            "Upload fewer than 2001 events in a single request.",
            "The imported gclid could not be decoded.",
            "The imported event has a `conversion_date_time` that precedes the click. Make sure your `conversion_date_time` is correct and try again.",
            "The imported event can't be recorded because its click occurred before this conversion's click-through window. Make sure you import the most recent data.",
            "The click associated with the given identifier or iOS URL parameter occurred less than 6 hours ago. Retry after 6 hours have passed.",
            "The imported event could not be attributed to a click. This may be because the event did not come from a Google Ads campaign.",
            "The click ID or call is associated with an Ads account you don't have access to. Make sure you import conversions for accounts managed by your manager account.",
            "Can't import events to a conversion action that was just created. Try importing again in 6 hours.",
            "At the time of the click, conversion tracking was not enabled in the effective conversion account of the click's Google Ads account.",
            "The imported event includes external attribution data, but the conversion action isn't set up to use an external attribution model. Make sure the conversion action is correctly configured and try again.",
            "The conversion action is set up to use an external attribution model, but the imported event is missing data. Make sure imported events include the external attribution credit and all necessary fields.",
            "Order IDs can't be used for a conversion measured with an external attribution model. Make sure the conversion is correctly configured and imported events include only necessary data and try again.",
            "The imported event includes an order ID that was previously recorded, so the event was not processed.",
            "Imported events include multiple conversions with the same order ID and were not processed. Make sure order IDs are unique and try again.",
            "Can't import calls that occurred less than 6 hours ago. Try uploading again in 6 hours.",
            "The call can't be recorded because it occurred before this conversion action's lookback window. Make sure your import is configured to get the most recent data.",
            "The call or click leading to the imported event can't be found. Make sure your data source is set up to include correct identifiers.",
            "The call has a `conversion_date_time` that precedes the associated click. Make sure your `conversion_date_time` is correct.",
            "At the time of the imported call, conversion tracking was not enabled in the effective conversion account of the click's Google Ads account.",
            "Make sure phone numbers are formatted as E.164 (+16502531234), International (+64 3-331 6005), or US national number (6502531234).",
            "The imported event has the same click and `conversion_date_time` as an existing conversion. Use a unique `conversion_date_time` or order ID for each unique event and try again.",
            "The imported call has the same `conversion_date_time` as an existing conversion. Make sure your `conversion_date_time` correctly configured and try again.",
            "Multiple events have the same click and `conversion_date_time`. Make sure your `conversion_date_time` is correctly configured and try again.",
            "Multiple events have the same call and `conversion_date_time`. Make sure your `conversion_date_time` is correctly configured and try again.",
            "Enable the custom variable in your conversion settings and try again.",
            "Can't import events with custom variables containing personally-identifiable information (PII). Remove these variables and try again.",
            "The click from the imported event is associated with a different Google Ads account. Make sure you're importing to the correct account.",
            "The click from the call is associated with a different Google Ads account. Make sure you're importing to the correct account. Query conversion_tracking_setting.google_ads_conversion_customer on Customer to identify the correct account.",
            "The connversion can't be imported because the conversion source didn't comply with Apple App Transparency Tracking (ATT) policies or because the customer didn't consent to tracking.",
            "The email address or phone number for this event can't be matched to a click. This may be because it didn't come from a Google Ads campaign, and you can safely ignore this warning. If this includes more imported events than is expected, you may need to check your setup.",
            "Make sure you hash user provided data using SHA-256 and ensure you are normalizing according to the guidelines.",
            "User provided data can't be used with external attribution models. Use a different attribution model or omit user identifiers and try again.",
            "The provided user identifiers are not supported. Use only hashed email or phone number and try again.",
            "Can't use both gbraid and wbraid parameters. Use only 1 and try again.",
            "Can't parse event import data. Check if your wbraid parameter was not modified and try again.",
            "Can't parse event import data. Check if your gbraid parameter was not modified and try again.",
            "Conversion actions that use one-per-click counting can't be used with gbraid or wbraid parameters.",
            "Enhanced conversions can't be used for this account because of Google customer data policies. Contact your Google representative.",
            "Make sure you agree to the customer data processing terms in conversion settings and try again. You can check your setting by querying conversion_tracking_setting.accepted_customer_data_terms on Customer.",
            "Can't import events with order IDs containing personally-identifiable information (PII).",
            "Make sure you've turned on enhanced conversions for leads in conversion settings and try again. You can check your setting by querying conversion_tracking_setting.enhanced_conversions_for_leads_enabled on Customer.",
            "The provided job id in the request is not within the allowed range. A job ID must be a positive integer in the range [1, 2^31).",
            "The conversion action specified in the upload request cannot be found. Make sure it's available in this account.",
            "The conversion action specified in the upload request isn't set up for uploading conversions."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_MANY_CONVERSIONS_IN_REQUEST",
            "UNPARSEABLE_GCLID",
            "CONVERSION_PRECEDES_EVENT",
            "EXPIRED_EVENT",
            "TOO_RECENT_EVENT",
            "EVENT_NOT_FOUND",
            "UNAUTHORIZED_CUSTOMER",
            "TOO_RECENT_CONVERSION_ACTION",
            "CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME",
            "EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "ORDER_ID_ALREADY_IN_USE",
            "DUPLICATE_ORDER_ID",
            "TOO_RECENT_CALL",
            "EXPIRED_CALL",
            "CALL_NOT_FOUND",
            "CONVERSION_PRECEDES_CALL",
            "CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME",
            "UNPARSEABLE_CALLERS_PHONE_NUMBER",
            "CLICK_CONVERSION_ALREADY_EXISTS",
            "CALL_CONVERSION_ALREADY_EXISTS",
            "DUPLICATE_CLICK_CONVERSION_IN_REQUEST",
            "DUPLICATE_CALL_CONVERSION_IN_REQUEST",
            "CUSTOM_VARIABLE_NOT_ENABLED",
            "CUSTOM_VARIABLE_VALUE_CONTAINS_PII",
            "INVALID_CUSTOMER_FOR_CLICK",
            "INVALID_CUSTOMER_FOR_CALL",
            "CONVERSION_NOT_COMPLIANT_WITH_ATT_POLICY",
            "CLICK_NOT_FOUND",
            "INVALID_USER_IDENTIFIER",
            "EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION_NOT_PERMITTED_WITH_USER_IDENTIFIER",
            "UNSUPPORTED_USER_IDENTIFIER",
            "GBRAID_WBRAID_BOTH_SET",
            "UNPARSEABLE_WBRAID",
            "UNPARSEABLE_GBRAID",
            "ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID",
            "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCED_CONVERSIONS",
            "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS",
            "ORDER_ID_CONTAINS_PII",
            "CUSTOMER_NOT_ENABLED_ENHANCED_CONVERSIONS_FOR_LEADS",
            "INVALID_JOB_ID",
            "NO_CONVERSION_ACTION_FOUND",
            "INVALID_CONVERSION_ACTION_TYPE"
          ]
        },
        "dateError": {
          "description": "Output only. Date error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Given field values do not correspond to a valid date.",
            "Given field values do not correspond to a valid date time.",
            "The string date's format should be yyyy-mm-dd.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss.ssssss.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss+|-hh:mm.",
            "Date is before allowed minimum.",
            "Date is after allowed maximum.",
            "Date range bounds are not in order.",
            "Both dates in range are null."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_FIELD_VALUES_IN_DATE",
            "INVALID_FIELD_VALUES_IN_DATE_TIME",
            "INVALID_STRING_DATE",
            "INVALID_STRING_DATE_TIME_MICROS",
            "INVALID_STRING_DATE_TIME_SECONDS",
            "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET",
            "EARLIER_THAN_MINIMUM_DATE",
            "LATER_THAN_MAXIMUM_DATE",
            "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE",
            "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL"
          ]
        },
        "distinctError": {
          "description": "Output only. Distinct error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Duplicate element.",
            "Duplicate type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_ELEMENT",
            "DUPLICATE_TYPE"
          ]
        },
        "fieldError": {
          "description": "Output only. Field error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The required field was not present.",
            "The field attempted to be mutated is immutable.",
            "The field's value is invalid.",
            "The field cannot be set.",
            "The required repeated field was empty.",
            "The field cannot be cleared.",
            "The field's value is on a deny-list for this field.",
            "The field's value cannot be modified, except for clearing."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUIRED",
            "IMMUTABLE_FIELD",
            "INVALID_VALUE",
            "VALUE_MUST_BE_UNSET",
            "REQUIRED_NONEMPTY_LIST",
            "FIELD_CANNOT_BE_CLEARED",
            "BLOCKED_VALUE",
            "FIELD_CAN_ONLY_BE_CLEARED"
          ]
        },
        "mutateError": {
          "description": "Output only. Mutate error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Requested resource was not found.",
            "Cannot mutate the same resource twice in one request.",
            "The field's contents don't match another field that represents the same data.",
            "Mutates are not allowed for the requested resource.",
            "The resource isn't in Google Ads. It belongs to another ads system.",
            "The resource being created already exists.",
            "This resource cannot be used with \"validate_only\".",
            "This operation cannot be used with \"partial_failure\".",
            "Attempt to write to read-only fields."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESOURCE_NOT_FOUND",
            "ID_EXISTS_IN_MULTIPLE_MUTATES",
            "INCONSISTENT_FIELD_VALUES",
            "MUTATE_NOT_ALLOWED",
            "RESOURCE_NOT_IN_GOOGLE_ADS",
            "RESOURCE_ALREADY_EXISTS",
            "RESOURCE_DOES_NOT_SUPPORT_VALIDATE_ONLY",
            "OPERATION_DOES_NOT_SUPPORT_PARTIAL_FAILURE",
            "RESOURCE_READ_ONLY"
          ]
        },
        "notAllowlistedError": {
          "description": "Output only. Not allowlisted error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Customer is not allowlisted for accessing this feature."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE"
          ]
        },
        "stringFormatError": {
          "description": "Output only. String format error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The input string value contains disallowed characters.",
            "The input string value is invalid for the associated field."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ILLEGAL_CHARS",
            "INVALID_FORMAT"
          ]
        },
        "stringLengthError": {
          "description": "Output only. String length error.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The specified field should have a least one non-whitespace character in it.",
            "Too short.",
            "Too long."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EMPTY",
            "TOO_SHORT",
            "TOO_LONG"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadConversionActionSummary": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineConversionUploadConversionActionSummary",
      "description": "Offline conversion upload summary at conversion action level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the offline conversion upload summary at conversion action level. Offline conversion upload conversion action summary resource names have the form: `customers/{customer_id}/offlineConversionUploadConversionActionSummaries/{conversion_action_id}~{client}`",
          "readOnly": true,
          "type": "string"
        },
        "client": {
          "description": "Output only. Client type of the upload event.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Google Ads API.",
            "Google Ads web client, which could include multiple sources like Ads UI, SFTP, etc.",
            "Connection platform."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_ADS_API",
            "GOOGLE_ADS_WEB_CLIENT",
            "ADS_DATA_CONNECTOR"
          ]
        },
        "conversionActionId": {
          "description": "Output only. Conversion action id.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "conversionActionName": {
          "description": "Output only. The name of the conversion action.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. Overall status for offline conversion upload conversion action summary. Status is generated from most recent calendar day with upload stats.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Your offline data ingestion setup is active and optimal for downstream processing.",
            "Your offline ingestion setup is active, but there are further improvements you could make. See alerts.",
            "Your offline ingestion setup is active, but there are errors that require your attention. See alerts.",
            "Your offline ingestion setup has not received data in the last 28 days, there may be something wrong."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXCELLENT",
            "GOOD",
            "NEEDS_ATTENTION",
            "NO_RECENT_UPLOAD"
          ]
        },
        "totalEventCount": {
          "description": "Output only. Total count of uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "successfulEventCount": {
          "description": "Output only. Total count of successful uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "pendingEventCount": {
          "description": "Output only. Total count of pending uploaded events.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "lastUploadDateTime": {
          "description": "Output only. Date for the latest upload batch. The format is \"yyyy-mm-dd hh:mm:ss\", and it's in the time zone of the Google Ads account.",
          "readOnly": true,
          "type": "string"
        },
        "dailySummaries": {
          "description": "Output only. Summary of history stats by last N days.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary"
          }
        },
        "jobSummaries": {
          "description": "Output only. Summary of history stats by last N jobs.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionSummary"
          }
        },
        "alerts": {
          "description": "Output only. Details for each error code. Alerts are generated from most recent calendar day with upload stats.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__OfflineConversionAlert"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineUserDataJob": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineUserDataJob",
      "description": "A job containing offline user data of store visitors, or user list members that will be processed asynchronously. The uploaded data isn't readable and the processing results of the job can only be read using GoogleAdsService.Search/SearchStream.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the offline user data job. Offline user data job resource names have the form: `customers/{customer_id}/offlineUserDataJobs/{offline_user_data_job_id}`",
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of this offline user data job.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "externalId": {
          "description": "Immutable. User specified job ID.",
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Immutable. Type of the job.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Store Sales Direct data for self service.",
            "Store Sales Direct data for third party.",
            "Customer Match user list data.",
            "Customer Match with attribute data."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "STORE_SALES_UPLOAD_FIRST_PARTY",
            "STORE_SALES_UPLOAD_THIRD_PARTY",
            "CUSTOMER_MATCH_USER_LIST",
            "CUSTOMER_MATCH_WITH_ATTRIBUTES"
          ]
        },
        "status": {
          "description": "Output only. Status of the job.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The job has been successfully created and pending for uploading.",
            "Upload(s) have been accepted and data is being processed.",
            "Uploaded data has been successfully processed.",
            "Uploaded data has failed to be processed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "RUNNING",
            "SUCCESS",
            "FAILED"
          ]
        },
        "failureReason": {
          "description": "Output only. Reason for the processing failure, if status is FAILED.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The matched transactions are insufficient.",
            "The uploaded transactions are insufficient.",
            "The average transaction value is unusually high for your account. If this is intended, contact support to request an exception. Learn more at https://support.google.com/google-ads/answer/10018944#transaction_value",
            "The average transaction value is unusually low for your account. If this is intended, contact support to request an exception. Learn more at https://support.google.com/google-ads/answer/10018944#transaction_value",
            "There's a currency code that you haven't used before in your uploads. If this is intended, contact support to request an exception. Learn more at https://support.google.com/google-ads/answer/10018944#Unrecognized_currency"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INSUFFICIENT_MATCHED_TRANSACTIONS",
            "INSUFFICIENT_TRANSACTIONS",
            "HIGH_AVERAGE_TRANSACTION_VALUE",
            "LOW_AVERAGE_TRANSACTION_VALUE",
            "NEWLY_OBSERVED_CURRENCY_CODE"
          ]
        },
        "operationMetadata": {
          "description": "Output only. Metadata of offline user data job depicting match rate range.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineUserDataJobMetadata"
        },
        "customerMatchUserListMetadata": {
          "description": "Immutable. Metadata for data updates to a CRM-based user list.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomerMatchUserListMetadata"
        },
        "storeSalesMetadata": {
          "description": "Immutable. Metadata for store sales data update.",
          "$ref": "GoogleAdsGoogleadsV21Common__StoreSalesMetadata"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OfflineUserDataJobMetadata": {
      "id": "GoogleAdsGoogleadsV21Resources__OfflineUserDataJobMetadata",
      "description": "Metadata of offline user data job.",
      "type": "object",
      "properties": {
        "matchRateRange": {
          "description": "Output only. Match rate of the Customer Match user list upload. Describes the estimated match rate when the status of the job is \"RUNNING\" and final match rate when the final match rate is available after the status of the job is \"SUCCESS/FAILED\".",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Default value for match rate range.",
            "Match rate range for offline data upload entity is between 0% and 19%.",
            "Match rate range for offline data upload entity is between 20% and 30%.",
            "Match rate range for offline data upload entity is between 31% and 40%.",
            "Match rate range for offline data upload entity is between 41% and 50%.",
            "Match rate range for offline data upload entity is between 51% and 60%.",
            "Match rate range for offline data upload entity is between 61% and 70%.",
            "Match rate range for offline data upload entity is between 71% and 80%.",
            "Match rate range for offline data upload entity is between 81% and 90%.",
            "Match rate range for offline data upload entity is more than or equal to 91%."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MATCH_RANGE_LESS_THAN_20",
            "MATCH_RANGE_20_TO_30",
            "MATCH_RANGE_31_TO_40",
            "MATCH_RANGE_41_TO_50",
            "MATCH_RANGE_51_TO_60",
            "MATCH_RANGE_61_TO_70",
            "MATCH_RANGE_71_TO_80",
            "MATCH_RANGE_81_TO_90",
            "MATCH_RANGE_91_TO_100"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CustomerMatchUserListMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__CustomerMatchUserListMetadata",
      "description": "Metadata for customer match user list.",
      "type": "object",
      "properties": {
        "userList": {
          "description": "The resource name of remarketing list to update data. Required for job of CUSTOMER_MATCH_USER_LIST type.",
          "type": "string"
        },
        "consent": {
          "description": "The consent setting for all the users in this job.",
          "$ref": "GoogleAdsGoogleadsV21Common__Consent"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Consent": {
      "id": "GoogleAdsGoogleadsV21Common__Consent",
      "description": "Consent",
      "type": "object",
      "properties": {
        "adUserData": {
          "description": "This represents consent for ad user data.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Output-only. Represents a format not yet defined in this enum.",
            "Granted.",
            "Denied."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GRANTED",
            "DENIED"
          ]
        },
        "adPersonalization": {
          "description": "This represents consent for ad personalization. This can only be set for OfflineUserDataJobService and UserDataService.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Output-only. Represents a format not yet defined in this enum.",
            "Granted.",
            "Denied."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GRANTED",
            "DENIED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__StoreSalesMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__StoreSalesMetadata",
      "description": "Metadata for Store Sales Direct.",
      "type": "object",
      "properties": {
        "loyaltyFraction": {
          "description": "This is the fraction of all transactions that are identifiable (for example, associated with any form of customer information). Required. The fraction needs to be between 0 and 1 (excluding 0).",
          "type": "number",
          "format": "double"
        },
        "transactionUploadFraction": {
          "description": "This is the ratio of sales being uploaded compared to the overall sales that can be associated with a customer. Required. The fraction needs to be between 0 and 1 (excluding 0). For example, if you upload half the sales that you are able to associate with a customer, this would be 0.5.",
          "type": "number",
          "format": "double"
        },
        "customKey": {
          "description": "Name of the store sales custom variable key. A predefined key that can be applied to the transaction and then later used for custom segmentation in reporting. Accessible only to customers on the allow-list.",
          "type": "string"
        },
        "thirdPartyMetadata": {
          "description": "Metadata for a third party Store Sales upload.",
          "$ref": "GoogleAdsGoogleadsV21Common__StoreSalesThirdPartyMetadata"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__StoreSalesThirdPartyMetadata": {
      "id": "GoogleAdsGoogleadsV21Common__StoreSalesThirdPartyMetadata",
      "description": "Metadata for a third party Store Sales. This product is only for customers on the allow-list. Contact your Google business development representative for details on the upload configuration.",
      "type": "object",
      "properties": {
        "advertiserUploadDateTime": {
          "description": "Time the advertiser uploaded the data to the partner. Required. The format is \"YYYY-MM-DD HH:MM:SS\". Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "type": "string"
        },
        "validTransactionFraction": {
          "description": "The fraction of transactions that are valid. Invalid transactions may include invalid formats or values. Required. The fraction needs to be between 0 and 1 (excluding 0).",
          "type": "number",
          "format": "double"
        },
        "partnerMatchFraction": {
          "description": "The fraction of valid transactions that are matched to a third party assigned user ID on the partner side. Required. The fraction needs to be between 0 and 1 (excluding 0).",
          "type": "number",
          "format": "double"
        },
        "partnerUploadFraction": {
          "description": "The fraction of valid transactions that are uploaded by the partner to Google. Required. The fraction needs to be between 0 and 1 (excluding 0).",
          "type": "number",
          "format": "double"
        },
        "bridgeMapVersionId": {
          "description": "Version of partner IDs to be used for uploads. Required.",
          "type": "string"
        },
        "partnerId": {
          "description": "ID of the third party partner updating the transaction feed.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__OperatingSystemVersionConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__OperatingSystemVersionConstant",
      "description": "A mobile operating system version or a range of versions, depending on `operator_type`. List of available mobile platforms at https://developers.google.com/google-ads/api/reference/data/codes-formats#mobile-platforms",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the operating system version constant. Operating system version constant resource names have the form: `operatingSystemVersionConstants/{criterion_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the operating system version.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. Name of the operating system.",
          "readOnly": true,
          "type": "string"
        },
        "osMajorVersion": {
          "description": "Output only. The OS Major Version number.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "osMinorVersion": {
          "description": "Output only. The OS Minor Version number.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "operatorType": {
          "description": "Output only. Determines whether this constant represents a single version or a range of versions.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Equals to the specified version.",
            "Greater than or equals to the specified version."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EQUALS_TO",
            "GREATER_THAN_EQUALS_TO"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__PaidOrganicSearchTermView": {
      "id": "GoogleAdsGoogleadsV21Resources__PaidOrganicSearchTermView",
      "description": "A paid organic search term view providing a view of search stats across ads and organic listings aggregated by search term at the ad group level.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the search term view. Search term view resource names have the form: `customers/{customer_id}/paidOrganicSearchTermViews/{campaign_id}~ {ad_group_id}~{URL-base64 search term}`",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. The search term.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__QualifyingQuestion": {
      "id": "GoogleAdsGoogleadsV21Resources__QualifyingQuestion",
      "description": "Qualifying Questions for Lead Form.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the qualifying question. 'qualifyingQuestions/{qualifyingQuestionId}'",
          "readOnly": true,
          "type": "string"
        },
        "qualifyingQuestionId": {
          "description": "Output only. The id of the qualifying question.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "locale": {
          "description": "Output only. The locale of the qualifying question.",
          "readOnly": true,
          "type": "string"
        },
        "text": {
          "description": "Output only. The qualifying question.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ParentalStatusView": {
      "id": "GoogleAdsGoogleadsV21Resources__ParentalStatusView",
      "description": "A parental status view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the parental status view. Parental Status view resource names have the form: `customers/{customer_id}/parentalStatusViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__PerStoreView": {
      "id": "GoogleAdsGoogleadsV21Resources__PerStoreView",
      "description": "A per store view. This view provides per store impression reach and local action conversion stats for advertisers.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the per store view. Per Store view resource names have the form: `customers/{customer_id}/perStoreViews/{place_id}`",
          "readOnly": true,
          "type": "string"
        },
        "placeId": {
          "description": "Output only. The place ID of the per store view.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__PerformanceMaxPlacementView": {
      "id": "GoogleAdsGoogleadsV21Resources__PerformanceMaxPlacementView",
      "description": "A view with impression metrics for Performance Max campaign placements.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Performance Max placement view. Performance Max placement view resource names have the form: `customers/{customer_id}/performanceMaxPlacementViews/{base_64_placement}`",
          "readOnly": true,
          "type": "string"
        },
        "placement": {
          "description": "Output only. The default placement string, such as the website URL, mobile application ID, or a YouTube video ID.",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The name displayed to represent the placement, such as the URL name for websites, YouTube video name for YouTube videos, and translated mobile app name for mobile apps.",
          "readOnly": true,
          "type": "string"
        },
        "targetUrl": {
          "description": "Output only. URL of the placement, for example, website, link to the mobile application in app store, or a YouTube video URL.",
          "readOnly": true,
          "type": "string"
        },
        "placementType": {
          "description": "Output only. Type of the placement. Possible values for Performance Max placements are WEBSITE, MOBILE_APPLICATION, or YOUTUBE_VIDEO.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Websites(for example, 'www.flowers4sale.com').",
            "Mobile application categories(for example, 'Games').",
            "mobile applications(for example, 'mobileapp::2-com.whatsthewordanswers').",
            "YouTube videos(for example, 'youtube.com/video/wtLJPvx7-ys').",
            "YouTube channels(for example, 'youtube.com::L8ZULXASCc1I_oaOT0NaOQ').",
            "Surfaces owned and operated by Google(for example, 'tv.google.com')."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBSITE",
            "MOBILE_APP_CATEGORY",
            "MOBILE_APPLICATION",
            "YOUTUBE_VIDEO",
            "YOUTUBE_CHANNEL",
            "GOOGLE_PRODUCTS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ProductCategoryConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__ProductCategoryConstant",
      "description": "A Product Category.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the product category. Product category resource names have the form: `productCategoryConstants/{level}~{category_id}`",
          "readOnly": true,
          "type": "string"
        },
        "categoryId": {
          "description": "Output only. The ID of the product category. This ID is equivalent to the google_product_category ID as described in this article: https://support.google.com/merchants/answer/6324436.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "productCategoryConstantParent": {
          "description": "Output only. Resource name of the parent product category.",
          "readOnly": true,
          "type": "string"
        },
        "level": {
          "description": "Output only. Level of the product category.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Level 1.",
            "Level 2.",
            "Level 3.",
            "Level 4.",
            "Level 5."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEVEL1",
            "LEVEL2",
            "LEVEL3",
            "LEVEL4",
            "LEVEL5"
          ]
        },
        "state": {
          "description": "Output only. State of the product category.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The category is enabled.",
            "The category is obsolete. Used only for reporting purposes."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "OBSOLETE"
          ]
        },
        "localizations": {
          "description": "Output only. List of all available localizations of the product category.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_ProductCategoryConstant_ProductCategoryLocalization"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ProductCategoryConstant_ProductCategoryLocalization": {
      "id": "GoogleAdsGoogleadsV21Resources_ProductCategoryConstant_ProductCategoryLocalization",
      "description": "Localization for the product category.",
      "type": "object",
      "properties": {
        "regionCode": {
          "description": "Output only. Upper-case two-letter ISO 3166-1 country code of the localized category.",
          "readOnly": true,
          "type": "string"
        },
        "languageCode": {
          "description": "Output only. Two-letter ISO 639-1 language code of the localized category.",
          "readOnly": true,
          "type": "string"
        },
        "value": {
          "description": "Output only. The name of the category in the specified locale.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ProductGroupView": {
      "id": "GoogleAdsGoogleadsV21Resources__ProductGroupView",
      "description": "A product group view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the product group view. Product group view resource names have the form: `customers/{customer_id}/productGroupViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ProductLink": {
      "id": "GoogleAdsGoogleadsV21Resources__ProductLink",
      "description": "Represents the data sharing connection between a Google Ads customer and another product.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. Resource name of the product link. ProductLink resource names have the form: `customers/{customer_id}/productLinks/{product_link_id} `",
          "type": "string"
        },
        "productLinkId": {
          "description": "Output only. The ID of the link. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "type": {
          "description": "Output only. The type of the linked product.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A link to Data partner.",
            "A link to Google Ads.",
            "A link to Hotel Center.",
            "A link to Google Merchant Center.",
            "A link to the Google Ads account of the advertising partner."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DATA_PARTNER",
            "GOOGLE_ADS",
            "HOTEL_CENTER",
            "MERCHANT_CENTER",
            "ADVERTISING_PARTNER"
          ]
        },
        "dataPartner": {
          "description": "Immutable. Data partner link.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DataPartnerIdentifier"
        },
        "googleAds": {
          "description": "Immutable. Google Ads link.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GoogleAdsIdentifier"
        },
        "merchantCenter": {
          "description": "Immutable. Google Merchant Center link.",
          "$ref": "GoogleAdsGoogleadsV21Resources__MerchantCenterIdentifier"
        },
        "advertisingPartner": {
          "description": "Output only. Advertising Partner link.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerIdentifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__DataPartnerIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__DataPartnerIdentifier",
      "description": "The identifier for Data Partner account.",
      "type": "object",
      "properties": {
        "dataPartnerId": {
          "description": "Immutable. The customer ID of the Data partner account. This field is required and should not be empty when creating a new data partner link. It is unable to be modified after the creation of the link.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GoogleAdsIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__GoogleAdsIdentifier",
      "description": "The identifier for Google Ads account.",
      "type": "object",
      "properties": {
        "customer": {
          "description": "Immutable. The resource name of the Google Ads account. This field is required and should not be empty when creating a new Google Ads link. It is unable to be modified after the creation of the link.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MerchantCenterIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__MerchantCenterIdentifier",
      "description": "The identifier for Google Merchant Center account",
      "type": "object",
      "properties": {
        "merchantCenterId": {
          "description": "Immutable. The customer ID of the Google Merchant Center account. This field is required and should not be empty when creating a new Merchant Center link. It is unable to be modified after the creation of the link.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerIdentifier",
      "description": "The identifier for the Advertising Partner Google Ads account.",
      "type": "object",
      "properties": {
        "customer": {
          "description": "Output only. The resource name of the advertising partner Google Ads account. This field is required and should not be empty when creating a new Advertising Partner link. It is unable to be modified after the creation of the link.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ProductLinkInvitation": {
      "id": "GoogleAdsGoogleadsV21Resources__ProductLinkInvitation",
      "description": "Represents an invitation for data sharing connection between a Google Ads account and another account.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of a product link invitation. Product link invitation resource names have the form: `customers/{customer_id}/productLinkInvitations/{product_link_invitation_id}`",
          "type": "string"
        },
        "productLinkInvitationId": {
          "description": "Output only. The ID of the product link invitation. This field is read only.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. The status of the product link invitation. This field is read only.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The invitation is accepted.",
            "An invitation has been sent to the other account. A user on the other account may now accept the invitation by setting the status to ACCEPTED.",
            "This invitation has been sent by a user on the other account. It may be accepted by a user on this account by setting the status to ACCEPTED.",
            "The invitation is revoked by the user who sent the invitation.",
            "The invitation has been rejected by the invitee.",
            "The invitation has timed out before being accepted by the invitee."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCEPTED",
            "REQUESTED",
            "PENDING_APPROVAL",
            "REVOKED",
            "REJECTED",
            "EXPIRED"
          ]
        },
        "type": {
          "description": "Output only. The type of the invited account. This field is read only and can be used for filtering invitations with {@code GoogleAdsService.SearchGoogleAdsRequest}.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A link to Data partner.",
            "A link to Google Ads.",
            "A link to Hotel Center.",
            "A link to Google Merchant Center.",
            "A link to the Google Ads account of the advertising partner."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DATA_PARTNER",
            "GOOGLE_ADS",
            "HOTEL_CENTER",
            "MERCHANT_CENTER",
            "ADVERTISING_PARTNER"
          ]
        },
        "hotelCenter": {
          "description": "Output only. Hotel link invitation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__HotelCenterLinkInvitationIdentifier"
        },
        "merchantCenter": {
          "description": "Output only. Merchant Center link invitation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__MerchantCenterLinkInvitationIdentifier"
        },
        "advertisingPartner": {
          "description": "Output only. Advertising Partner link invitation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerLinkInvitationIdentifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__HotelCenterLinkInvitationIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__HotelCenterLinkInvitationIdentifier",
      "description": "The identifier for Hotel account.",
      "type": "object",
      "properties": {
        "hotelCenterId": {
          "description": "Output only. The hotel center id of the hotel account. This field is read only",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MerchantCenterLinkInvitationIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__MerchantCenterLinkInvitationIdentifier",
      "description": "The identifier for Merchant Center Account.",
      "type": "object",
      "properties": {
        "merchantCenterId": {
          "description": "Output only. The Merchant Center id of the Merchant account. This field is read only",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerLinkInvitationIdentifier": {
      "id": "GoogleAdsGoogleadsV21Resources__AdvertisingPartnerLinkInvitationIdentifier",
      "description": "The identifier for the Advertising Partner Google Ads account.",
      "type": "object",
      "properties": {
        "customer": {
          "description": "Immutable. The resource name of the advertising partner Google Ads account. This field is read only.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Recommendation": {
      "id": "GoogleAdsGoogleadsV21Resources__Recommendation",
      "description": "A recommendation.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the recommendation. `customers/{customer_id}/recommendations/{recommendation_id}`",
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of recommendation.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Provides optimized budget recommendations for campaigns.",
            "Keyword recommendation.",
            "Recommendation to add a new text ad.",
            "Recommendation to update a campaign to use a Target CPA bidding strategy.",
            "Recommendation to update a campaign to use the Maximize Conversions bidding strategy.",
            "Recommendation to enable Enhanced Cost Per Click for a campaign.",
            "Recommendation to start showing your campaign's ads on Google Search Partners Websites.",
            "Recommendation to update a campaign to use a Maximize Clicks bidding strategy.",
            "Recommendation to start using the \"Optimize\" ad rotation setting for the given ad group.",
            "Recommendation to change an existing keyword from one match type to a broader match type.",
            "Recommendation to move unused budget from one budget to a constrained budget.",
            "Budget recommendation for campaigns that are expected to become budget-constrained in the future (as opposed to the CAMPAIGN_BUDGET recommendation, which applies to campaigns that are currently budget-constrained).",
            "Recommendation to update a campaign to use a Target ROAS bidding strategy.",
            "Recommendation to add a new responsive search ad.",
            "Budget recommendation for campaigns whose ROI is predicted to increase with a budget adjustment.",
            "Recommendation to add broad match versions of keywords for fully automated conversion-based bidding campaigns.",
            "Recommendation to add new responsive search ad assets.",
            "Recommendation to upgrade a Smart Shopping campaign to a Performance Max campaign.",
            "Recommendation to improve strength of responsive search ad.",
            "Recommendation to update a campaign to use Display Expansion.",
            "Recommendation to upgrade a Local campaign to a Performance Max campaign.",
            "Recommendation to raise target CPA when it is too low and there are very few or no conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to raise the budget in advance of a seasonal event that is forecasted to increase traffic, and change bidding strategy from maximize conversion value to target ROAS.",
            "Recommendation to add callout assets to campaign or customer level.",
            "Recommendation to add sitelink assets to campaign or customer level.",
            "Recommendation to add call assets to campaign or customer level.",
            "Recommendation to add the age group attribute to offers that are demoted because of a missing age group.",
            "Recommendation to add a color to offers that are demoted because of a missing color.",
            "Recommendation to add a gender to offers that are demoted because of a missing gender.",
            "Recommendation to add a GTIN (Global Trade Item Number) to offers that are demoted because of a missing GTIN.",
            "Recommendation to add more identifiers to offers that are demoted because of missing identifiers.",
            "Recommendation to add the size to offers that are demoted because of a missing size.",
            "Recommendation informing a customer about a campaign that cannot serve because no products are being targeted.",
            "The shopping recommendation informing a customer about campaign with a high percentage of disapproved products.",
            "Recommendation to create a catch-all campaign that targets all offers.",
            "Recommendation to fix Merchant Center account suspension issues.",
            "Recommendation to fix Merchant Center account suspension warning issues.",
            "Recommendation to migrate offers targeted by Regular Shopping Campaigns to existing Performance Max campaigns.",
            "Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
            "Recommendation to raise Target CPA based on Google predictions modeled from past conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to lower Target ROAS.",
            "Recommendation to opt into Performance Max campaigns.",
            "Recommendation to improve the asset group strength of a Performance Max campaign to an \"Excellent\" rating.",
            "Recommendation to migrate Dynamic Search Ads to Performance Max campaigns.",
            "Recommendation to set a target CPA for campaigns that do not have one specified, in advance of a seasonal event that is forecasted to increase traffic.",
            "Recommendation to set a target CPA for campaigns that do not have one specified.",
            "Recommendation to set a target ROAS for campaigns that do not have one specified.",
            "Recommendation to update a campaign to use the Maximize Conversion Value bidding strategy.",
            "Recommendation to deploy Google Tag on more pages.",
            "Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
            "Recommendation to update a customer list that hasn't been updated in the last 90 days.",
            "Recommendation to create a custom audience.",
            "Recommendation to add lead form assets to campaign or customer level.",
            "Recommendation to improve the strength of ads in Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BUDGET",
            "KEYWORD",
            "TEXT_AD",
            "TARGET_CPA_OPT_IN",
            "MAXIMIZE_CONVERSIONS_OPT_IN",
            "ENHANCED_CPC_OPT_IN",
            "SEARCH_PARTNERS_OPT_IN",
            "MAXIMIZE_CLICKS_OPT_IN",
            "OPTIMIZE_AD_ROTATION",
            "KEYWORD_MATCH_TYPE",
            "MOVE_UNUSED_BUDGET",
            "FORECASTING_CAMPAIGN_BUDGET",
            "TARGET_ROAS_OPT_IN",
            "RESPONSIVE_SEARCH_AD",
            "MARGINAL_ROI_CAMPAIGN_BUDGET",
            "USE_BROAD_MATCH_KEYWORD",
            "RESPONSIVE_SEARCH_AD_ASSET",
            "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH",
            "DISPLAY_EXPANSION_OPT_IN",
            "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RAISE_TARGET_CPA_BID_TOO_LOW",
            "FORECASTING_SET_TARGET_ROAS",
            "CALLOUT_ASSET",
            "SITELINK_ASSET",
            "CALL_ASSET",
            "SHOPPING_ADD_AGE_GROUP",
            "SHOPPING_ADD_COLOR",
            "SHOPPING_ADD_GENDER",
            "SHOPPING_ADD_GTIN",
            "SHOPPING_ADD_MORE_IDENTIFIERS",
            "SHOPPING_ADD_SIZE",
            "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN",
            "SHOPPING_FIX_DISAPPROVED_PRODUCTS",
            "SHOPPING_TARGET_ALL_OFFERS",
            "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT",
            "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING",
            "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX",
            "DYNAMIC_IMAGE_EXTENSION_OPT_IN",
            "RAISE_TARGET_CPA",
            "LOWER_TARGET_ROAS",
            "PERFORMANCE_MAX_OPT_IN",
            "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH",
            "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX",
            "FORECASTING_SET_TARGET_CPA",
            "SET_TARGET_CPA",
            "SET_TARGET_ROAS",
            "MAXIMIZE_CONVERSION_VALUE_OPT_IN",
            "IMPROVE_GOOGLE_TAG_COVERAGE",
            "PERFORMANCE_MAX_FINAL_URL_OPT_IN",
            "REFRESH_CUSTOMER_MATCH_LIST",
            "CUSTOM_AUDIENCE_OPT_IN",
            "LEAD_FORM_ASSET",
            "IMPROVE_DEMAND_GEN_AD_STRENGTH"
          ]
        },
        "impact": {
          "description": "Output only. The impact on account performance as a result of applying the recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationImpact"
        },
        "campaignBudget": {
          "description": "Output only. The budget targeted by this recommendation. This will be set only when the recommendation affects a single campaign budget. This field will be set for the following recommendation types: CAMPAIGN_BUDGET, FORECASTING_CAMPAIGN_BUDGET, MARGINAL_ROI_CAMPAIGN_BUDGET, MOVE_UNUSED_BUDGET",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The campaign targeted by this recommendation. This field will be set for the following recommendation types: CALL_EXTENSION, CALLOUT_EXTENSION, ENHANCED_CPC_OPT_IN, USE_BROAD_MATCH_KEYWORD, KEYWORD, KEYWORD_MATCH_TYPE, UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, OPTIMIZE_AD_ROTATION, RESPONSIVE_SEARCH_AD, RESPONSIVE_SEARCH_AD_ASSET, SEARCH_PARTNERS_OPT_IN, DISPLAY_EXPANSION_OPT_IN, SITELINK_EXTENSION, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN, TEXT_AD, UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX, RAISE_TARGET_CPA_BID_TOO_LOW, FORECASTING_SET_TARGET_ROAS, SHOPPING_ADD_AGE_GROUP, SHOPPING_ADD_COLOR, SHOPPING_ADD_GENDER, SHOPPING_ADD_SIZE, SHOPPING_ADD_GTIN, SHOPPING_ADD_MORE_IDENTIFIERS, SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN, SHOPPING_FIX_DISAPPROVED_PRODUCTS, SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX, DYNAMIC_IMAGE_EXTENSION_OPT_IN, RAISE_TARGET_CPA, LOWER_TARGET_ROAS, FORECASTING_SET_TARGET_CPA, SET_TARGET_CPA, SET_TARGET_ROAS, MAXIMIZE_CONVERSION_VALUE_OPT_IN, IMPROVE_GOOGLE_TAG_COVERAGE, PERFORMANCE_MAX_FINAL_URL_OPT_IN",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. The ad group targeted by this recommendation. This will be set only when the recommendation affects a single ad group. This field will be set for the following recommendation types: KEYWORD, OPTIMIZE_AD_ROTATION, RESPONSIVE_SEARCH_AD, RESPONSIVE_SEARCH_AD_ASSET, TEXT_AD",
          "readOnly": true,
          "type": "string"
        },
        "dismissed": {
          "description": "Output only. Whether the recommendation is dismissed or not.",
          "readOnly": true,
          "type": "boolean"
        },
        "campaigns": {
          "description": "Output only. The campaigns targeted by this recommendation. This field will be set for the following recommendation types: CAMPAIGN_BUDGET, FORECASTING_CAMPAIGN_BUDGET, MARGINAL_ROI_CAMPAIGN_BUDGET and MOVE_UNUSED_BUDGET",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "campaignBudgetRecommendation": {
          "description": "Output only. The campaign budget recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation"
        },
        "forecastingCampaignBudgetRecommendation": {
          "description": "Output only. The forecasting campaign budget recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation"
        },
        "keywordRecommendation": {
          "description": "Output only. The keyword recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordRecommendation"
        },
        "textAdRecommendation": {
          "description": "Output only. Add expanded text ad recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_TextAdRecommendation"
        },
        "targetCpaOptInRecommendation": {
          "description": "Output only. The TargetCPA opt-in recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetCpaOptInRecommendation"
        },
        "maximizeConversionsOptInRecommendation": {
          "description": "Output only. The MaximizeConversions Opt-In recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionsOptInRecommendation"
        },
        "enhancedCpcOptInRecommendation": {
          "description": "Output only. The Enhanced Cost-Per-Click Opt-In recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_EnhancedCpcOptInRecommendation"
        },
        "searchPartnersOptInRecommendation": {
          "description": "Output only. The Search Partners Opt-In recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_SearchPartnersOptInRecommendation"
        },
        "maximizeClicksOptInRecommendation": {
          "description": "Output only. The MaximizeClicks Opt-In recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeClicksOptInRecommendation"
        },
        "optimizeAdRotationRecommendation": {
          "description": "Output only. The Optimize Ad Rotation recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_OptimizeAdRotationRecommendation"
        },
        "keywordMatchTypeRecommendation": {
          "description": "Output only. The keyword match type recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordMatchTypeRecommendation"
        },
        "moveUnusedBudgetRecommendation": {
          "description": "Output only. The move unused budget recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MoveUnusedBudgetRecommendation"
        },
        "targetRoasOptInRecommendation": {
          "description": "Output only. The Target ROAS opt-in recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetRoasOptInRecommendation"
        },
        "responsiveSearchAdRecommendation": {
          "description": "Output only. The add responsive search ad recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdRecommendation"
        },
        "marginalRoiCampaignBudgetRecommendation": {
          "description": "Output only. The marginal ROI campaign budget recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation"
        },
        "useBroadMatchKeywordRecommendation": {
          "description": "Output only. The use broad match keyword recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_UseBroadMatchKeywordRecommendation"
        },
        "responsiveSearchAdAssetRecommendation": {
          "description": "Output only. The responsive search ad asset recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdAssetRecommendation"
        },
        "upgradeSmartShoppingCampaignToPerformanceMaxRecommendation": {
          "description": "Output only. The upgrade a Smart Shopping campaign to a Performance Max campaign recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeSmartShoppingCampaignToPerformanceMaxRecommendation"
        },
        "responsiveSearchAdImproveAdStrengthRecommendation": {
          "description": "Output only. The responsive search ad improve ad strength recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdImproveAdStrengthRecommendation"
        },
        "displayExpansionOptInRecommendation": {
          "description": "Output only. The Display Expansion opt-in recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_DisplayExpansionOptInRecommendation"
        },
        "upgradeLocalCampaignToPerformanceMaxRecommendation": {
          "description": "Output only. The upgrade a Local campaign to a Performance Max campaign recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeLocalCampaignToPerformanceMaxRecommendation"
        },
        "raiseTargetCpaBidTooLowRecommendation": {
          "description": "Output only. The raise target CPA bid too low recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaBidTooLowRecommendation"
        },
        "forecastingSetTargetRoasRecommendation": {
          "description": "Output only. The forecasting set target ROAS recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetRoasRecommendation"
        },
        "calloutAssetRecommendation": {
          "description": "Output only. The callout asset recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CalloutAssetRecommendation"
        },
        "sitelinkAssetRecommendation": {
          "description": "Output only. The sitelink asset recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_SitelinkAssetRecommendation"
        },
        "callAssetRecommendation": {
          "description": "Output only. The call asset recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CallAssetRecommendation"
        },
        "shoppingAddAgeGroupRecommendation": {
          "description": "Output only. The shopping add age group recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddColorRecommendation": {
          "description": "Output only. The shopping add color recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddGenderRecommendation": {
          "description": "Output only. The shopping add gender recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddGtinRecommendation": {
          "description": "Output only. The shopping add GTIN recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddMoreIdentifiersRecommendation": {
          "description": "Output only. The shopping add more identifiers recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddSizeRecommendation": {
          "description": "Output only. The shopping add size recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation"
        },
        "shoppingAddProductsToCampaignRecommendation": {
          "description": "Output only. The shopping add products to campaign recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingAddProductsToCampaignRecommendation"
        },
        "shoppingFixDisapprovedProductsRecommendation": {
          "description": "Output only. The shopping fix disapproved products recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingFixDisapprovedProductsRecommendation"
        },
        "shoppingTargetAllOffersRecommendation": {
          "description": "Output only. The shopping target all offers recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingTargetAllOffersRecommendation"
        },
        "shoppingFixSuspendedMerchantCenterAccountRecommendation": {
          "description": "Output only. The shopping fix suspended Merchant Center account recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation"
        },
        "shoppingFixMerchantCenterAccountSuspensionWarningRecommendation": {
          "description": "Output only. The shopping fix Merchant Center account suspension warning recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation"
        },
        "shoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation": {
          "description": "Output only. The shopping migrate Regular Shopping Campaign offers to Performance Max recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation"
        },
        "dynamicImageExtensionOptInRecommendation": {
          "description": "Output only. Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_DynamicImageExtensionOptInRecommendation"
        },
        "raiseTargetCpaRecommendation": {
          "description": "Output only. Recommendation to raise Target CPA.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaRecommendation"
        },
        "lowerTargetRoasRecommendation": {
          "description": "Output only. Recommendation to lower Target ROAS.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_LowerTargetRoasRecommendation"
        },
        "performanceMaxOptInRecommendation": {
          "description": "Output only. The Performance Max Opt In recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxOptInRecommendation"
        },
        "improvePerformanceMaxAdStrengthRecommendation": {
          "description": "Output only. The improve Performance Max ad strength recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ImprovePerformanceMaxAdStrengthRecommendation"
        },
        "migrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation": {
          "description": "Output only. The Dynamic Search Ads to Performance Max migration recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MigrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation"
        },
        "forecastingSetTargetCpaRecommendation": {
          "description": "Output only. The forecasting set target CPA recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetCpaRecommendation"
        },
        "setTargetCpaRecommendation": {
          "description": "Output only. The set target CPA recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetCpaRecommendation"
        },
        "setTargetRoasRecommendation": {
          "description": "Output only. The set target ROAS recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetRoasRecommendation"
        },
        "maximizeConversionValueOptInRecommendation": {
          "description": "Output only. The Maximize Conversion Value opt-in recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionValueOptInRecommendation"
        },
        "improveGoogleTagCoverageRecommendation": {
          "description": "Output only. Recommendation to deploy Google Tag on more pages.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveGoogleTagCoverageRecommendation"
        },
        "performanceMaxFinalUrlOptInRecommendation": {
          "description": "Output only. Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxFinalUrlOptInRecommendation"
        },
        "refreshCustomerMatchListRecommendation": {
          "description": "Output only. The refresh customer list recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RefreshCustomerMatchListRecommendation"
        },
        "customAudienceOptInRecommendation": {
          "description": "Output only. The custom audience opt in recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CustomAudienceOptInRecommendation"
        },
        "leadFormAssetRecommendation": {
          "description": "Output only. The lead form asset recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_LeadFormAssetRecommendation"
        },
        "improveDemandGenAdStrengthRecommendation": {
          "description": "Output only. The improve Demand Gen ad strength recommendation.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveDemandGenAdStrengthRecommendation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationImpact": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationImpact",
      "description": "The impact of making the change as described in the recommendation. Some types of recommendations may not have impact information.",
      "type": "object",
      "properties": {
        "baseMetrics": {
          "description": "Output only. Base metrics at the time the recommendation was generated.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationMetrics"
        },
        "potentialMetrics": {
          "description": "Output only. Estimated metrics if the recommendation is applied.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationMetrics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationMetrics": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationMetrics",
      "description": "Weekly account performance metrics. For some recommendation types, these are averaged over the past 90-day period and hence can be fractional.",
      "type": "object",
      "properties": {
        "impressions": {
          "description": "Output only. Number of ad impressions.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "Output only. Number of ad clicks.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "costMicros": {
          "description": "Output only. Cost (in micros) for advertising, in the local currency for the account.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "conversions": {
          "description": "Output only. Number of conversions.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "conversionsValue": {
          "description": "Output only. Sum of the conversion value of the conversions.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "videoViews": {
          "description": "Output only. Number of video views for a video ad campaign.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation",
      "description": "The budget recommendation for budget constrained campaigns.",
      "type": "object",
      "properties": {
        "currentBudgetAmountMicros": {
          "description": "Output only. The current budget amount in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "recommendedBudgetAmountMicros": {
          "description": "Output only. The recommended budget amount in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "budgetOptions": {
          "description": "Output only. The budget amounts and associated impact estimates for some values of possible budget amounts.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_RecommendationCampaignBudgetRecommendation_CampaignBudgetRecommendationOption"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_RecommendationCampaignBudgetRecommendation_CampaignBudgetRecommendationOption": {
      "id": "GoogleAdsGoogleadsV21Resources_RecommendationCampaignBudgetRecommendation_CampaignBudgetRecommendationOption",
      "description": "The impact estimates for a given budget amount.",
      "type": "object",
      "properties": {
        "budgetAmountMicros": {
          "description": "Output only. The budget amount for this option.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "impact": {
          "description": "Output only. The impact estimate if budget is changed to amount specified in this option.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationImpact"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordRecommendation",
      "description": "The keyword recommendation.",
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Output only. The recommended keyword.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "searchTerms": {
          "description": "Output only. A list of search terms this keyword matches. The same search term may be repeated for multiple keywords.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_RecommendationKeywordRecommendation_SearchTerm"
          }
        },
        "recommendedCpcBidMicros": {
          "description": "Output only. The recommended CPC (cost-per-click) bid.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_RecommendationKeywordRecommendation_SearchTerm": {
      "id": "GoogleAdsGoogleadsV21Resources_RecommendationKeywordRecommendation_SearchTerm",
      "description": "Information about a search term as related to a keyword recommendation.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Output only. The text of the search term.",
          "readOnly": true,
          "type": "string"
        },
        "estimatedWeeklySearchCount": {
          "description": "Output only. Estimated number of historical weekly searches for this search term.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_TextAdRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_TextAdRecommendation",
      "description": "The text ad recommendation.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "Output only. Recommended ad.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "creationDate": {
          "description": "Output only. Creation date of the recommended ad. YYYY-MM-DD format, for example, 2018-04-17.",
          "readOnly": true,
          "type": "string"
        },
        "autoApplyDate": {
          "description": "Output only. Date, if present, is the earliest when the recommendation will be auto applied. YYYY-MM-DD format, for example, 2018-04-17.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_TargetCpaOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetCpaOptInRecommendation",
      "description": "The Target CPA opt-in recommendation.",
      "type": "object",
      "properties": {
        "options": {
          "description": "Output only. The available goals and corresponding options for Target CPA strategy.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_RecommendationTargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption"
          }
        },
        "recommendedTargetCpaMicros": {
          "description": "Output only. The recommended average CPA target. See required budget amount and impact of using this recommendation in options list.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_RecommendationTargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption": {
      "id": "GoogleAdsGoogleadsV21Resources_RecommendationTargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption",
      "description": "The Target CPA opt-in option with impact estimate.",
      "type": "object",
      "properties": {
        "goal": {
          "description": "Output only. The goal achieved by this option.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Recommendation to set Target CPA to maintain the same cost.",
            "Recommendation to set Target CPA to maintain the same conversions.",
            "Recommendation to set Target CPA to maintain the same CPA.",
            "Recommendation to set Target CPA to a value that is as close as possible to, yet lower than, the actual CPA (computed for past 28 days)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SAME_COST",
            "SAME_CONVERSIONS",
            "SAME_CPA",
            "CLOSEST_CPA"
          ]
        },
        "targetCpaMicros": {
          "description": "Output only. Average CPA target.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "requiredCampaignBudgetAmountMicros": {
          "description": "Output only. The minimum campaign budget, in local currency for the account, required to achieve the target CPA. Amount is specified in micros, where one million is equivalent to one currency unit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "impact": {
          "description": "Output only. The impact estimate if this option is selected.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_RecommendationImpact"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionsOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionsOptInRecommendation",
      "description": "The Maximize Conversions Opt-In recommendation.",
      "type": "object",
      "properties": {
        "recommendedBudgetAmountMicros": {
          "description": "Output only. The recommended new budget amount.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_EnhancedCpcOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_EnhancedCpcOptInRecommendation",
      "description": "The Enhanced Cost-Per-Click Opt-In recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_SearchPartnersOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_SearchPartnersOptInRecommendation",
      "description": "The Search Partners Opt-In recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeClicksOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeClicksOptInRecommendation",
      "description": "The Maximize Clicks opt-in recommendation.",
      "type": "object",
      "properties": {
        "recommendedBudgetAmountMicros": {
          "description": "Output only. The recommended new budget amount. Only set if the current budget is too high.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_OptimizeAdRotationRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_OptimizeAdRotationRecommendation",
      "description": "The Optimize Ad Rotation recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordMatchTypeRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_KeywordMatchTypeRecommendation",
      "description": "The keyword match type recommendation.",
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Output only. The existing keyword where the match type should be more broad.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "recommendedMatchType": {
          "description": "Output only. The recommended new match type.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MoveUnusedBudgetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MoveUnusedBudgetRecommendation",
      "description": "The move unused budget recommendation.",
      "type": "object",
      "properties": {
        "excessCampaignBudget": {
          "description": "Output only. The excess budget's resource_name.",
          "readOnly": true,
          "type": "string"
        },
        "budgetRecommendation": {
          "description": "Output only. The recommendation for the constrained budget to increase.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudgetRecommendation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_TargetRoasOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetRoasOptInRecommendation",
      "description": "The Target ROAS opt-in recommendation.",
      "type": "object",
      "properties": {
        "recommendedTargetRoas": {
          "description": "Output only. The recommended target ROAS (revenue per unit of spend). The value is between 0.01 and 1000.0, inclusive.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "requiredCampaignBudgetAmountMicros": {
          "description": "Output only. The minimum campaign budget, in local currency for the account, required to achieve the target ROAS. Amount is specified in micros, where one million is equivalent to one currency unit.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdRecommendation",
      "description": "The add responsive search ad recommendation.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "Output only. Recommended ad.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_UseBroadMatchKeywordRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_UseBroadMatchKeywordRecommendation",
      "description": "The use broad match keyword recommendation.",
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Output only. Sample of keywords to be expanded to Broad Match.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
          }
        },
        "suggestedKeywordsCount": {
          "description": "Output only. Total number of keywords to be expanded to Broad Match in the campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "campaignKeywordsCount": {
          "description": "Output only. Total number of keywords in the campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "campaignUsesSharedBudget": {
          "description": "Output only. Whether the associated campaign uses a shared budget.",
          "readOnly": true,
          "type": "boolean"
        },
        "requiredCampaignBudgetAmountMicros": {
          "description": "Output only. The budget recommended to avoid becoming budget constrained after applying the recommendation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdAssetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdAssetRecommendation",
      "description": "The add responsive search ad asset recommendation.",
      "type": "object",
      "properties": {
        "currentAd": {
          "description": "Output only. The current ad to be updated.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "recommendedAssets": {
          "description": "Output only. The recommended assets. This is populated only with the new headlines and/or descriptions, and is otherwise empty.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeSmartShoppingCampaignToPerformanceMaxRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeSmartShoppingCampaignToPerformanceMaxRecommendation",
      "description": "The upgrade a Smart Shopping campaign to a Performance Max campaign recommendation.",
      "type": "object",
      "properties": {
        "merchantId": {
          "description": "Output only. ID of Merchant Center account.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "salesCountryCode": {
          "description": "Output only. Country whose products from merchant's inventory should be included.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdImproveAdStrengthRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ResponsiveSearchAdImproveAdStrengthRecommendation",
      "description": "The responsive search ad improve ad strength recommendation.",
      "type": "object",
      "properties": {
        "currentAd": {
          "description": "Output only. The current ad to be updated.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        },
        "recommendedAd": {
          "description": "Output only. The updated ad.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_DisplayExpansionOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_DisplayExpansionOptInRecommendation",
      "description": "The Display Expansion opt-in recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeLocalCampaignToPerformanceMaxRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_UpgradeLocalCampaignToPerformanceMaxRecommendation",
      "description": "The Upgrade Local campaign to Performance Max campaign recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaBidTooLowRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaBidTooLowRecommendation",
      "description": "The raise target CPA bid too low recommendation.",
      "type": "object",
      "properties": {
        "recommendedTargetMultiplier": {
          "description": "Output only. A number greater than 1.0 indicating the factor by which we recommend the target CPA should be increased.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "averageTargetCpaMicros": {
          "description": "Output only. The current average target CPA of the campaign, in micros of customer local currency.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetRoasRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetRoasRecommendation",
      "description": "The forecasting set target ROAS recommendation.",
      "type": "object",
      "properties": {
        "recommendedTargetRoas": {
          "description": "Output only. The recommended target ROAS (revenue per unit of spend). The value is between 0.01 and 1000.0, inclusive.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "campaignBudget": {
          "description": "Output only. The campaign budget.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudget"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudget": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudget",
      "description": "A campaign budget shared amongst various budget recommendation types.",
      "type": "object",
      "properties": {
        "currentAmountMicros": {
          "description": "Output only. Current budget amount.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "recommendedNewAmountMicros": {
          "description": "Output only. Recommended budget amount.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "newStartDate": {
          "description": "Output only. The date when the new budget would start being used. This field will be set for the following recommendation types: FORECASTING_SET_TARGET_ROAS , FORECASTING_SET_TARGET_CPA YYYY-MM-DD format, for example, 2018-04-17.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_CalloutAssetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_CalloutAssetRecommendation",
      "description": "The callout asset recommendation.",
      "type": "object",
      "properties": {
        "recommendedCampaignCalloutAssets": {
          "description": "Output only. New callout extension assets recommended at the campaign level.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
          }
        },
        "recommendedCustomerCalloutAssets": {
          "description": "Output only. New callout extension assets recommended at the customer level.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_SitelinkAssetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_SitelinkAssetRecommendation",
      "description": "The sitelink asset recommendation.",
      "type": "object",
      "properties": {
        "recommendedCampaignSitelinkAssets": {
          "description": "Output only. New sitelink assets recommended at the campaign level.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
          }
        },
        "recommendedCustomerSitelinkAssets": {
          "description": "Output only. New sitelink assets recommended at the customer level.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_CallAssetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_CallAssetRecommendation",
      "description": "The call asset recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingOfferAttributeRecommendation",
      "description": "The shopping recommendation to add an attribute to offers that are demoted because it is missing.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "feedLabel": {
          "description": "Output only. The campaign feed label.",
          "readOnly": true,
          "type": "string"
        },
        "offersCount": {
          "description": "Output only. The number of online, servable offers.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "demotedOffersCount": {
          "description": "Output only. The number of online, servable offers that are demoted for missing attributes. Visit the Merchant Center for more details.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo",
      "description": "The Merchant Center account details.",
      "type": "object",
      "properties": {
        "id": {
          "description": "Output only. The Merchant Center account ID.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the Merchant Center account.",
          "readOnly": true,
          "type": "string"
        },
        "multiClient": {
          "description": "Output only. Whether the Merchant Center account is a Multi-Client account (MCA).",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingAddProductsToCampaignRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingAddProductsToCampaignRecommendation",
      "description": "The shopping recommendation to add products to a Shopping Campaign Inventory.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "feedLabel": {
          "description": "Output only. The feed label for the campaign.",
          "readOnly": true,
          "type": "string"
        },
        "reason": {
          "description": "Output only. The reason why no products are attached to the campaign.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The Merchant Center account does not have any submitted products.",
            "The Merchant Center account does not have any submitted products in the feed.",
            "The Google Ads account has active campaign filters that prevents inclusion of offers in the campaign.",
            "All products available have been explicitly excluded from being targeted by the campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MERCHANT_CENTER_ACCOUNT_HAS_NO_SUBMITTED_PRODUCTS",
            "MERCHANT_CENTER_ACCOUNT_HAS_NO_SUBMITTED_PRODUCTS_IN_FEED",
            "ADS_ACCOUNT_EXCLUDES_OFFERS_FROM_CAMPAIGN",
            "ALL_PRODUCTS_ARE_EXCLUDED_FROM_CAMPAIGN"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingFixDisapprovedProductsRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingFixDisapprovedProductsRecommendation",
      "description": "The shopping recommendation to fix disapproved products in a Shopping Campaign Inventory.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "feedLabel": {
          "description": "Output only. The feed label for the campaign.",
          "readOnly": true,
          "type": "string"
        },
        "productsCount": {
          "description": "Output only. The number of products of the campaign.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "disapprovedProductsCount": {
          "description": "Output only. The numbers of products of the campaign that are disapproved.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingTargetAllOffersRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingTargetAllOffersRecommendation",
      "description": "The shopping recommendation to create a catch-all campaign that targets all offers.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "untargetedOffersCount": {
          "description": "Output only. The number of untargeted offers.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "feedLabel": {
          "description": "Output only. The offer feed label.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation",
      "description": "The shopping recommendation to fix Merchant Center account suspension issues.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "feedLabel": {
          "description": "Output only. The feed label of the campaign for which the suspension happened.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation",
      "description": "The shopping recommendation to migrate Regular Shopping Campaign targeted offers to Performance Max campaigns.",
      "type": "object",
      "properties": {
        "merchant": {
          "description": "Output only. The details of the Merchant Center account.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_MerchantInfo"
        },
        "feedLabel": {
          "description": "Output only. The feed label of the offers targeted by the campaigns sharing this suggestion.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_DynamicImageExtensionOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_DynamicImageExtensionOptInRecommendation",
      "description": "Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_RaiseTargetCpaRecommendation",
      "description": "Recommendation to raise Target CPA.",
      "type": "object",
      "properties": {
        "targetAdjustment": {
          "description": "Output only. The relevant information describing the recommended target adjustment.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetAdjustmentInfo"
        },
        "appBiddingGoal": {
          "description": "Output only. Represents the goal towards which the bidding strategy should optimize. Only populated for App Campaigns.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represents value unknown in this version of the API.",
            "The bidding strategy of the app campaign should aim to maximize installation of the app.",
            "The bidding strategy of the app campaign should aim to maximize the selected in-app conversions' volume.",
            "The bidding strategy of the app campaign should aim to maximize all conversions' value, that is, install and selected in-app conversions.",
            "The bidding strategy of the app campaign should aim to maximize just the selected in-app conversion's volume, while achieving or exceeding target cost per in-app conversion.",
            "The bidding strategy of the app campaign should aim to maximize all conversions' value, that is, install and selected in-app conversions while achieving or exceeding target return on advertising spend.",
            "This bidding strategy of the app campaign should aim to maximize installation of the app without advertiser-provided target cost-per-install.",
            "This bidding strategy of the app campaign should aim to maximize pre-registration of the app."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME",
            "OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME",
            "OPTIMIZE_FOR_TOTAL_CONVERSION_VALUE",
            "OPTIMIZE_FOR_TARGET_IN_APP_CONVERSION",
            "OPTIMIZE_FOR_RETURN_ON_ADVERTISING_SPEND",
            "OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME_WITHOUT_TARGET_CPI",
            "OPTIMIZE_FOR_PRE_REGISTRATION_CONVERSION_VOLUME"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_TargetAdjustmentInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetAdjustmentInfo",
      "description": "Information of a target adjustment recommendation.",
      "type": "object",
      "properties": {
        "sharedSet": {
          "description": "Output only. The shared set resource name of the portfolio bidding strategy where the target is defined. Only populated if the recommendation is portfolio level.",
          "readOnly": true,
          "type": "string"
        },
        "recommendedTargetMultiplier": {
          "description": "Output only. The factor by which we recommend the target to be adjusted by.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "currentAverageTargetMicros": {
          "description": "Output only. The current average target of the campaign or portfolio targeted by this recommendation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_LowerTargetRoasRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_LowerTargetRoasRecommendation",
      "description": "Recommendation to lower Target ROAS.",
      "type": "object",
      "properties": {
        "targetAdjustment": {
          "description": "Output only. The relevant information describing the recommended target adjustment.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_TargetAdjustmentInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxOptInRecommendation",
      "description": "The Performance Max Opt In recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ImprovePerformanceMaxAdStrengthRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ImprovePerformanceMaxAdStrengthRecommendation",
      "description": "Recommendation to improve the asset group strength of a Performance Max campaign to an \"Excellent\" rating.",
      "type": "object",
      "properties": {
        "assetGroup": {
          "description": "Output only. The asset group resource name.",
          "readOnly": true,
          "type": "string"
        },
        "adStrength": {
          "description": "Output only. The current ad strength score of the asset group.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad strength is currently pending.",
            "No ads could be generated.",
            "Poor strength.",
            "Average strength.",
            "Good strength.",
            "Excellent strength."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "NO_ADS",
            "POOR",
            "AVERAGE",
            "GOOD",
            "EXCELLENT"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MigrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MigrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation",
      "description": "The Dynamic Search Ads to Performance Max migration recommendation.",
      "type": "object",
      "properties": {
        "applyLink": {
          "description": "Output only. A link to the Google Ads UI where the customer can manually apply the recommendation.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetCpaRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ForecastingSetTargetCpaRecommendation",
      "description": "The set target CPA recommendations.",
      "type": "object",
      "properties": {
        "recommendedTargetCpaMicros": {
          "description": "Output only. The recommended target CPA.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "campaignBudget": {
          "description": "Output only. The campaign budget.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_CampaignBudget"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionValueOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_MaximizeConversionValueOptInRecommendation",
      "description": "Recommendation to opt into Maximize Conversion Value bidding strategy.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveGoogleTagCoverageRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveGoogleTagCoverageRecommendation",
      "description": "Recommendation to deploy Google Tag on more pages.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxFinalUrlOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_PerformanceMaxFinalUrlOptInRecommendation",
      "description": "Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_RefreshCustomerMatchListRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_RefreshCustomerMatchListRecommendation",
      "description": "The recommendation to update a customer list that hasn't been updated in the last 90 days. The customer receiving the recommendation is not necessarily the owner account. The owner account should update the customer list.",
      "type": "object",
      "properties": {
        "userListId": {
          "description": "Output only. The user list ID.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "userListName": {
          "description": "Output only. The name of the list.",
          "readOnly": true,
          "type": "string"
        },
        "daysSinceLastRefresh": {
          "description": "Output only. Days since last refresh.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "topSpendingAccount": {
          "description": "Output only. The top spending account.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_AccountInfo"
          }
        },
        "targetingAccountsCount": {
          "description": "Output only. User lists can be shared with other accounts by the owner. targeting_accounts_count is the number of those accounts that can use it for targeting.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "ownerAccount": {
          "description": "Output only. The owner account. This is the account that should update the customer list.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_Recommendation_AccountInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_AccountInfo": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_AccountInfo",
      "description": "Wrapper for information about a Google Ads account.",
      "type": "object",
      "properties": {
        "customerId": {
          "description": "Output only. The customer ID of the account.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "descriptiveName": {
          "description": "Output only. The descriptive name of the account.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_CustomAudienceOptInRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_CustomAudienceOptInRecommendation",
      "description": "The Custom Audience Opt In recommendation.",
      "type": "object",
      "properties": {
        "keywords": {
          "description": "Output only. The list of keywords to use for custom audience creation.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_LeadFormAssetRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_LeadFormAssetRecommendation",
      "description": "The lead form asset recommendation.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveDemandGenAdStrengthRecommendation": {
      "id": "GoogleAdsGoogleadsV21Resources_Recommendation_ImproveDemandGenAdStrengthRecommendation",
      "description": "The improve Demand Gen ad strength recommendation.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "Output only. The resource name of the ad that can be improved.",
          "readOnly": true,
          "type": "string"
        },
        "adStrength": {
          "description": "Output only. The current ad strength.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The ad strength is currently pending.",
            "No ads could be generated.",
            "Poor strength.",
            "Average strength.",
            "Good strength.",
            "Excellent strength."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "NO_ADS",
            "POOR",
            "AVERAGE",
            "GOOD",
            "EXCELLENT"
          ]
        },
        "demandGenAssetActionItems": {
          "description": "Output only. A list of recommendations to improve the ad strength.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__SearchTermView": {
      "id": "GoogleAdsGoogleadsV21Resources__SearchTermView",
      "description": "A search term view with metrics aggregated by search term at the ad group level. This view does not include Performance Max data. If you are looking for Performance Max search term data, use the CampaignSearchTermView instead.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the search term view. Search term view resource names have the form: `customers/{customer_id}/searchTermViews/{campaign_id}~{ad_group_id}~{URL-base64_search_term}`",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. The search term.",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. The ad group the search term served in.",
          "readOnly": true,
          "type": "string"
        },
        "status": {
          "description": "Output only. Indicates whether the search term is currently one of your targeted or excluded keywords.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search term is added to targeted keywords.",
            "Search term matches a negative keyword.",
            "Search term has been both added and excluded.",
            "Search term is neither targeted nor excluded."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADDED",
            "EXCLUDED",
            "ADDED_EXCLUDED",
            "NONE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ShoppingPerformanceView": {
      "id": "GoogleAdsGoogleadsV21Resources__ShoppingPerformanceView",
      "description": "Shopping performance view. Provides Shopping campaign statistics aggregated at several product dimension levels. Product dimension values from Merchant Center such as brand, category, custom attributes, product condition and product type will reflect the state of each dimension as of the date and time when the corresponding event was recorded.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Shopping performance view. Shopping performance view resource names have the form: `customers/{customer_id}/shoppingPerformanceView`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ShoppingProduct": {
      "id": "GoogleAdsGoogleadsV21Resources__ShoppingProduct",
      "description": "A shopping product from Google Merchant Center that can be advertised by campaigns. The resource returns currently existing products from Google Merchant Center accounts linked with the customer. A campaign includes a product by specifying its merchant id (or, if available, the Multi Client Account id of the merchant) in the `ShoppingSetting`, and can limit the inclusion to products having a specified feed label. Standard Shopping campaigns can also limit the inclusion through a `campaign_criterion.listing_scope`. Queries to this resource specify a scope: Account: - Filters on campaigns or ad groups are not specified. - All products from the linked Google Merchant Center accounts are returned. - Metrics and some fields (see the per-field documentation) are aggregated across all Shopping and Performance Max campaigns that include a product. Campaign: - An equality filter on `campaign` is specified. Supported campaign types are Shopping, Performance Max, Demand Gen, Video. - Only products that are included by the specified campaign are returned. - Metrics and some fields (see the per-field documentation) are restricted to the specified campaign. Ad group: - An equality filter on `ad group` and `campaign` is specified. Supported campaign types are Shopping, Demand Gen, Video. - Only products that are included by the specified campaign are returned. - Metrics and some fields (see the per-field documentation) are restricted to the specified ad group. Note that segmentation by date segments is not permitted and will return UNSUPPORTED_DATE_SEGMENTATION error. On the other hand, filtering on date segments is allowed.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the shopping product. Shopping product resource names have the form: `customers/{customer_id}/shoppingProducts/{merchant_center_id}~{channel}~{language_code}~{feed_label}~{item_id}`",
          "readOnly": true,
          "type": "string"
        },
        "merchantCenterId": {
          "description": "Output only. The id of the merchant that owns the product.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "channel": {
          "description": "Output only. The product channel describing the locality of the product.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold online.",
            "The item is sold in local stores."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ONLINE",
            "LOCAL"
          ]
        },
        "languageCode": {
          "description": "Output only. The language code as provided by the merchant, in BCP 47 format.",
          "readOnly": true,
          "type": "string"
        },
        "feedLabel": {
          "description": "Output only. The product feed label as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "itemId": {
          "description": "Output only. The item id of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "multiClientAccountId": {
          "description": "Output only. The id of the Multi Client Account of the merchant, if present.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "title": {
          "description": "Output only. The title of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "brand": {
          "description": "Output only. The brand of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "priceMicros": {
          "description": "Output only. The price of the product in micros as provided by the merchant, in the currency specified in `currency_code` (e.g. $2.97 is reported as 2970000).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "currencyCode": {
          "description": "Output only. The currency code as provided by the merchant, in ISO 4217 format.",
          "readOnly": true,
          "type": "string"
        },
        "channelExclusivity": {
          "description": "Output only. The channel exclusivity of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold through one channel only, either local stores or online as indicated by its ProductChannel.",
            "The item is matched to its online or local stores counterpart, indicating it is available for purchase in both ShoppingProductChannels."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SINGLE_CHANNEL",
            "MULTI_CHANNEL"
          ]
        },
        "condition": {
          "description": "Output only. The condition of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The product condition is new.",
            "The product condition is refurbished.",
            "The product condition is used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "REFURBISHED",
            "USED"
          ]
        },
        "availability": {
          "description": "Output only. The availability of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "Used for return value only. Represents values unknown in this version.",
            "The product is in stock.",
            "The product is out of stock.",
            "The product can be preordered."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IN_STOCK",
            "OUT_OF_STOCK",
            "PREORDER"
          ]
        },
        "targetCountries": {
          "description": "Output only. Upper-case two-letter ISO 3166-1 code of the regions where the product is intended to be shown in ads.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "customAttribute0": {
          "description": "Output only. The custom attribute 0 of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "customAttribute1": {
          "description": "Output only. The custom attribute 1 of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "customAttribute2": {
          "description": "Output only. The custom attribute 2 of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "customAttribute3": {
          "description": "Output only. The custom attribute 3 of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "customAttribute4": {
          "description": "Output only. The custom attribute 4 of the product as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "categoryLevel1": {
          "description": "Output only. The category level 1 of the product.",
          "readOnly": true,
          "type": "string"
        },
        "categoryLevel2": {
          "description": "Output only. The category level 2 of the product.",
          "readOnly": true,
          "type": "string"
        },
        "categoryLevel3": {
          "description": "Output only. The category level 3 of the product.",
          "readOnly": true,
          "type": "string"
        },
        "categoryLevel4": {
          "description": "Output only. The category level 4 of the product.",
          "readOnly": true,
          "type": "string"
        },
        "categoryLevel5": {
          "description": "Output only. The category level 5 of the product.",
          "readOnly": true,
          "type": "string"
        },
        "productTypeLevel1": {
          "description": "Output only. The product type level 1 as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "productTypeLevel2": {
          "description": "Output only. The product type level 2 as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "productTypeLevel3": {
          "description": "Output only. The product type level 3 as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "productTypeLevel4": {
          "description": "Output only. The product type level 4 as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "productTypeLevel5": {
          "description": "Output only. The product type level 5 as provided by the merchant.",
          "readOnly": true,
          "type": "string"
        },
        "effectiveMaxCpcMicros": {
          "description": "Output only. The effective maximum cost-per-click (effective max. CPC) of the product. This field is available only if the query specifies the campaign or ad group scope, and if the campaign uses manual bidding. The value is the highest bid set for the product in product groups across all enabled ad groups. It represents the most you're willing to pay for a click on the product. This field can take up to 24 hours to update.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "status": {
          "description": "Output only. The status that indicates whether the product can show in ads. The value of this field is restricted to the scope specified in the query, see the documentation of the resource. This field can take up to 24 hours to update.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents values unknown in this version.",
            "The product cannot show in ads.",
            "The product can show in ads but may be limited in where and when it can show due to identified issues.",
            "The product can show in ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_ELIGIBLE",
            "ELIGIBLE_LIMITED",
            "ELIGIBLE"
          ]
        },
        "issues": {
          "description": "Output only. The list of issues affecting whether the product can show in ads. The value of this field is restricted to the scope specified in the query, see the documentation of the resource. This field can take up to 24 hours to update.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_ShoppingProduct_ProductIssue"
          }
        },
        "campaign": {
          "description": "Output only. A campaign that includes the product. This field is selectable only in the campaign scope, which requires an equality filter on `campaign`.",
          "readOnly": true,
          "type": "string"
        },
        "adGroup": {
          "description": "Output only. An ad group of a campaign that includes the product. This field is selectable only in the ad group scope, which requires an equality filter on `campaign` and `ad_group`.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_ShoppingProduct_ProductIssue": {
      "id": "GoogleAdsGoogleadsV21Resources_ShoppingProduct_ProductIssue",
      "description": "An issue affecting whether a product can show in ads.",
      "type": "object",
      "properties": {
        "errorCode": {
          "description": "Output only. The error code that identifies the issue.",
          "readOnly": true,
          "type": "string"
        },
        "adsSeverity": {
          "description": "Output only. The severity of the issue in Google Ads.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The issue limits the performance of the product in ads.",
            "The issue prevents the product from showing in ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WARNING",
            "ERROR"
          ]
        },
        "attributeName": {
          "description": "Output only. The name of the product's attribute, if any, that triggered the issue.",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Output only. The short description of the issue in English.",
          "readOnly": true,
          "type": "string"
        },
        "detail": {
          "description": "Output only. The detailed description of the issue in English.",
          "readOnly": true,
          "type": "string"
        },
        "documentation": {
          "description": "Output only. The URL of the Help Center article for the issue.",
          "readOnly": true,
          "type": "string"
        },
        "affectedRegions": {
          "description": "Output only. List of upper-case two-letter ISO 3166-1 codes of the regions affected by the issue. If empty, all regions are affected.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__SmartCampaignSearchTermView": {
      "id": "GoogleAdsGoogleadsV21Resources__SmartCampaignSearchTermView",
      "description": "A Smart campaign search term view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Smart campaign search term view. Smart campaign search term view resource names have the form: `customers/{customer_id}/smartCampaignSearchTermViews/{campaign_id}~{URL-base64_search_term}`",
          "readOnly": true,
          "type": "string"
        },
        "searchTerm": {
          "description": "Output only. The search term.",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. The Smart campaign the search term served in.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLink": {
      "id": "GoogleAdsGoogleadsV21Resources__ThirdPartyAppAnalyticsLink",
      "description": "A data sharing connection, allowing the import of third party app analytics into a Google Ads Customer.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the third party app analytics link. Third party app analytics link resource names have the form: `customers/{customer_id}/thirdPartyAppAnalyticsLinks/{account_link_id}`",
          "type": "string"
        },
        "shareableLinkId": {
          "description": "Output only. The shareable link ID that should be provided to the third party when setting up app analytics. This is able to be regenerated using regenerate method in the ThirdPartyAppAnalyticsLinkService.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__TopicView": {
      "id": "GoogleAdsGoogleadsV21Resources__TopicView",
      "description": "A topic view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the topic view. Topic view resource names have the form: `customers/{customer_id}/topicViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__TravelActivityGroupView": {
      "id": "GoogleAdsGoogleadsV21Resources__TravelActivityGroupView",
      "description": "A travel activity group view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the travel activity group view. Travel Activity Group view resource names have the form: `customers/{customer_id}/travelActivityGroupViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__TravelActivityPerformanceView": {
      "id": "GoogleAdsGoogleadsV21Resources__TravelActivityPerformanceView",
      "description": "A travel activity performance view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the travel activity performance view. Travel Activity performance view resource names have the form: `customers/{customer_id}/travelActivityPerformanceView`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__UserInterest": {
      "id": "GoogleAdsGoogleadsV21Resources__UserInterest",
      "description": "A user interest: a particular interest-based vertical to be targeted.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the user interest. User interest resource names have the form: `customers/{customer_id}/userInterests/{user_interest_id}`",
          "readOnly": true,
          "type": "string"
        },
        "taxonomyType": {
          "description": "Output only. Taxonomy type of the user interest.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The affinity for this user interest.",
            "The market for this user interest.",
            "Users known to have installed applications in the specified categories.",
            "The geographical location of the interest-based vertical.",
            "User interest criteria for new smart phone users."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AFFINITY",
            "IN_MARKET",
            "MOBILE_APP_INSTALL_USER",
            "VERTICAL_GEO",
            "NEW_SMART_PHONE_USER"
          ]
        },
        "userInterestId": {
          "description": "Output only. The ID of the user interest.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the user interest.",
          "readOnly": true,
          "type": "string"
        },
        "userInterestParent": {
          "description": "Output only. The parent of the user interest.",
          "readOnly": true,
          "type": "string"
        },
        "launchedToAll": {
          "description": "Output only. True if the user interest is launched to all channels and locales.",
          "readOnly": true,
          "type": "boolean"
        },
        "availabilities": {
          "description": "Output only. Availability information of the user interest.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CriterionCategoryAvailability"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LifeEvent": {
      "id": "GoogleAdsGoogleadsV21Resources__LifeEvent",
      "description": "A life event: a particular interest-based vertical to be targeted to reach users when they are in the midst of important life milestones.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the life event. Life event resource names have the form: `customers/{customer_id}/lifeEvents/{life_event_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the life event.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "name": {
          "description": "Output only. The name of the life event, for example,\"Recently Moved\"",
          "readOnly": true,
          "type": "string"
        },
        "parent": {
          "description": "Output only. The parent of the life_event.",
          "readOnly": true,
          "type": "string"
        },
        "launchedToAll": {
          "description": "Output only. True if the life event is launched to all channels and locales.",
          "readOnly": true,
          "type": "boolean"
        },
        "availabilities": {
          "description": "Output only. Availability information of the life event.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CriterionCategoryAvailability"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__UserListCustomerType": {
      "id": "GoogleAdsGoogleadsV21Resources__UserListCustomerType",
      "description": "A user list customer type",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Immutable. The resource name of the user list customer type User list customer type resource names have the form: `customers/{customer_id}/userListCustomerTypes/{user_list_id}~{customer_type_category}`",
          "type": "string"
        },
        "userList": {
          "description": "Immutable. The resource name for the user list this user list customer type is associated with",
          "type": "string"
        },
        "customerTypeCategory": {
          "description": "Immutable. The user list customer type category",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Unknown type.",
            "Customer type category for all customers.",
            "Customer type category for all purchasers.",
            "Customer type category for high value purchasers.",
            "Customer type category for disengaged purchasers.",
            "Customer type category for qualified leads.",
            "Customer type category for converted leads.",
            "Customer type category for paid subscribers.",
            "Customer type category for loyalty signups.",
            "Customer type category for cart abandoners.",
            "Customer type category for loyalty tier 1 members.",
            "Customer type category for loyalty tier 2 members.",
            "Customer type category for loyalty tier 3 members.",
            "Customer type category for loyalty tier 4 members.",
            "Customer type category for loyalty tier 5 members.",
            "Customer type category for loyalty tier 6 members.",
            "Customer type category for loyalty tier 7 members."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ALL_CUSTOMERS",
            "PURCHASERS",
            "HIGH_VALUE_CUSTOMERS",
            "DISENGAGED_CUSTOMERS",
            "QUALIFIED_LEADS",
            "CONVERTED_LEADS",
            "PAID_SUBSCRIBERS",
            "LOYALTY_SIGN_UPS",
            "CART_ABANDONERS",
            "LOYALTY_TIER_1_MEMBERS",
            "LOYALTY_TIER_2_MEMBERS",
            "LOYALTY_TIER_3_MEMBERS",
            "LOYALTY_TIER_4_MEMBERS",
            "LOYALTY_TIER_5_MEMBERS",
            "LOYALTY_TIER_6_MEMBERS",
            "LOYALTY_TIER_7_MEMBERS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__UserLocationView": {
      "id": "GoogleAdsGoogleadsV21Resources__UserLocationView",
      "description": "A user location view. User Location View includes all metrics aggregated at the country level, one row per country. It reports metrics at the actual physical location of the user by targeted or not targeted location. If other segment fields are used, you may get more than one row per country.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the user location view. UserLocation view resource names have the form: `customers/{customer_id}/userLocationViews/{country_criterion_id}~{targeting_location}`",
          "readOnly": true,
          "type": "string"
        },
        "countryCriterionId": {
          "description": "Output only. Criterion Id for the country.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "targetingLocation": {
          "description": "Output only. Indicates whether location was targeted or not.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__TopicConstant": {
      "id": "GoogleAdsGoogleadsV21Resources__TopicConstant",
      "description": "Use topics to target or exclude placements in the Google Display Network based on the category into which the placement falls (for example, \"Pets & Animals/Pets/Dogs\").",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the topic constant. topic constant resource names have the form: `topicConstants/{topic_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the topic.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "topicConstantParent": {
          "description": "Output only. Resource name of parent of the topic constant.",
          "readOnly": true,
          "type": "string"
        },
        "path": {
          "description": "Output only. The category to target or exclude. Each subsequent element in the array describes a more specific sub-category. For example, {\"Pets & Animals\", \"Pets\", \"Dogs\"} represents the \"Pets & Animals/Pets/Dogs\" category. List of available topic categories at https://developers.google.com/google-ads/api/reference/data/verticals",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Video": {
      "id": "GoogleAdsGoogleadsV21Resources__Video",
      "description": "A video.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the video. Video resource names have the form: `customers/{customer_id}/videos/{video_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the video.",
          "readOnly": true,
          "type": "string"
        },
        "channelId": {
          "description": "Output only. The owner channel id of the video.",
          "readOnly": true,
          "type": "string"
        },
        "durationMillis": {
          "description": "Output only. The duration of the video in milliseconds.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "title": {
          "description": "Output only. The title of the video.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__WebpageView": {
      "id": "GoogleAdsGoogleadsV21Resources__WebpageView",
      "description": "A webpage view.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the webpage view. Webpage view resource names have the form: `customers/{customer_id}/webpageViews/{ad_group_id}~{criterion_id}`",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionData": {
      "id": "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionData",
      "description": "Data from lead form submissions.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the lead form submission data. Lead form submission data resource names have the form: `customers/{customer_id}/leadFormSubmissionData/{lead_form_submission_data_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of this lead form submission.",
          "readOnly": true,
          "type": "string"
        },
        "asset": {
          "description": "Output only. Asset associated with the submitted lead form.",
          "readOnly": true,
          "type": "string"
        },
        "campaign": {
          "description": "Output only. Campaign associated with the submitted lead form.",
          "readOnly": true,
          "type": "string"
        },
        "leadFormSubmissionFields": {
          "description": "Output only. Submission data associated with a lead form.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionField"
          }
        },
        "customLeadFormSubmissionFields": {
          "description": "Output only. Submission data associated with a custom lead form.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__CustomLeadFormSubmissionField"
          }
        },
        "adGroup": {
          "description": "Output only. AdGroup associated with the submitted lead form.",
          "readOnly": true,
          "type": "string"
        },
        "adGroupAd": {
          "description": "Output only. AdGroupAd associated with the submitted lead form.",
          "readOnly": true,
          "type": "string"
        },
        "gclid": {
          "description": "Output only. Google Click Id associated with the submissed lead form.",
          "readOnly": true,
          "type": "string"
        },
        "submissionDateTime": {
          "description": "Output only. The date and time at which the lead form was submitted. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionField": {
      "id": "GoogleAdsGoogleadsV21Resources__LeadFormSubmissionField",
      "description": "Fields in the submitted lead form.",
      "type": "object",
      "properties": {
        "fieldType": {
          "description": "Output only. Field type for lead form fields.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The user will be asked to fill in their given and family name. This field cannot be set at the same time as GIVEN_NAME or FAMILY_NAME.",
            "The user will be asked to fill in their email address.",
            "The user will be asked to fill in their phone number.",
            "The user will be asked to fill in their zip code.",
            "The user will be asked to fill in their street address.",
            "The user will be asked to fill in their city.",
            "The user will be asked to fill in their region part of the address (for example, state for US, province for Canada).",
            "The user will be asked to fill in their country.",
            "The user will be asked to fill in their work email address.",
            "The user will be asked to fill in their company name.",
            "The user will be asked to fill in their work phone.",
            "The user will be asked to fill in their job title.",
            "The user will be asked to fill in their CPF for Brazil users.",
            "The user will be asked to fill in their DNI for Argentina users.",
            "The user will be asked to fill in their DNI for Peru users.",
            "The user will be asked to fill in their RUT for Chile users.",
            "The user will be asked to fill in their CC for Colombia users.",
            "The user will be asked to fill in their CI for Ecuador users.",
            "The user will be asked to fill in their RFC for Mexico users.",
            "The user will be asked to fill in their first name. This field can not be set at the same time as FULL_NAME.",
            "The user will be asked to fill in their last name. This field can not be set at the same time as FULL_NAME.",
            "Question: \"Which model are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which type of vehicle are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred dealership?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"When do you plan on purchasing a vehicle?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Do you own a vehicle?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What vehicle ownership option are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What type of vehicle condition are you interested in?\" Category: \"Auto\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What size is your company?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your annual sales volume?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many years have you been in business?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your job department?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your job role?\" Category: \"Business\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 18 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 19 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 20 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 21 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 22 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 23 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 24 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 25 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 26 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 27 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 28 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 29 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 30 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 31 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 32 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 33 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 34 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 35 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 36 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 37 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 38 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 39 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 40 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 41 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 42 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 43 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 44 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 45 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 46 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 47 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 48 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 49 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 50 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 51 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 52 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 53 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 54 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 55 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 56 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 57 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 58 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 59 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 60 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 61 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 62 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 63 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 64 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you over 65 years of age?\" Category: \"Demographics\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which program are you interested in?\" Category: \"Education\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which course are you interested in?\" Category: \"Education\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which product are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which service are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which offer are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which category are you interested in?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred method of contact?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your preferred location?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is the best time to contact you?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"When are you looking to make a purchase?\" Category: \"General\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many years of work experience do you have?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What industry do you work in?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your highest level of education?\" Category: \"Jobs\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What type of property are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What do you need a realtor's help with?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What neighborhood are you interested in?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What price range are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many bedrooms are you looking for?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you looking for a fully furnished property?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Are you looking for properties that allow pets?\" Category: \"Real Estate\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is the next product you plan to purchase?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Would you like to sign up for an event?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Where are you interested in shopping?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your favorite brand?\" Category: \"Retail\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Which type of valid commercial license do you have?\" Category: \"Transportation\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Interested in booking an event?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your destination country?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your destination city?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure country?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure city?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your departure date?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your return date?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"How many people are you traveling with?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"What is your travel budget?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields.",
            "Question: \"Where do you want to stay during your travel?\" Category: \"Travel\" This field is subject to a limit of 5 qualifying questions per form and cannot be used if values are set using custom_question_fields."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FULL_NAME",
            "EMAIL",
            "PHONE_NUMBER",
            "POSTAL_CODE",
            "STREET_ADDRESS",
            "CITY",
            "REGION",
            "COUNTRY",
            "WORK_EMAIL",
            "COMPANY_NAME",
            "WORK_PHONE",
            "JOB_TITLE",
            "GOVERNMENT_ISSUED_ID_CPF_BR",
            "GOVERNMENT_ISSUED_ID_DNI_AR",
            "GOVERNMENT_ISSUED_ID_DNI_PE",
            "GOVERNMENT_ISSUED_ID_RUT_CL",
            "GOVERNMENT_ISSUED_ID_CC_CO",
            "GOVERNMENT_ISSUED_ID_CI_EC",
            "GOVERNMENT_ISSUED_ID_RFC_MX",
            "FIRST_NAME",
            "LAST_NAME",
            "VEHICLE_MODEL",
            "VEHICLE_TYPE",
            "PREFERRED_DEALERSHIP",
            "VEHICLE_PURCHASE_TIMELINE",
            "VEHICLE_OWNERSHIP",
            "VEHICLE_PAYMENT_TYPE",
            "VEHICLE_CONDITION",
            "COMPANY_SIZE",
            "ANNUAL_SALES",
            "YEARS_IN_BUSINESS",
            "JOB_DEPARTMENT",
            "JOB_ROLE",
            "OVER_18_AGE",
            "OVER_19_AGE",
            "OVER_20_AGE",
            "OVER_21_AGE",
            "OVER_22_AGE",
            "OVER_23_AGE",
            "OVER_24_AGE",
            "OVER_25_AGE",
            "OVER_26_AGE",
            "OVER_27_AGE",
            "OVER_28_AGE",
            "OVER_29_AGE",
            "OVER_30_AGE",
            "OVER_31_AGE",
            "OVER_32_AGE",
            "OVER_33_AGE",
            "OVER_34_AGE",
            "OVER_35_AGE",
            "OVER_36_AGE",
            "OVER_37_AGE",
            "OVER_38_AGE",
            "OVER_39_AGE",
            "OVER_40_AGE",
            "OVER_41_AGE",
            "OVER_42_AGE",
            "OVER_43_AGE",
            "OVER_44_AGE",
            "OVER_45_AGE",
            "OVER_46_AGE",
            "OVER_47_AGE",
            "OVER_48_AGE",
            "OVER_49_AGE",
            "OVER_50_AGE",
            "OVER_51_AGE",
            "OVER_52_AGE",
            "OVER_53_AGE",
            "OVER_54_AGE",
            "OVER_55_AGE",
            "OVER_56_AGE",
            "OVER_57_AGE",
            "OVER_58_AGE",
            "OVER_59_AGE",
            "OVER_60_AGE",
            "OVER_61_AGE",
            "OVER_62_AGE",
            "OVER_63_AGE",
            "OVER_64_AGE",
            "OVER_65_AGE",
            "EDUCATION_PROGRAM",
            "EDUCATION_COURSE",
            "PRODUCT",
            "SERVICE",
            "OFFER",
            "CATEGORY",
            "PREFERRED_CONTACT_METHOD",
            "PREFERRED_LOCATION",
            "PREFERRED_CONTACT_TIME",
            "PURCHASE_TIMELINE",
            "YEARS_OF_EXPERIENCE",
            "JOB_INDUSTRY",
            "LEVEL_OF_EDUCATION",
            "PROPERTY_TYPE",
            "REALTOR_HELP_GOAL",
            "PROPERTY_COMMUNITY",
            "PRICE_RANGE",
            "NUMBER_OF_BEDROOMS",
            "FURNISHED_PROPERTY",
            "PETS_ALLOWED_PROPERTY",
            "NEXT_PLANNED_PURCHASE",
            "EVENT_SIGNUP_INTEREST",
            "PREFERRED_SHOPPING_PLACES",
            "FAVORITE_BRAND",
            "TRANSPORTATION_COMMERCIAL_LICENSE_TYPE",
            "EVENT_BOOKING_INTEREST",
            "DESTINATION_COUNTRY",
            "DESTINATION_CITY",
            "DEPARTURE_COUNTRY",
            "DEPARTURE_CITY",
            "DEPARTURE_DATE",
            "RETURN_DATE",
            "NUMBER_OF_TRAVELERS",
            "TRAVEL_BUDGET",
            "TRAVEL_ACCOMMODATION"
          ]
        },
        "fieldValue": {
          "description": "Output only. Field value for lead form fields.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomLeadFormSubmissionField": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomLeadFormSubmissionField",
      "description": "Fields in the submitted custom question",
      "type": "object",
      "properties": {
        "questionText": {
          "description": "Output only. Question text for custom question, maximum number of characters is 300.",
          "readOnly": true,
          "type": "string"
        },
        "fieldValue": {
          "description": "Output only. Field value for custom question response, maximum number of characters is 70.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocalServicesLead": {
      "id": "GoogleAdsGoogleadsV21Resources__LocalServicesLead",
      "description": "Data from Local Services Lead. Contains details of Lead which is generated when user calls, messages or books service from advertiser. More info: https://ads.google.com/local-services-ads",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the local services lead data. Local Services Lead resource name have the form `customers/{customer_id}/localServicesLead/{local_services_lead_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of this Lead.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "categoryId": {
          "description": "Output only. Service category of the lead. For example: `xcat:service_area_business_hvac`, `xcat:service_area_business_real_estate_agent`, etc. For more details see: https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids",
          "readOnly": true,
          "type": "string"
        },
        "serviceId": {
          "description": "Output only. Service for the category. For example: `buyer_agent`, `seller_agent` for the category of `xcat:service_area_business_real_estate_agent`.",
          "readOnly": true,
          "type": "string"
        },
        "contactDetails": {
          "description": "Output only. Lead's contact details.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__ContactDetails"
        },
        "leadType": {
          "description": "Output only. Type of Local Services lead: phone, message, booking, etc.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Message lead.",
            "Lead created by phone call.",
            "Booking lead."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MESSAGE",
            "PHONE_CALL",
            "BOOKING"
          ]
        },
        "leadStatus": {
          "description": "Output only. Current status of lead.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "New lead which hasn't yet been seen by advertiser.",
            "Lead that thas been interacted by advertiser.",
            "Lead has been booked.",
            "Lead was declined by advertiser.",
            "Lead has expired due to inactivity.",
            "Disabled due to spam or dispute.",
            "Consumer declined the lead.",
            "Personally Identifiable Information of the lead is wiped out."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "ACTIVE",
            "BOOKED",
            "DECLINED",
            "EXPIRED",
            "DISABLED",
            "CONSUMER_DECLINED",
            "WIPED_OUT"
          ]
        },
        "creationDateTime": {
          "description": "Output only. The date time at which lead was created by Local Services Ads. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "locale": {
          "description": "Output only. Language used by the Local Services provider linked to lead. See https://developers.google.com/google-ads/api/data/codes-formats#locales",
          "readOnly": true,
          "type": "string"
        },
        "note": {
          "description": "Output only. Note added by advertiser for the lead.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__Note"
        },
        "leadCharged": {
          "description": "Output only. True if the advertiser was charged for the lead.",
          "readOnly": true,
          "type": "boolean"
        },
        "creditDetails": {
          "description": "Output only. Credit details of the lead.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__CreditDetails"
        },
        "leadFeedbackSubmitted": {
          "description": "Output only. True if the advertiser submitted feedback for the lead.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__ContactDetails": {
      "id": "GoogleAdsGoogleadsV21Resources__ContactDetails",
      "description": "Fields containing consumer contact details.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "Output only. Consumer phone number in E164 format.",
          "readOnly": true,
          "type": "string"
        },
        "email": {
          "description": "Output only. Consumer email address.",
          "readOnly": true,
          "type": "string"
        },
        "consumerName": {
          "description": "Output only. Consumer name if consumer provided name from Message or Booking form on google.com",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Note": {
      "id": "GoogleAdsGoogleadsV21Resources__Note",
      "description": "Represents a note added to a lead by the advertiser. Advertisers can edit notes, which will reset edit time and change description.",
      "type": "object",
      "properties": {
        "editDateTime": {
          "description": "Output only. The date time when lead note was edited. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Output only. Content of lead note.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CreditDetails": {
      "id": "GoogleAdsGoogleadsV21Resources__CreditDetails",
      "description": "Represents the credit details of a lead.",
      "type": "object",
      "properties": {
        "creditState": {
          "description": "Output only. Credit state of the lead.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "A credit has been filed and is being processed by Ads backend, but has not been applied to the account yet.",
            "The credit has been issued to the Ads account."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING",
            "CREDITED"
          ]
        },
        "creditStateLastUpdateDateTime": {
          "description": "Output only. The date time when the credit state of the lead was last updated. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__LocalServicesLeadConversation": {
      "id": "GoogleAdsGoogleadsV21Resources__LocalServicesLeadConversation",
      "description": "Data from Local Services Lead Conversation. Contains details of Lead Conversation which is generated when user calls, messages or books service from advertiser. These are appended to a Lead. More info: https://ads.google.com/local-services-ads",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the local services lead conversation data. Local Services Lead Conversation resource name have the form `customers/{customer_id}/localServicesLeadConversation/{local_services_lead_conversation_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. ID of this Lead Conversation.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "conversationChannel": {
          "description": "Output only. Type of GLS lead conversation, EMAIL, MESSAGE, PHONE_CALL, SMS, etc.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Email lead conversation.",
            "Message lead conversation.",
            "Phone call lead conversation.",
            "SMS lead conversation.",
            "Booking lead conversation.",
            "WhatsApp lead conversation.",
            "Lead conversation created through Google Ads API."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EMAIL",
            "MESSAGE",
            "PHONE_CALL",
            "SMS",
            "BOOKING",
            "WHATSAPP",
            "ADS_API"
          ]
        },
        "participantType": {
          "description": "Output only. Type of participant in the lead conversation, ADVERTISER or CONSUMER.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Local Services Ads Provider participant.",
            "Local Services Ads Consumer participant."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "CONSUMER"
          ]
        },
        "lead": {
          "description": "Output only. Resource name of Lead associated to the Lead Conversation.",
          "readOnly": true,
          "type": "string"
        },
        "eventDateTime": {
          "description": "Output only. The date time at which lead conversation was created by Local Services Ads. The format is \"YYYY-MM-DD HH:MM:SS\" in the Google Ads account's timezone. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30\"",
          "readOnly": true,
          "type": "string"
        },
        "phoneCallDetails": {
          "description": "Output only. Details of phone call conversation in case of PHONE_CALL.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__PhoneCallDetails"
        },
        "messageDetails": {
          "description": "Output only. Details of message conversation in case of EMAIL, MESSAGE or SMS.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources__MessageDetails"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__PhoneCallDetails": {
      "id": "GoogleAdsGoogleadsV21Resources__PhoneCallDetails",
      "description": "Represents details of a phone call conversation.",
      "type": "object",
      "properties": {
        "callDurationMillis": {
          "description": "Output only. The duration (in milliseconds) of the phone call (end to end).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "callRecordingUrl": {
          "description": "Output only. URL to the call recording audio file.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__MessageDetails": {
      "id": "GoogleAdsGoogleadsV21Resources__MessageDetails",
      "description": "Represents details of text message in case of email, message or SMS.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Output only. Textual content of the message.",
          "readOnly": true,
          "type": "string"
        },
        "attachmentUrls": {
          "description": "Output only. URL to the SMS or email attachments. These URLs can be used to download the contents of the attachment by using the developer token.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleAdGroup": {
      "id": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleAdGroup",
      "description": "An Android privacy shared key view for Google ad group key.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Android privacy shared key. Android privacy shared key resource names have the form: `customers/{customer_id}/androidPrivacySharedKeyGoogleAdGroups/{campaign_id}~{ad_group_id}~{android_privacy_interaction_type}~{android_privacy_network_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`",
          "readOnly": true,
          "type": "string"
        },
        "campaignId": {
          "description": "Output only. The campaign ID used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "androidPrivacyInteractionType": {
          "description": "Output only. The interaction type enum used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The physical click interaction type.",
            "The 10 seconds engaged view interaction type.",
            "The view (ad impression) interaction type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLICK",
            "ENGAGED_VIEW",
            "VIEW"
          ]
        },
        "androidPrivacyInteractionDate": {
          "description": "Output only. The interaction date used in the shared key encoding in the format of \"YYYY-MM-DD\" in UTC timezone.",
          "readOnly": true,
          "type": "string"
        },
        "androidPrivacyNetworkType": {
          "description": "Output only. The network type enum used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Search Network.",
            "Display Network.",
            "YouTube Network."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "YOUTUBE"
          ]
        },
        "adGroupId": {
          "description": "Output only. The ad group ID used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "sharedAdGroupKey": {
          "description": "Output only. 128 bit hex string of the encoded shared ad group key, including a '0x' prefix. This key can be used to do a bitwise OR operator with the aggregate conversion key to create a full aggregation key to retrieve the Aggregate API Report in Android Privacy Sandbox.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleCampaign": {
      "id": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleCampaign",
      "description": "An Android privacy shared key view for Google campaign key.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Android privacy shared key. Android privacy shared key resource names have the form: `customers/{customer_id}/androidPrivacySharedKeyGoogleCampaigns/{campaign_id}~{android_privacy_interaction_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`",
          "readOnly": true,
          "type": "string"
        },
        "campaignId": {
          "description": "Output only. The campaign ID used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "androidPrivacyInteractionType": {
          "description": "Output only. The interaction type enum used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The physical click interaction type.",
            "The 10 seconds engaged view interaction type.",
            "The view (ad impression) interaction type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLICK",
            "ENGAGED_VIEW",
            "VIEW"
          ]
        },
        "androidPrivacyInteractionDate": {
          "description": "Output only. The interaction date used in the shared key encoding in the format of \"YYYY-MM-DD\" in UTC timezone.",
          "readOnly": true,
          "type": "string"
        },
        "sharedCampaignKey": {
          "description": "Output only. 128 bit hex string of the encoded shared campaign key, including a '0x' prefix. This key can be used to do a bitwise OR operator with the aggregate conversion key to create a full aggregation key to retrieve the Aggregate API Report in Android Privacy Sandbox.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleNetworkType": {
      "id": "GoogleAdsGoogleadsV21Resources__AndroidPrivacySharedKeyGoogleNetworkType",
      "description": "An Android privacy shared key view for Google network type key.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the Android privacy shared key. Android privacy shared key resource names have the form: `customers/{customer_id}/androidPrivacySharedKeyGoogleNetworkTypes/{campaign_id}~{android_privacy_interaction_type}~{android_privacy_network_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`",
          "readOnly": true,
          "type": "string"
        },
        "campaignId": {
          "description": "Output only. The campaign ID used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "androidPrivacyInteractionType": {
          "description": "Output only. The interaction type enum used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The physical click interaction type.",
            "The 10 seconds engaged view interaction type.",
            "The view (ad impression) interaction type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLICK",
            "ENGAGED_VIEW",
            "VIEW"
          ]
        },
        "androidPrivacyInteractionDate": {
          "description": "Output only. The interaction date used in the shared key encoding in the format of \"YYYY-MM-DD\" in UTC timezone.",
          "readOnly": true,
          "type": "string"
        },
        "androidPrivacyNetworkType": {
          "description": "Output only. The network type enum used in the share key encoding.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Search Network.",
            "Display Network.",
            "YouTube Network."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "YOUTUBE"
          ]
        },
        "sharedNetworkTypeKey": {
          "description": "Output only. 128 bit hex string of the encoded shared network type key, including a '0x' prefix. This key can be used to do a bitwise OR operator with the aggregate conversion key to create a full aggregation key to retrieve the Aggregate API Report in Android Privacy Sandbox.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Metrics": {
      "id": "GoogleAdsGoogleadsV21Common__Metrics",
      "description": "Metrics data.",
      "type": "object",
      "properties": {
        "absoluteTopImpressionPercentage": {
          "description": "Search absolute top impression share is the percentage of your Search ad impressions that are shown in the most prominent Search position.",
          "type": "number",
          "format": "double"
        },
        "activeViewCpm": {
          "description": "Average cost of viewable impressions (`active_view_impressions`).",
          "type": "number",
          "format": "double"
        },
        "activeViewCtr": {
          "description": "Active view measurable clicks divided by active view viewable impressions. This metric is reported only for the Display Network.",
          "type": "number",
          "format": "double"
        },
        "activeViewImpressions": {
          "description": "A measurement of how often your ad has become viewable on a Display Network site.",
          "type": "string",
          "format": "int64"
        },
        "activeViewMeasurability": {
          "description": "The ratio of impressions that could be measured by Active View over the number of served impressions.",
          "type": "number",
          "format": "double"
        },
        "activeViewMeasurableCostMicros": {
          "description": "The cost of the impressions you received that were measurable by Active View.",
          "type": "string",
          "format": "int64"
        },
        "activeViewMeasurableImpressions": {
          "description": "The number of times your ads are appearing on placements in positions where they can be seen.",
          "type": "string",
          "format": "int64"
        },
        "activeViewViewability": {
          "description": "The percentage of time when your ad appeared on an Active View enabled site (measurable impressions) and was viewable (viewable impressions).",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromInteractionsRate": {
          "description": "All conversions from interactions (as oppose to view through conversions) divided by the number of ad interactions.",
          "type": "number",
          "format": "double"
        },
        "allConversionsValue": {
          "description": "The value of all conversions.",
          "type": "number",
          "format": "double"
        },
        "allConversionsValueByConversionDate": {
          "description": "The value of all conversions. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "allNewCustomerLifetimeValue": {
          "description": "All of new customers' lifetime conversion value. If you have set up customer acquisition goal at either account level or campaign level, this will include the additional conversion value from new customers for both biddable and non-biddable conversions. If your campaign has adopted the customer acquisition goal and selected \"bid higher for new customers\", these values will be included in \"all_conversions_value\". See https://support.google.com/google-ads/answer/12080169 for more details.",
          "type": "number",
          "format": "double"
        },
        "allConversions": {
          "description": "The total number of conversions. This includes all conversions regardless of the value of include_in_conversions_metric.",
          "type": "number",
          "format": "double"
        },
        "allConversionsByConversionDate": {
          "description": "The total number of conversions. This includes all conversions regardless of the value of include_in_conversions_metric. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "allConversionsValuePerCost": {
          "description": "The value of all conversions divided by the total cost of ad interactions (such as clicks for text ads or views for video ads).",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromClickToCall": {
          "description": "The number of times people clicked the \"Call\" button to call a store during or after clicking an ad. This number doesn't include whether or not calls were connected, or the duration of any calls. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromDirections": {
          "description": "The number of times people clicked a \"Get directions\" button to navigate to a store after clicking an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromInteractionsValuePerInteraction": {
          "description": "The value of all conversions from interactions divided by the total number of interactions.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromMenu": {
          "description": "The number of times people clicked a link to view a store's menu after clicking an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromOrder": {
          "description": "The number of times people placed an order at a store after clicking an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromOtherEngagement": {
          "description": "The number of other conversions (for example, posting a review or saving a location for a store) that occurred after people clicked an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromStoreVisit": {
          "description": "Estimated number of times people visited a store after clicking an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromStoreWebsite": {
          "description": "The number of times that people were taken to a store's URL after clicking an ad. This metric applies to feed items only.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchAbsoluteTopImpressionPercentage": {
          "description": "This metric is part of the Auction Insights report, and tells how often the ads of another participant showed in the most prominent position on the search results page. This percentage is computed only over the auctions that you appeared in the page. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchImpressionShare": {
          "description": "This metric is part of the Auction Insights report, and tells the percentage of impressions that another participant obtained, over the total number of impressions that your ads were eligible for. Any value below 0.1 is reported as 0.0999. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchOutrankingShare": {
          "description": "This metric is part of the Auction Insights report, and tells the percentage of impressions that your ads outranked (showed above) another participant in the auction, compared to the total number of impressions that your ads were eligible for. Any value below 0.1 is reported as 0.0999. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchOverlapRate": {
          "description": "This metric is part of the Auction Insights report, and tells how often another participant's ad received an impression when your ad also received an impression. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchPositionAboveRate": {
          "description": "This metric is part of the Auction Insights report, and tells how often another participant's ad was shown in a higher position than yours, when both of your ads were shown at the same page. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "auctionInsightSearchTopImpressionPercentage": {
          "description": "This metric is part of the Auction Insights report, and tells how often the ads of another participant showed adjacent to the top organic search results. This percentage is computed only over the auctions that you appeared in the page. This metric is not publicly available.",
          "type": "number",
          "format": "double"
        },
        "averageCost": {
          "description": "The average amount you pay per interaction. This amount is the total cost of your ads divided by the total number of interactions.",
          "type": "number",
          "format": "double"
        },
        "averageCpc": {
          "description": "The total cost of all clicks divided by the total number of clicks received.",
          "type": "number",
          "format": "double"
        },
        "averageCpe": {
          "description": "The average amount that you've been charged for an ad engagement. This amount is the total cost of all ad engagements divided by the total number of ad engagements.",
          "type": "number",
          "format": "double"
        },
        "averageCpm": {
          "description": "Average cost-per-thousand impressions (CPM).",
          "type": "number",
          "format": "double"
        },
        "averageCpv": {
          "description": "The average amount you pay each time someone views your ad. The average CPV is defined by the total cost of all ad views divided by the number of views.",
          "type": "number",
          "format": "double"
        },
        "averagePageViews": {
          "description": "Average number of pages viewed per session.",
          "type": "number",
          "format": "double"
        },
        "averageTimeOnSite": {
          "description": "Total duration of all sessions (in seconds) / number of sessions. Imported from Google Analytics.",
          "type": "number",
          "format": "double"
        },
        "benchmarkAverageMaxCpc": {
          "description": "An indication of how other advertisers are bidding on similar products.",
          "type": "number",
          "format": "double"
        },
        "biddableAppInstallConversions": {
          "description": "Number of app installs.",
          "type": "number",
          "format": "double"
        },
        "biddableAppPostInstallConversions": {
          "description": "Number of in-app actions.",
          "type": "number",
          "format": "double"
        },
        "biddableCohortAppPostInstallConversions": {
          "description": "Participated in-app actions. The number of in app actions that come directly or indirectly from the campaign.",
          "type": "number",
          "format": "double"
        },
        "benchmarkCtr": {
          "description": "An indication on how other advertisers' Shopping ads for similar products are performing based on how often people who see their ad click on it.",
          "type": "number",
          "format": "double"
        },
        "bounceRate": {
          "description": "Percentage of clicks where the user only visited a single page on your site. Imported from Google Analytics.",
          "type": "number",
          "format": "double"
        },
        "clicks": {
          "description": "The number of clicks.",
          "type": "string",
          "format": "int64"
        },
        "combinedClicks": {
          "description": "The number of times your ad or your site's listing in the unpaid results was clicked. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "string",
          "format": "int64"
        },
        "combinedClicksPerQuery": {
          "description": "The number of times your ad or your site's listing in the unpaid results was clicked (combined_clicks) divided by combined_queries. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "number",
          "format": "double"
        },
        "combinedQueries": {
          "description": "The number of searches that returned pages from your site in the unpaid results or showed one of your text ads. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "string",
          "format": "int64"
        },
        "contentBudgetLostImpressionShare": {
          "description": "The estimated percent of times that your ad was eligible to show on the Display Network but didn't because your budget was too low. Note: Content budget lost impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "contentImpressionShare": {
          "description": "The impressions you've received on the Display Network divided by the estimated number of impressions you were eligible to receive. Note: Content impression share is reported in the range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.",
          "type": "number",
          "format": "double"
        },
        "conversionLastReceivedRequestDateTime": {
          "description": "The last date/time a conversion tag for this conversion action successfully fired and was seen by Google Ads. This firing event may not have been the result of an attributable conversion (for example, because the tag was fired from a browser that did not previously click an ad from an appropriate advertiser). The date/time is in the customer's time zone.",
          "type": "string"
        },
        "conversionLastConversionDate": {
          "description": "The date of the most recent conversion for this conversion action. The date is in the customer's time zone.",
          "type": "string"
        },
        "contentRankLostImpressionShare": {
          "description": "The estimated percentage of impressions on the Display Network that your ads didn't receive due to poor Ad Rank. Note: Content rank lost impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "conversionsFromInteractionsRate": {
          "description": "Conversions from interactions divided by the number of ad interactions (such as clicks for text ads or views for video ads). This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "conversionsValue": {
          "description": "The value of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "conversionsValueByConversionDate": {
          "description": "The value of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "newCustomerLifetimeValue": {
          "description": "New customers' lifetime conversion value. If you have set up customer acquisition goal at either account level or campaign level, this will include the additional conversion value from new customers for biddable conversions. If your campaign has adopted the customer acquisition goal and selected \"bid higher for new customers\", these values will be included in \"conversions_value\" for optimization. See https://support.google.com/google-ads/answer/12080169 for more details.",
          "type": "number",
          "format": "double"
        },
        "conversionsValuePerCost": {
          "description": "The value of conversions divided by the cost of ad interactions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "conversionsFromInteractionsValuePerInteraction": {
          "description": "The value of conversions from interactions divided by the number of ad interactions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "conversions": {
          "description": "The number of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "conversionsByConversionDate": {
          "description": "The number of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "costMicros": {
          "description": "The sum of your cost-per-click (CPC) and cost-per-thousand impressions (CPM) costs during this period.",
          "type": "string",
          "format": "int64"
        },
        "costPerAllConversions": {
          "description": "The cost of ad interactions divided by all conversions.",
          "type": "number",
          "format": "double"
        },
        "costPerConversion": {
          "description": "The cost of ad interactions divided by conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "costPerCurrentModelAttributedConversion": {
          "description": "The cost of ad interactions divided by current model attributed conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "crossDeviceConversions": {
          "description": "Conversions from when a customer clicks on a Google Ads ad on one device, then converts on a different device or browser. Cross-device conversions are already included in all_conversions.",
          "type": "number",
          "format": "double"
        },
        "crossDeviceConversionsValue": {
          "description": "The sum of the value of cross-device conversions.",
          "type": "number",
          "format": "double"
        },
        "crossDeviceConversionsValueMicros": {
          "description": "The sum of the value of cross-device conversions, in micros.",
          "type": "string",
          "format": "int64"
        },
        "ctr": {
          "description": "The number of clicks your ad receives (Clicks) divided by the number of times your ad is shown (Impressions).",
          "type": "number",
          "format": "double"
        },
        "currentModelAttributedConversions": {
          "description": "Shows how your historic conversions data would look under the attribution model you've currently selected. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "currentModelAttributedConversionsFromInteractionsRate": {
          "description": "Current model attributed conversions from interactions divided by the number of ad interactions (such as clicks for text ads or views for video ads). This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "currentModelAttributedConversionsFromInteractionsValuePerInteraction": {
          "description": "The value of current model attributed conversions from interactions divided by the number of ad interactions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "currentModelAttributedConversionsValue": {
          "description": "The value of current model attributed conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "currentModelAttributedConversionsValuePerCost": {
          "description": "The value of current model attributed conversions divided by the cost of ad interactions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "engagementRate": {
          "description": "How often people engage with your ad after it's shown to them. This is the number of ad expansions divided by the number of times your ad is shown.",
          "type": "number",
          "format": "double"
        },
        "engagements": {
          "description": "The number of engagements. An engagement occurs when a viewer expands your Lightbox ad. Also, in the future, other ad types may support engagement metrics.",
          "type": "string",
          "format": "int64"
        },
        "hotelAverageLeadValueMicros": {
          "description": "Average lead value based on clicks.",
          "type": "number",
          "format": "double"
        },
        "hotelCommissionRateMicros": {
          "description": "Commission bid rate in micros. A 20% commission is represented as 200,000.",
          "type": "string",
          "format": "int64"
        },
        "hotelExpectedCommissionCost": {
          "description": "Expected commission cost. The result of multiplying the commission value times the hotel_commission_rate in advertiser currency.",
          "type": "number",
          "format": "double"
        },
        "hotelPriceDifferencePercentage": {
          "description": "The average price difference between the price offered by reporting hotel advertiser and the cheapest price offered by the competing advertiser.",
          "type": "number",
          "format": "double"
        },
        "hotelEligibleImpressions": {
          "description": "The number of impressions that hotel partners could have had given their feed performance.",
          "type": "string",
          "format": "int64"
        },
        "historicalCreativeQualityScore": {
          "description": "The creative historical quality score.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        },
        "historicalLandingPageQualityScore": {
          "description": "The quality of historical landing page experience.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        },
        "historicalQualityScore": {
          "description": "The historical quality score.",
          "type": "string",
          "format": "int64"
        },
        "historicalSearchPredictedCtr": {
          "description": "The historical search predicted click through rate (CTR).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Quality of the creative is below average.",
            "Quality of the creative is average.",
            "Quality of the creative is above average."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BELOW_AVERAGE",
            "AVERAGE",
            "ABOVE_AVERAGE"
          ]
        },
        "gmailForwards": {
          "description": "The number of times the ad was forwarded to someone else as a message.",
          "type": "string",
          "format": "int64"
        },
        "gmailSaves": {
          "description": "The number of times someone has saved your Gmail ad to their inbox as a message.",
          "type": "string",
          "format": "int64"
        },
        "gmailSecondaryClicks": {
          "description": "The number of clicks to the landing page on the expanded state of Gmail ads.",
          "type": "string",
          "format": "int64"
        },
        "impressionsFromStoreReach": {
          "description": "The number of times a store's location-based ad was shown. This metric applies to feed items only.",
          "type": "string",
          "format": "int64"
        },
        "impressions": {
          "description": "Count of how often your ad has appeared on a search results page or website on the Google Network.",
          "type": "string",
          "format": "int64"
        },
        "interactionRate": {
          "description": "How often people interact with your ad after it is shown to them. This is the number of interactions divided by the number of times your ad is shown.",
          "type": "number",
          "format": "double"
        },
        "interactions": {
          "description": "The number of interactions. An interaction is the main user action associated with an ad format-clicks for text and shopping ads, views for video ads, and so on.",
          "type": "string",
          "format": "int64"
        },
        "interactionEventTypes": {
          "description": "The types of payable and free interactions.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Click to site. In most cases, this interaction navigates to an external location, usually the advertiser's landing page. This is also the default InteractionEventType for click events.",
              "The user's expressed intent to engage with the ad in-place.",
              "User viewed a video ad.",
              "The default InteractionEventType for ad conversion events. This is used when an ad conversion row does NOT indicate that the free interactions (for example, the ad conversions) should be 'promoted' and reported as part of the core metrics. These are simply other (ad) conversions."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CLICK",
              "ENGAGEMENT",
              "VIDEO_VIEW",
              "NONE"
            ]
          }
        },
        "invalidClickRate": {
          "description": "The percentage of clicks filtered out of your total number of clicks (filtered + non-filtered clicks) during the reporting period.",
          "type": "number",
          "format": "double"
        },
        "invalidClicks": {
          "description": "Number of clicks Google considers illegitimate and doesn't charge you for.",
          "type": "string",
          "format": "int64"
        },
        "generalInvalidClickRate": {
          "description": "The percentage of clicks that have been filtered out of your total number of clicks (filtered + non-filtered clicks) due to being general invalid clicks. These are clicks Google considers illegitimate that are detected through routine means of filtration (that is, known invalid data-center traffic, bots and spiders or other crawlers, irregular patterns, etc). You're not charged for them, and they don't affect your account statistics. See the help page at https://support.google.com/campaignmanager/answer/6076504 for details.",
          "type": "number",
          "format": "double"
        },
        "generalInvalidClicks": {
          "description": "Number of general invalid clicks. These are a subset of your invalid clicks that are detected through routine means of filtration (such as known invalid data-center traffic, bots and spiders or other crawlers, irregular patterns, etc.). You're not charged for them, and they don't affect your account statistics. See the help page at https://support.google.com/campaignmanager/answer/6076504 for details.",
          "type": "string",
          "format": "int64"
        },
        "messageChats": {
          "description": "Number of message chats initiated for Click To Message impressions that were message tracking eligible.",
          "type": "string",
          "format": "int64"
        },
        "messageImpressions": {
          "description": "Number of Click To Message impressions that were message tracking eligible.",
          "type": "string",
          "format": "int64"
        },
        "messageChatRate": {
          "description": "Number of message chats initiated (message_chats) divided by the number of message impressions (message_impressions). Rate at which a user initiates a message chat from an ad impression with a messaging option and message tracking enabled. Note that this rate can be more than 1.0 for a given message impression.",
          "type": "number",
          "format": "double"
        },
        "mobileFriendlyClicksPercentage": {
          "description": "The percentage of mobile clicks that go to a mobile-friendly page.",
          "type": "number",
          "format": "double"
        },
        "optimizationScoreUplift": {
          "description": "Total optimization score uplift of all recommendations.",
          "type": "number",
          "format": "double"
        },
        "optimizationScoreUrl": {
          "description": "URL for the optimization score page in the Google Ads web interface. This metric can be selected from `customer` or `campaign`, and can be segmented by `segments.recommendation_type`. For example, `SELECT metrics.optimization_score_url, segments.recommendation_type FROM customer` will return a URL for each unique (customer, recommendation_type) combination.",
          "type": "string"
        },
        "organicClicks": {
          "description": "The number of times someone clicked your site's listing in the unpaid results for a particular query. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "string",
          "format": "int64"
        },
        "organicClicksPerQuery": {
          "description": "The number of times someone clicked your site's listing in the unpaid results (organic_clicks) divided by the total number of searches that returned pages from your site (organic_queries). See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "number",
          "format": "double"
        },
        "organicImpressions": {
          "description": "The number of listings for your site in the unpaid search results. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "string",
          "format": "int64"
        },
        "organicImpressionsPerQuery": {
          "description": "The number of times a page from your site was listed in the unpaid search results (organic_impressions) divided by the number of searches returning your site's listing in the unpaid results (organic_queries). See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "number",
          "format": "double"
        },
        "organicQueries": {
          "description": "The total number of searches that returned your site's listing in the unpaid results. See the help page at https://support.google.com/google-ads/answer/3097241 for details.",
          "type": "string",
          "format": "int64"
        },
        "percentNewVisitors": {
          "description": "Percentage of first-time sessions (from people who had never visited your site before). Imported from Google Analytics.",
          "type": "number",
          "format": "double"
        },
        "phoneCalls": {
          "description": "Number of offline phone calls.",
          "type": "string",
          "format": "int64"
        },
        "phoneImpressions": {
          "description": "Number of offline phone impressions.",
          "type": "string",
          "format": "int64"
        },
        "phoneThroughRate": {
          "description": "Number of phone calls received (phone_calls) divided by the number of times your phone number is shown (phone_impressions).",
          "type": "number",
          "format": "double"
        },
        "relativeCtr": {
          "description": "Your clickthrough rate (Ctr) divided by the average clickthrough rate of all advertisers on the websites that show your ads. Measures how your ads perform on Display Network sites compared to other ads on the same sites.",
          "type": "number",
          "format": "double"
        },
        "searchAbsoluteTopImpressionShare": {
          "description": "The percentage of the customer's Shopping or Search ad impressions that are shown in the most prominent Shopping position. See https://support.google.com/google-ads/answer/7501826 for details. Any value below 0.1 is reported as 0.0999.",
          "type": "number",
          "format": "double"
        },
        "searchBudgetLostAbsoluteTopImpressionShare": {
          "description": "The number estimating how often your ad wasn't the very first ad among the top ads in the search results due to a low budget. Note: Search budget lost absolute top impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchBudgetLostImpressionShare": {
          "description": "The estimated percent of times that your ad was eligible to show on the Search Network but didn't because your budget was too low. Note: Search budget lost impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchBudgetLostTopImpressionShare": {
          "description": "The number estimating how often your ad didn't show adjacent to the top organic search results due to a low budget. Note: Search budget lost top impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchClickShare": {
          "description": "The number of clicks you've received on the Search Network divided by the estimated number of clicks you were eligible to receive. Note: Search click share is reported in the range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.",
          "type": "number",
          "format": "double"
        },
        "searchExactMatchImpressionShare": {
          "description": "The impressions you've received divided by the estimated number of impressions you were eligible to receive on the Search Network for search terms that matched your keywords exactly (or were close variants of your keyword), regardless of your keyword match types. Note: Search exact match impression share is reported in the range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.",
          "type": "number",
          "format": "double"
        },
        "searchImpressionShare": {
          "description": "The impressions you've received on the Search Network divided by the estimated number of impressions you were eligible to receive. Note: Search impression share is reported in the range of 0.1 to 1. Any value below 0.1 is reported as 0.0999.",
          "type": "number",
          "format": "double"
        },
        "searchRankLostAbsoluteTopImpressionShare": {
          "description": "The number estimating how often your ad wasn't the very first ad among the top ads in the search results due to poor Ad Rank. Note: Search rank lost absolute top impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchRankLostImpressionShare": {
          "description": "The estimated percentage of impressions on the Search Network that your ads didn't receive due to poor Ad Rank. Note: Search rank lost impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchRankLostTopImpressionShare": {
          "description": "The number estimating how often your ad didn't show adjacent to the top organic search results due to poor Ad Rank. Note: Search rank lost top impression share is reported in the range of 0 to 0.9. Any value above 0.9 is reported as 0.9001.",
          "type": "number",
          "format": "double"
        },
        "searchTopImpressionShare": {
          "description": "The impressions you've received among the top ads compared to the estimated number of impressions you were eligible to receive among the top ads. Note: Search top impression share is reported in the range of 0.1 to 1. Any value below 0.1 is reported as 0.0999. Top ads are generally above the top organic results, although they may show below the top organic results on certain queries.",
          "type": "number",
          "format": "double"
        },
        "searchVolume": {
          "description": "Search volume range for a search term insight category.",
          "$ref": "GoogleAdsGoogleadsV21Common__SearchVolumeRange"
        },
        "speedScore": {
          "description": "A measure of how quickly your page loads after clicks on your mobile ads. The score is a range from 1 to 10, 10 being the fastest.",
          "type": "string",
          "format": "int64"
        },
        "averageTargetCpaMicros": {
          "description": "The average Target CPA, or unset if not available (for example, for campaigns that had traffic from portfolio bidding strategies or non-tCPA).",
          "type": "string",
          "format": "int64"
        },
        "averageTargetRoas": {
          "description": "The average Target ROAS, or unset if not available (for example, for campaigns that had traffic from portfolio bidding strategies or non-tROAS).",
          "type": "number",
          "format": "double"
        },
        "topImpressionPercentage": {
          "description": "The percent of your ad impressions that are shown adjacent to the top organic search results.",
          "type": "number",
          "format": "double"
        },
        "validAcceleratedMobilePagesClicksPercentage": {
          "description": "The percentage of ad clicks to Accelerated Mobile Pages (AMP) landing pages that reach a valid AMP page.",
          "type": "number",
          "format": "double"
        },
        "valuePerAllConversions": {
          "description": "The value of all conversions divided by the number of all conversions.",
          "type": "number",
          "format": "double"
        },
        "valuePerAllConversionsByConversionDate": {
          "description": "The value of all conversions divided by the number of all conversions. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "valuePerConversion": {
          "description": "The value of conversions divided by the number of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "valuePerConversionsByConversionDate": {
          "description": "The value of conversions divided by the number of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions. When this column is selected with date, the values in date column means the conversion date. Details for the by_conversion_date columns are available at https://support.google.com/google-ads/answer/9549009.",
          "type": "number",
          "format": "double"
        },
        "valuePerCurrentModelAttributedConversion": {
          "description": "The value of current model attributed conversions divided by the number of the conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "videoQuartileP100Rate": {
          "description": "Percentage of impressions where the viewer watched all of your video.",
          "type": "number",
          "format": "double"
        },
        "videoQuartileP25Rate": {
          "description": "Percentage of impressions where the viewer watched 25% of your video.",
          "type": "number",
          "format": "double"
        },
        "videoQuartileP50Rate": {
          "description": "Percentage of impressions where the viewer watched 50% of your video.",
          "type": "number",
          "format": "double"
        },
        "videoQuartileP75Rate": {
          "description": "Percentage of impressions where the viewer watched 75% of your video.",
          "type": "number",
          "format": "double"
        },
        "videoViewRate": {
          "description": "The number of views your TrueView video ad receives divided by its number of impressions, including thumbnail impressions for TrueView in-display ads.",
          "type": "number",
          "format": "double"
        },
        "videoViews": {
          "description": "The number of times your video ads were viewed.",
          "type": "string",
          "format": "int64"
        },
        "viewThroughConversions": {
          "description": "The total number of view-through conversions. These happen when a customer sees an image or rich media ad, then later completes a conversion on your site without interacting with (for example, clicking on) another ad.",
          "type": "string",
          "format": "int64"
        },
        "skAdNetworkInstalls": {
          "description": "The number of iOS Store Kit Ad Network conversions.",
          "type": "string",
          "format": "int64"
        },
        "skAdNetworkTotalConversions": {
          "description": "The total number of iOS Store Kit Ad Network conversions.",
          "type": "string",
          "format": "int64"
        },
        "publisherPurchasedClicks": {
          "description": "Clicks from properties not owned by the publisher for which the traffic the publisher has paid for or acquired through incentivized activity",
          "type": "string",
          "format": "int64"
        },
        "publisherOrganicClicks": {
          "description": "Clicks from properties for which the traffic the publisher has not paid for or acquired through incentivized activity",
          "type": "string",
          "format": "int64"
        },
        "publisherUnknownClicks": {
          "description": "Clicks from traffic which is not identified as \"Publisher Purchased\" or \"Publisher Organic\"",
          "type": "string",
          "format": "int64"
        },
        "allConversionsFromLocationAssetClickToCall": {
          "description": "Number of call button clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetDirections": {
          "description": "Number of driving directions clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetMenu": {
          "description": "Number of menu link clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetOrder": {
          "description": "Number of order clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetOtherEngagement": {
          "description": "Number of other types of local action clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetStoreVisits": {
          "description": "Estimated number of visits to the store after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "allConversionsFromLocationAssetWebsite": {
          "description": "Number of website URL clicks on any location surface after a chargeable ad event (click or impression). This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "eligibleImpressionsFromLocationAssetStoreReach": {
          "description": "Number of impressions in which the store location was shown or the location was used for targeting. This measure is coming from Asset based location.",
          "type": "string",
          "format": "int64"
        },
        "viewThroughConversionsFromLocationAssetClickToCall": {
          "description": "Number of call button clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetDirections": {
          "description": "Number of driving directions clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetMenu": {
          "description": "Number of menu link clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetOrder": {
          "description": "Number of order clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetOtherEngagement": {
          "description": "Number of other types of local action clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetStoreVisits": {
          "description": "Estimated number of visits to the store after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "viewThroughConversionsFromLocationAssetWebsite": {
          "description": "Number of website URL clicks on any location surface after an impression. This measure is coming from Asset based location.",
          "type": "number",
          "format": "double"
        },
        "orders": {
          "description": "Orders is the total number of purchase conversions you received attributed to your ads. How it works: You report conversions with cart data for completed purchases on your website. If a conversion is attributed to previous interactions with your ads (clicks for text or Shopping ads, views for video ads etc.) it's counted as an order. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt in an order on your website. Even though they bought 2 products, this would count as 1 order. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "averageOrderValueMicros": {
          "description": "Average order value is the average revenue you made per order attributed to your ads. How it works: You report conversions with cart data for completed purchases on your website. Average order value is the total revenue from your orders divided by the total number of orders. Example: You received 3 orders which made $10, $15 and $20 worth of revenue. The average order value is $15 = ($10 + $15 + $20)/3. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "averageCartSize": {
          "description": "Average cart size is the average number of products in each order attributed to your ads. How it works: You report conversions with cart data for completed purchases on your website. Average cart size is the total number of products sold divided by the total number of orders you received. Example: You received 2 orders, the first included 3 products and the second included 2. The average cart size is 2.5 products = (3+2)/2. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "costOfGoodsSoldMicros": {
          "description": "Cost of goods sold (COGS) is the total cost of the products you sold in orders attributed to your ads. How it works: You can add a cost of goods sold value to every product in Merchant Center. If you report conversions with cart data, the products you sold are matched with their cost of goods sold value and this can be used to calculate the gross profit you made on each order. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat has a cost of goods sold value of $3, the shirt has a cost of goods sold value of $5. The cost of goods sold for this order is $8 = $3 + $5. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "grossProfitMicros": {
          "description": "Gross profit is the profit you made from orders attributed to your ads minus the cost of goods sold (COGS). How it works: Gross profit is the revenue you made from sales attributed to your ads minus cost of goods sold. Gross profit calculations only include products that have a cost of goods sold value in Merchant Center. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt in an order from your website. The hat is priced $10 and the shirt is priced $20. The hat has a cost of goods sold value of $3, but the shirt has no cost of goods sold value. Gross profit for this order will only take into account the hat, so it's $7 = $10 - $3. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "grossProfitMargin": {
          "description": "Gross profit margin is the percentage gross profit you made from orders attributed to your ads, after taking out the cost of goods sold (COGS). How it works: You report conversions with cart data for completed purchases on your website. Gross profit margin is the gross profit you made divided by your total revenue and multiplied by 100%. Gross profit margin calculations only include products that have a cost of goods sold value in Merchant Center. Example: Someone bought a hat and a shirt in an order on your website. The hat is priced $10 and has a cost of goods sold value of $3. The shirt is priced $20 but has no cost of goods sold value. Gross profit margin for this order will only take into account the hat because it has a cost of goods sold value, so it's 70% = ($10 - $3)/$10 x 100%. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "revenueMicros": {
          "description": "Revenue is the total amount you made from orders attributed to your ads. How it works: You report conversions with cart data for completed purchases on your website. Revenue is the total value of all the orders you received attributed to your ads, minus any discount. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt in an order from your website. The hat is priced $10 and the shirt is priced $20. The entire order has a $5 discount. The revenue from this order is $25 = ($10 + $20) - $5. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "unitsSold": {
          "description": "Units sold is the total number of products sold from orders attributed to your ads. How it works: You report conversions with cart data for completed purchases on your website. Units sold is the total number of products sold from all orders attributed to your ads. Example: Someone clicked on a Shopping ad for a hat then bought the same hat, a shirt and a jacket. The units sold in this order is 3. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "crossSellCostOfGoodsSoldMicros": {
          "description": "Cross-sell cost of goods sold (COGS) is the total cost of products sold as a result of advertising a different product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If these products don't match then this is considered cross-sell. Cross-sell cost of goods sold is the total cost of the products sold that weren't advertised. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat has a cost of goods sold value of $3, the shirt has a cost of goods sold value of $5. The cross-sell cost of goods sold for this order is $5. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "crossSellGrossProfitMicros": {
          "description": "Cross-sell gross profit is the profit you made from products sold as a result of advertising a different product, minus cost of goods sold (COGS). How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the purchase is a sold product. If these products don't match then this is considered cross-sell. Cross-sell gross profit is the revenue you made from cross-sell attributed to your ads minus the cost of the goods sold. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The shirt is priced $20 and has a cost of goods sold value of $5. The cross-sell gross profit of this order is $15 = $20 - $5. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "crossSellRevenueMicros": {
          "description": "Cross-sell revenue is the total amount you made from products sold as a result of advertising a different product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If these products don't match then this is considered cross-sell. Cross-sell revenue is the total value you made from cross-sell attributed to your ads. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat is priced $10 and the shirt is priced $20. The cross-sell revenue of this order is $20. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "crossSellUnitsSold": {
          "description": "Cross-sell units sold is the total number of products sold as a result of advertising a different product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If these products don't match then this is considered cross-sell. Cross-sell units sold is the total number of cross-sold products from all orders attributed to your ads. Example: Someone clicked on a Shopping ad for a hat then bought the same hat, a shirt and a jacket. The cross-sell units sold in this order is 2. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "leadCostOfGoodsSoldMicros": {
          "description": "Lead cost of goods sold (COGS) is the total cost of products sold as a result of advertising the same product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If the advertised and sold products match, then the cost of these goods is counted under lead cost of goods sold. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat has a cost of goods sold value of $3, the shirt has a cost of goods sold value of $5. The lead cost of goods sold for this order is $3. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "leadGrossProfitMicros": {
          "description": "Lead gross profit is the profit you made from products sold as a result of advertising the same product, minus cost of goods sold (COGS). How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If the advertised and sold products match, then the revenue you made from these sales minus the cost of goods sold is your lead gross profit. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat is priced $10 and has a cost of goods sold value of $3. The lead gross profit of this order is $7 = $10 - $3. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "leadRevenueMicros": {
          "description": "Lead revenue is the total amount you made from products sold as a result of advertising the same product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If the advertised and sold products match, then the total value you made from the sales of these products is shown under lead revenue. Example: Someone clicked on a Shopping ad for a hat then bought the same hat and a shirt. The hat is priced $10 and the shirt is priced $20. The lead revenue of this order is $10. This metric is only available if you report conversions with cart data.",
          "type": "string",
          "format": "int64"
        },
        "leadUnitsSold": {
          "description": "Lead units sold is the total number of products sold as a result of advertising the same product. How it works: You report conversions with cart data for completed purchases on your website. If the ad that was interacted with before the purchase has an associated product (see Shopping Ads) then this product is considered the advertised product. Any product included in the order the customer places is a sold product. If the advertised and sold products match, then the total number of these products sold is shown under lead units sold. Example: Someone clicked on a Shopping ad for a hat then bought the same hat, a shirt and a jacket. The lead units sold in this order is 1. This metric is only available if you report conversions with cart data.",
          "type": "number",
          "format": "double"
        },
        "uniqueUsers": {
          "description": "The number of unique users who saw your ad during the requested time period. This metric cannot be aggregated, and can only be requested for date ranges of 92 days or less. This metric is available for following campaign types - Display, Video, Discovery and App.",
          "type": "string",
          "format": "int64"
        },
        "averageImpressionFrequencyPerUser": {
          "description": "The average number of times a unique user saw your ad during the requested time period. This metric cannot be aggregated, and can only be requested for date ranges of 92 days or less. This metric is available for following campaign types - Display, Video, Discovery and App.",
          "type": "number",
          "format": "double"
        },
        "linkedEntitiesCount": {
          "description": "Number of linked resources in which the asset is used. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "string",
          "format": "int64"
        },
        "linkedSampleEntities": {
          "description": "A list of up to 20 sample linked resources in which the asset is used. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sampleBestPerformanceEntities": {
          "description": "A list of up to 20 sample linked resources with impressions in the last 30 days where the asset had the AssetPerformanceLabel.BEST performance label. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sampleGoodPerformanceEntities": {
          "description": "A list of up to 20 sample linked resources with impressions in the last 30 days where the asset had the AssetPerformanceLabel.GOOD performance label. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sampleLowPerformanceEntities": {
          "description": "A list of up to 20 sample linked resources with impressions in the last 30 days where the asset had the AssetPerformanceLabel.LOW performance label. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sampleLearningPerformanceEntities": {
          "description": "A list of up to 20 sample linked resources with impressions in the last 30 days where the asset had the AssetPerformanceLabel.LEARNING performance label. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sampleUnratedPerformanceEntities": {
          "description": "A list of up to 20 sample linked resources with impressions in the last 30 days where the assets had AssetPerformanceLabel performance label other than BEST, GOOD, LOW, and LEARNING. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "assetPinnedTotalCount": {
          "description": "Number of total usages in which the asset is pinned. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetPinnedAsHeadlinePositionOneCount": {
          "description": "Number of entities in which the asset is pinned to headline 1. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetPinnedAsHeadlinePositionTwoCount": {
          "description": "Number of entities in which the asset is pinned to headline 2. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetPinnedAsHeadlinePositionThreeCount": {
          "description": "Number of entities in which the asset is pinned to headline 3. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetPinnedAsDescriptionPositionOneCount": {
          "description": "Number of entities in which the asset is pinned to description 1. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetPinnedAsDescriptionPositionTwoCount": {
          "description": "Number of entities in which the asset is pinned to description 2. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "string",
          "format": "int64"
        },
        "assetBestPerformanceImpressionPercentage": {
          "description": "Percentage of impressions the asset received in ads with AssetPerformanceLabel.BEST. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "number",
          "format": "double"
        },
        "assetGoodPerformanceImpressionPercentage": {
          "description": "Percentage of impressions the asset received in ads with AssetPerformanceLabel.GOOD. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "number",
          "format": "double"
        },
        "assetLowPerformanceImpressionPercentage": {
          "description": "Percentage of impressions the asset received in ads with AssetPerformanceLabel.LOW. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "number",
          "format": "double"
        },
        "assetLearningPerformanceImpressionPercentage": {
          "description": "Percentage of impressions the asset received in ads with AssetPerformanceLabel.LEARNING. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "number",
          "format": "double"
        },
        "assetUnratedPerformanceImpressionPercentage": {
          "description": "Percentage of impressions the asset received in ads with AssetPerformanceLabel other than BEST, GOOD, LOW, and LEARNING. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Search channel.",
          "type": "number",
          "format": "double"
        },
        "assetBestPerformanceCostPercentage": {
          "description": "Percentage of cost the asset received in ads with AssetPerformanceLabel.BEST. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Performance Max channel.",
          "type": "number",
          "format": "double"
        },
        "assetGoodPerformanceCostPercentage": {
          "description": "Percentage of cost the asset received in ads with AssetPerformanceLabel.GOOD. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Performance Max channel.",
          "type": "number",
          "format": "double"
        },
        "assetLowPerformanceCostPercentage": {
          "description": "Percentage of cost the asset received in ads with AssetPerformanceLabel.LOW. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Performance Max channel.",
          "type": "number",
          "format": "double"
        },
        "assetLearningPerformanceCostPercentage": {
          "description": "Percentage of cost the asset received in ads with AssetPerformanceLabel.LEARNING. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Performance Max channel.",
          "type": "number",
          "format": "double"
        },
        "assetUnratedPerformanceCostPercentage": {
          "description": "Percentage of cost the asset received in ads with AssetPerformanceLabel other than BEST, GOOD, LOW, and LEARNING. This metric can only be selected with ChannelAggregateAssetView and CampaignAggregateAssetView. This metric is only supported in Performance Max channel.",
          "type": "number",
          "format": "double"
        },
        "storeVisitsLastClickModelAttributedConversions": {
          "description": "The amount of store visits attributed by the last click model.",
          "type": "number",
          "format": "double"
        },
        "resultsConversionsPurchase": {
          "description": "The purchase conversion stats for the unified goals results.",
          "type": "number",
          "format": "double"
        },
        "videoViewRateInFeed": {
          "description": "The number of video views divided by number of impressions that can potentially lead to video views for in-feed formats.",
          "type": "number",
          "format": "double"
        },
        "videoViewRateInStream": {
          "description": "The number of video views divided by number of impressions that can potentially lead to video views for in-stream formats.",
          "type": "number",
          "format": "double"
        },
        "videoViewRateShorts": {
          "description": "The number of video views divided by number of impressions that can potentially lead to video views for in shorts formats.",
          "type": "number",
          "format": "double"
        },
        "coviewedImpressions": {
          "description": "All co-viewed impressions represent the total number of people who saw your ad. This includes people who are signed into their Google Account, as well as other people who are watching the same ad on a connected TV. This metric is only available for the Campaign resource with adjusted_age_range and adjusted_gender segments. These segmentations are mandatory to get the all coviewed impressions.",
          "type": "string",
          "format": "int64"
        },
        "primaryImpressions": {
          "description": "Primary impression is counted each time your ad is served. This metric is only available for the Campaign resource with adjusted_age_range and adjusted_gender segments. These segmentations are mandatory to get the primary impressions.",
          "type": "string",
          "format": "int64"
        },
        "platformComparableConversionsFromInteractionsRate": {
          "description": "Platform comparable conversions from interactions divided by the number of ad interactions (such as clicks for text ads or views for video ads). This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversions": {
          "description": "The number of platform comparable conversions. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversionsValue": {
          "description": "The value of platform comparable conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversionsValuePerCost": {
          "description": "The value of conversions divided by the cost of ad interactions. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversionsByConversionDate": {
          "description": "The number of platform comparable conversions. When this metric is segmented by date, the values in the date segment represent the conversion date. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversionsValueByConversionDate": {
          "description": "The value of platform comparable conversions. When this metric is segmented by date, the values in the date segment represent the conversion date. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "platformComparableConversionsFromInteractionsValuePerInteraction": {
          "description": "The value of platform comparable conversions from interactions divided by the number of ad interactions. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "costPerPlatformComparableConversion": {
          "description": "The cost of ad interactions divided by the number of platform comparable conversions. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "valuePerPlatformComparableConversion": {
          "description": "The value of platform comparable conversions divided by the number of platform comparable conversions. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "valuePerPlatformComparableConversionsByConversionDate": {
          "description": "The value of platform comparable conversions divided by the number of platform comparable conversions. When this metric is segmented by date, the values in the date segment represent the conversion date. This only includes conversion actions for which include_in_conversions_metric attribute is set to true. If you use conversion-based bidding, your bid strategies will optimize for these conversions.",
          "type": "number",
          "format": "double"
        },
        "costConvertedCurrencyPerPlatformComparableConversion": {
          "description": "The cost of the platform comparable conversion in the currency of the authorized customer.",
          "type": "number",
          "format": "double"
        },
        "valueAdjustment": {
          "description": "The conversion value rule adjustment from biddable conversions in all conversion categories.",
          "type": "number",
          "format": "double"
        },
        "allValueAdjustment": {
          "description": "The conversion value rule adjustment from all conversions in all conversion categories.",
          "type": "number",
          "format": "double"
        },
        "clicksUniqueQueryClusters": {
          "description": "Unique query intent cluster count for clicks.",
          "type": "string",
          "format": "int64"
        },
        "conversionsUniqueQueryClusters": {
          "description": "Unique query intent cluster count for conversions.",
          "type": "string",
          "format": "int64"
        },
        "impressionsUniqueQueryClusters": {
          "description": "Unique query intent cluster count for impressions.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SearchVolumeRange": {
      "id": "GoogleAdsGoogleadsV21Common__SearchVolumeRange",
      "description": "Search volume range. Actual search volume falls within this range.",
      "type": "object",
      "properties": {
        "min": {
          "description": "Lower bound of search volume.",
          "type": "string",
          "format": "int64"
        },
        "max": {
          "description": "Upper bound of search volume.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Segments": {
      "id": "GoogleAdsGoogleadsV21Common__Segments",
      "description": "Segment only fields.",
      "type": "object",
      "properties": {
        "activityAccountId": {
          "description": "Activity account ID.",
          "type": "string",
          "format": "int64"
        },
        "activityCity": {
          "description": "The city where the travel activity is available.",
          "type": "string"
        },
        "activityCountry": {
          "description": "The country where the travel activity is available.",
          "type": "string"
        },
        "activityRating": {
          "description": "Activity rating.",
          "type": "string",
          "format": "int64"
        },
        "activityState": {
          "description": "The state where the travel activity is available.",
          "type": "string"
        },
        "externalActivityId": {
          "description": "Advertiser supplied activity ID.",
          "type": "string"
        },
        "adDestinationType": {
          "description": "Ad Destination type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Ads that don't intend to drive users off from ads to other destinations",
            "Website",
            "App Deep Link",
            "iOS App Store or Play Store",
            "Call Dialer",
            "Map App",
            "Location Dedicated Page",
            "Text Message",
            "Lead Generation Form",
            "YouTube",
            "Ad Destination for Conversions with keys unknown"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_APPLICABLE",
            "WEBSITE",
            "APP_DEEP_LINK",
            "APP_STORE",
            "PHONE_CALL",
            "MAP_DIRECTIONS",
            "LOCATION_LISTING",
            "MESSAGE",
            "LEAD_FORM",
            "YOUTUBE",
            "UNMODELED_FOR_CONVERSIONS"
          ]
        },
        "adFormatType": {
          "description": "Ad Format type.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Value assigned to formats (such as experimental formats) which don't support format segmentation in Video and Demand Gen campaigns. Note that these formats may change categories in the future, for example if an experimental format is exposed or a new format is added. We strongly recommend to not rely on this field for long term decisions.",
            "Value assigned for Video TrueView for Action campaigns statistics. Note that statistics with this value may change categories in the future, for example if format segmentation support is added for new campaign types. We strongly recommend to not rely on this field for long term decisions.",
            "Skippable in-stream ads.",
            "Non-skippable in-stream ads.",
            "In-feed YouTube or image ads served on feed surfaces (e.g. Discover Feed, YouTube Home, etc.).",
            "Short (\u003c7 secs) in-stream non-skippable YouTube ads.",
            "Outstream ads.",
            "Masthead ads.",
            "Audio ads.",
            "Vertical full-screen video or image ads served on YouTube Shorts or BrandConnect ads served as organic YouTube Shorts.",
            "Image ads served when a user pauses an organic YouTube video on a TV screen. These ads are displayed directly next to the static video frame on the pause screen itself. Note that this does not include Demand Gen image ads served on the ad panel below or on top of a paused organic video. Those are reported under INFEED."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OTHER",
            "UNSEGMENTED",
            "INSTREAM_SKIPPABLE",
            "INSTREAM_NON_SKIPPABLE",
            "INFEED",
            "BUMPER",
            "OUTSTREAM",
            "MASTHEAD",
            "AUDIO",
            "SHORTS",
            "PAUSE"
          ]
        },
        "adNetworkType": {
          "description": "Ad network type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google search.",
            "Search partners.",
            "Display Network.",
            "Cross-network.",
            "YouTube",
            "Google TV",
            "This network is used for Google Owned channels such as Discover feed, Gmail, YouTube. Starting with V20, Demand Gen Stats will be attributed to more granular network types such as GMAIL, DISCOVER, MAPS, YOUTUBE; this value will only be used for historical data.",
            "Gmail",
            "Discover Feed",
            "Maps"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "SEARCH_PARTNERS",
            "CONTENT",
            "MIXED",
            "YOUTUBE",
            "GOOGLE_TV",
            "GOOGLE_OWNED_CHANNELS",
            "GMAIL",
            "DISCOVER",
            "MAPS"
          ]
        },
        "adGroup": {
          "description": "Resource name of the ad group.",
          "type": "string"
        },
        "assetGroup": {
          "description": "Resource name of the asset group.",
          "type": "string"
        },
        "auctionInsightDomain": {
          "description": "Domain (visible URL) of a participant in the Auction Insights report.",
          "type": "string"
        },
        "budgetCampaignAssociationStatus": {
          "description": "Budget campaign association status.",
          "$ref": "GoogleAdsGoogleadsV21Common__BudgetCampaignAssociationStatus"
        },
        "campaign": {
          "description": "Resource name of the campaign.",
          "type": "string"
        },
        "clickType": {
          "description": "Click type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "App engagement ad deep link.",
            "Breadcrumbs.",
            "Broadband Plan.",
            "Manually dialed phone calls.",
            "Phone calls.",
            "Click on engagement ad.",
            "Driving direction.",
            "Get location details.",
            "Call.",
            "Directions.",
            "Image(s).",
            "Go to landing page.",
            "Map.",
            "Go to store info.",
            "Text.",
            "Mobile phone calls.",
            "Print offer.",
            "Other.",
            "Product plusbox offer.",
            "Shopping - Product - Online.",
            "Sitelink.",
            "Show nearby locations.",
            "Headline.",
            "App store.",
            "Call-to-Action overlay.",
            "Cards.",
            "End cap.",
            "Website.",
            "Visual Sitelinks.",
            "Wireless Plan.",
            "Shopping - Product - Local.",
            "Shopping - Product - MultiChannel Local.",
            "Shopping - Product - MultiChannel Online.",
            "Shopping - Product - Coupon.",
            "Shopping - Product - Sell on Google.",
            "Shopping - Product - App engagement ad deep link.",
            "Shopping - Showcase - Category.",
            "Shopping - Showcase - Local storefront.",
            "Shopping - Showcase - Online product.",
            "Shopping - Showcase - Local product.",
            "Promotion Extension.",
            "Ad Headline.",
            "Swipes.",
            "See More.",
            "Sitelink 1.",
            "Sitelink 2.",
            "Sitelink 3.",
            "Sitelink 4.",
            "Sitelink 5.",
            "Hotel price.",
            "Price Extension.",
            "Book on Google hotel room selection.",
            "Shopping - Comparison Listing.",
            "Cross-network. From Performance Max and Discovery Campaigns.",
            "AD Images.",
            "Travel Feed Assets.",
            "Vehicle Feed Assets.",
            "Product Feed Assets.",
            "Click on channel icon that navigates the user to the corresponding YouTube channel.",
            "Click on a related video that navigates the user to the video watch page."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APP_DEEPLINK",
            "BREADCRUMBS",
            "BROADBAND_PLAN",
            "CALL_TRACKING",
            "CALLS",
            "CLICK_ON_ENGAGEMENT_AD",
            "GET_DIRECTIONS",
            "LOCATION_EXPANSION",
            "LOCATION_FORMAT_CALL",
            "LOCATION_FORMAT_DIRECTIONS",
            "LOCATION_FORMAT_IMAGE",
            "LOCATION_FORMAT_LANDING_PAGE",
            "LOCATION_FORMAT_MAP",
            "LOCATION_FORMAT_STORE_INFO",
            "LOCATION_FORMAT_TEXT",
            "MOBILE_CALL_TRACKING",
            "OFFER_PRINTS",
            "OTHER",
            "PRODUCT_EXTENSION_CLICKS",
            "PRODUCT_LISTING_AD_CLICKS",
            "SITELINKS",
            "STORE_LOCATOR",
            "URL_CLICKS",
            "VIDEO_APP_STORE_CLICKS",
            "VIDEO_CALL_TO_ACTION_CLICKS",
            "VIDEO_CARD_ACTION_HEADLINE_CLICKS",
            "VIDEO_END_CAP_CLICKS",
            "VIDEO_WEBSITE_CLICKS",
            "VISUAL_SITELINKS",
            "WIRELESS_PLAN",
            "PRODUCT_LISTING_AD_LOCAL",
            "PRODUCT_LISTING_AD_MULTICHANNEL_LOCAL",
            "PRODUCT_LISTING_AD_MULTICHANNEL_ONLINE",
            "PRODUCT_LISTING_ADS_COUPON",
            "PRODUCT_LISTING_AD_TRANSACTABLE",
            "PRODUCT_AD_APP_DEEPLINK",
            "SHOWCASE_AD_CATEGORY_LINK",
            "SHOWCASE_AD_LOCAL_STOREFRONT_LINK",
            "SHOWCASE_AD_ONLINE_PRODUCT_LINK",
            "SHOWCASE_AD_LOCAL_PRODUCT_LINK",
            "PROMOTION_EXTENSION",
            "SWIPEABLE_GALLERY_AD_HEADLINE",
            "SWIPEABLE_GALLERY_AD_SWIPES",
            "SWIPEABLE_GALLERY_AD_SEE_MORE",
            "SWIPEABLE_GALLERY_AD_SITELINK_ONE",
            "SWIPEABLE_GALLERY_AD_SITELINK_TWO",
            "SWIPEABLE_GALLERY_AD_SITELINK_THREE",
            "SWIPEABLE_GALLERY_AD_SITELINK_FOUR",
            "SWIPEABLE_GALLERY_AD_SITELINK_FIVE",
            "HOTEL_PRICE",
            "PRICE_EXTENSION",
            "HOTEL_BOOK_ON_GOOGLE_ROOM_SELECTION",
            "SHOPPING_COMPARISON_LISTING",
            "CROSS_NETWORK",
            "AD_IMAGE",
            "TRAVEL_ASSETS",
            "VEHICLE_ASSETS",
            "PRODUCT_ASSETS",
            "VIDEO_CHANNEL_CLICK",
            "VIDEO_RELATED_VIDEOS_CLICK"
          ]
        },
        "conversionAction": {
          "description": "Resource name of the conversion action.",
          "type": "string"
        },
        "conversionActionCategory": {
          "description": "Conversion action category.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Default category.",
            "User visiting a page.",
            "Purchase, sales, or \"order placed\" event.",
            "Signup user action.",
            "Software download action (as for an app).",
            "The addition of items to a shopping cart or bag on an advertiser site.",
            "When someone enters the checkout flow on an advertiser site.",
            "The start of a paid subscription for a product or service.",
            "A call to indicate interest in an advertiser's offering.",
            "A lead conversion imported from an external source into Google Ads.",
            "A submission of a form on an advertiser site indicating business interest.",
            "A booking of an appointment with an advertiser's business.",
            "A quote or price estimate request.",
            "A search for an advertiser's business location with intention to visit.",
            "A click to an advertiser's partner's site.",
            "A call, SMS, email, chat or other type of contact to an advertiser.",
            "A website engagement event such as long site time or a Google Analytics (GA) Smart Goal. Intended to be used for GA, Firebase, GA Gold goal imports.",
            "A visit to a physical store location.",
            "A sale occurring in a physical store.",
            "A lead conversion imported from an external source into Google Ads, that has been further qualified by the advertiser (marketing/sales team). In the lead-to-sale journey, advertisers get leads, then act on them by reaching out to the consumer. If the consumer is interested and may end up buying their product, the advertiser marks such leads as \"qualified leads\".",
            "A lead conversion imported from an external source into Google Ads, that has further completed a chosen stage as defined by the lead gen advertiser."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT",
            "PAGE_VIEW",
            "PURCHASE",
            "SIGNUP",
            "DOWNLOAD",
            "ADD_TO_CART",
            "BEGIN_CHECKOUT",
            "SUBSCRIBE_PAID",
            "PHONE_CALL_LEAD",
            "IMPORTED_LEAD",
            "SUBMIT_LEAD_FORM",
            "BOOK_APPOINTMENT",
            "REQUEST_QUOTE",
            "GET_DIRECTIONS",
            "OUTBOUND_CLICK",
            "CONTACT",
            "ENGAGEMENT",
            "STORE_VISIT",
            "STORE_SALE",
            "QUALIFIED_LEAD",
            "CONVERTED_LEAD"
          ]
        },
        "conversionActionName": {
          "description": "Conversion action name.",
          "type": "string"
        },
        "conversionAdjustment": {
          "description": "This segments your conversion columns by the original conversion and conversion value versus the delta if conversions were adjusted. False row has the data as originally stated; While true row has the delta between data now and the data as originally stated. Summing the two together results post-adjustment data.",
          "type": "boolean"
        },
        "conversionAttributionEventType": {
          "description": "Conversion attribution event type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represents value unknown in this version.",
            "The conversion is attributed to an impression.",
            "The conversion is attributed to an interaction.",
            "The conversion is attributed to a 10s engaged view."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "IMPRESSION",
            "INTERACTION",
            "ENGAGED_VIEW"
          ]
        },
        "conversionLagBucket": {
          "description": "An enum value representing the number of days between the impression and the conversion.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversion lag bucket from 0 to 1 day. 0 day is included, 1 day is not.",
            "Conversion lag bucket from 1 to 2 days. 1 day is included, 2 days is not.",
            "Conversion lag bucket from 2 to 3 days. 2 days is included, 3 days is not.",
            "Conversion lag bucket from 3 to 4 days. 3 days is included, 4 days is not.",
            "Conversion lag bucket from 4 to 5 days. 4 days is included, 5 days is not.",
            "Conversion lag bucket from 5 to 6 days. 5 days is included, 6 days is not.",
            "Conversion lag bucket from 6 to 7 days. 6 days is included, 7 days is not.",
            "Conversion lag bucket from 7 to 8 days. 7 days is included, 8 days is not.",
            "Conversion lag bucket from 8 to 9 days. 8 days is included, 9 days is not.",
            "Conversion lag bucket from 9 to 10 days. 9 days is included, 10 days is not.",
            "Conversion lag bucket from 10 to 11 days. 10 days is included, 11 days is not.",
            "Conversion lag bucket from 11 to 12 days. 11 days is included, 12 days is not.",
            "Conversion lag bucket from 12 to 13 days. 12 days is included, 13 days is not.",
            "Conversion lag bucket from 13 to 14 days. 13 days is included, 14 days is not.",
            "Conversion lag bucket from 14 to 21 days. 14 days is included, 21 days is not.",
            "Conversion lag bucket from 21 to 30 days. 21 days is included, 30 days is not.",
            "Conversion lag bucket from 30 to 45 days. 30 days is included, 45 days is not.",
            "Conversion lag bucket from 45 to 60 days. 45 days is included, 60 days is not.",
            "Conversion lag bucket from 60 to 90 days. 60 days is included, 90 days is not."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LESS_THAN_ONE_DAY",
            "ONE_TO_TWO_DAYS",
            "TWO_TO_THREE_DAYS",
            "THREE_TO_FOUR_DAYS",
            "FOUR_TO_FIVE_DAYS",
            "FIVE_TO_SIX_DAYS",
            "SIX_TO_SEVEN_DAYS",
            "SEVEN_TO_EIGHT_DAYS",
            "EIGHT_TO_NINE_DAYS",
            "NINE_TO_TEN_DAYS",
            "TEN_TO_ELEVEN_DAYS",
            "ELEVEN_TO_TWELVE_DAYS",
            "TWELVE_TO_THIRTEEN_DAYS",
            "THIRTEEN_TO_FOURTEEN_DAYS",
            "FOURTEEN_TO_TWENTY_ONE_DAYS",
            "TWENTY_ONE_TO_THIRTY_DAYS",
            "THIRTY_TO_FORTY_FIVE_DAYS",
            "FORTY_FIVE_TO_SIXTY_DAYS",
            "SIXTY_TO_NINETY_DAYS"
          ]
        },
        "conversionOrAdjustmentLagBucket": {
          "description": "An enum value representing the number of days between the impression and the conversion or between the impression and adjustments to the conversion.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Conversion lag bucket from 0 to 1 day. 0 day is included, 1 day is not.",
            "Conversion lag bucket from 1 to 2 days. 1 day is included, 2 days is not.",
            "Conversion lag bucket from 2 to 3 days. 2 days is included, 3 days is not.",
            "Conversion lag bucket from 3 to 4 days. 3 days is included, 4 days is not.",
            "Conversion lag bucket from 4 to 5 days. 4 days is included, 5 days is not.",
            "Conversion lag bucket from 5 to 6 days. 5 days is included, 6 days is not.",
            "Conversion lag bucket from 6 to 7 days. 6 days is included, 7 days is not.",
            "Conversion lag bucket from 7 to 8 days. 7 days is included, 8 days is not.",
            "Conversion lag bucket from 8 to 9 days. 8 days is included, 9 days is not.",
            "Conversion lag bucket from 9 to 10 days. 9 days is included, 10 days is not.",
            "Conversion lag bucket from 10 to 11 days. 10 days is included, 11 days is not.",
            "Conversion lag bucket from 11 to 12 days. 11 days is included, 12 days is not.",
            "Conversion lag bucket from 12 to 13 days. 12 days is included, 13 days is not.",
            "Conversion lag bucket from 13 to 14 days. 13 days is included, 14 days is not.",
            "Conversion lag bucket from 14 to 21 days. 14 days is included, 21 days is not.",
            "Conversion lag bucket from 21 to 30 days. 21 days is included, 30 days is not.",
            "Conversion lag bucket from 30 to 45 days. 30 days is included, 45 days is not.",
            "Conversion lag bucket from 45 to 60 days. 45 days is included, 60 days is not.",
            "Conversion lag bucket from 60 to 90 days. 60 days is included, 90 days is not.",
            "Conversion adjustment lag bucket from 0 to 1 day. 0 day is included, 1 day is not.",
            "Conversion adjustment lag bucket from 1 to 2 days. 1 day is included, 2 days is not.",
            "Conversion adjustment lag bucket from 2 to 3 days. 2 days is included, 3 days is not.",
            "Conversion adjustment lag bucket from 3 to 4 days. 3 days is included, 4 days is not.",
            "Conversion adjustment lag bucket from 4 to 5 days. 4 days is included, 5 days is not.",
            "Conversion adjustment lag bucket from 5 to 6 days. 5 days is included, 6 days is not.",
            "Conversion adjustment lag bucket from 6 to 7 days. 6 days is included, 7 days is not.",
            "Conversion adjustment lag bucket from 7 to 8 days. 7 days is included, 8 days is not.",
            "Conversion adjustment lag bucket from 8 to 9 days. 8 days is included, 9 days is not.",
            "Conversion adjustment lag bucket from 9 to 10 days. 9 days is included, 10 days is not.",
            "Conversion adjustment lag bucket from 10 to 11 days. 10 days is included, 11 days is not.",
            "Conversion adjustment lag bucket from 11 to 12 days. 11 days is included, 12 days is not.",
            "Conversion adjustment lag bucket from 12 to 13 days. 12 days is included, 13 days is not.",
            "Conversion adjustment lag bucket from 13 to 14 days. 13 days is included, 14 days is not.",
            "Conversion adjustment lag bucket from 14 to 21 days. 14 days is included, 21 days is not.",
            "Conversion adjustment lag bucket from 21 to 30 days. 21 days is included, 30 days is not.",
            "Conversion adjustment lag bucket from 30 to 45 days. 30 days is included, 45 days is not.",
            "Conversion adjustment lag bucket from 45 to 60 days. 45 days is included, 60 days is not.",
            "Conversion adjustment lag bucket from 60 to 90 days. 60 days is included, 90 days is not.",
            "Conversion adjustment lag bucket from 90 to 145 days. 90 days is included, 145 days is not.",
            "Conversion lag bucket UNKNOWN. This is for dates before conversion lag bucket was available in Google Ads.",
            "Conversion adjustment lag bucket UNKNOWN. This is for dates before conversion adjustment lag bucket was available in Google Ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONVERSION_LESS_THAN_ONE_DAY",
            "CONVERSION_ONE_TO_TWO_DAYS",
            "CONVERSION_TWO_TO_THREE_DAYS",
            "CONVERSION_THREE_TO_FOUR_DAYS",
            "CONVERSION_FOUR_TO_FIVE_DAYS",
            "CONVERSION_FIVE_TO_SIX_DAYS",
            "CONVERSION_SIX_TO_SEVEN_DAYS",
            "CONVERSION_SEVEN_TO_EIGHT_DAYS",
            "CONVERSION_EIGHT_TO_NINE_DAYS",
            "CONVERSION_NINE_TO_TEN_DAYS",
            "CONVERSION_TEN_TO_ELEVEN_DAYS",
            "CONVERSION_ELEVEN_TO_TWELVE_DAYS",
            "CONVERSION_TWELVE_TO_THIRTEEN_DAYS",
            "CONVERSION_THIRTEEN_TO_FOURTEEN_DAYS",
            "CONVERSION_FOURTEEN_TO_TWENTY_ONE_DAYS",
            "CONVERSION_TWENTY_ONE_TO_THIRTY_DAYS",
            "CONVERSION_THIRTY_TO_FORTY_FIVE_DAYS",
            "CONVERSION_FORTY_FIVE_TO_SIXTY_DAYS",
            "CONVERSION_SIXTY_TO_NINETY_DAYS",
            "ADJUSTMENT_LESS_THAN_ONE_DAY",
            "ADJUSTMENT_ONE_TO_TWO_DAYS",
            "ADJUSTMENT_TWO_TO_THREE_DAYS",
            "ADJUSTMENT_THREE_TO_FOUR_DAYS",
            "ADJUSTMENT_FOUR_TO_FIVE_DAYS",
            "ADJUSTMENT_FIVE_TO_SIX_DAYS",
            "ADJUSTMENT_SIX_TO_SEVEN_DAYS",
            "ADJUSTMENT_SEVEN_TO_EIGHT_DAYS",
            "ADJUSTMENT_EIGHT_TO_NINE_DAYS",
            "ADJUSTMENT_NINE_TO_TEN_DAYS",
            "ADJUSTMENT_TEN_TO_ELEVEN_DAYS",
            "ADJUSTMENT_ELEVEN_TO_TWELVE_DAYS",
            "ADJUSTMENT_TWELVE_TO_THIRTEEN_DAYS",
            "ADJUSTMENT_THIRTEEN_TO_FOURTEEN_DAYS",
            "ADJUSTMENT_FOURTEEN_TO_TWENTY_ONE_DAYS",
            "ADJUSTMENT_TWENTY_ONE_TO_THIRTY_DAYS",
            "ADJUSTMENT_THIRTY_TO_FORTY_FIVE_DAYS",
            "ADJUSTMENT_FORTY_FIVE_TO_SIXTY_DAYS",
            "ADJUSTMENT_SIXTY_TO_NINETY_DAYS",
            "ADJUSTMENT_NINETY_TO_ONE_HUNDRED_AND_FORTY_FIVE_DAYS",
            "CONVERSION_UNKNOWN",
            "ADJUSTMENT_UNKNOWN"
          ]
        },
        "date": {
          "description": "Date to which metrics apply. yyyy-MM-dd format, for example, 2018-04-17.",
          "type": "string"
        },
        "dayOfWeek": {
          "description": "Day of the week, for example, MONDAY.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Monday.",
            "Tuesday.",
            "Wednesday.",
            "Thursday.",
            "Friday.",
            "Saturday.",
            "Sunday."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        },
        "device": {
          "description": "Device to which metrics apply.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Mobile devices with full browsers.",
            "Tablets with full browsers.",
            "Computers.",
            "Smart TVs and game consoles.",
            "Other device types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MOBILE",
            "TABLET",
            "DESKTOP",
            "CONNECTED_TV",
            "OTHER"
          ]
        },
        "externalConversionSource": {
          "description": "External conversion source.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represents value unknown in this version.",
            "Conversion that occurs when a user navigates to a particular webpage after viewing an ad; Displayed in Google Ads UI as 'Website'.",
            "Conversion that comes from linked Google Analytics goal or transaction; Displayed in Google Ads UI as 'Analytics'.",
            "Website conversion that is uploaded through ConversionUploadService; Displayed in Google Ads UI as 'Import from clicks'.",
            "Conversion that occurs when a user clicks on a call extension directly on an ad; Displayed in Google Ads UI as 'Calls from ads'.",
            "Conversion that occurs when a user calls a dynamically-generated phone number (by installed javascript) from an advertiser's website after clicking on an ad; Displayed in Google Ads UI as 'Calls from website'.",
            "Conversion that occurs when a user visits an advertiser's retail store after clicking on a Google ad; Displayed in Google Ads UI as 'Store visits'.",
            "Conversion that occurs when a user takes an in-app action such as a purchase in an Android app; Displayed in Google Ads UI as 'Android in-app action'.",
            "Conversion that occurs when a user takes an in-app action such as a purchase in an iOS app; Displayed in Google Ads UI as 'iOS in-app action'.",
            "Conversion that occurs when a user opens an iOS app for the first time; Displayed in Google Ads UI as 'iOS app install (first open)'.",
            "Legacy app conversions that do not have an AppPlatform provided; Displayed in Google Ads UI as 'Mobile app'.",
            "Conversion that occurs when a user opens an Android app for the first time; Displayed in Google Ads UI as 'Android app install (first open)'.",
            "Call conversion that is uploaded through ConversionUploadService; Displayed in Google Ads UI as 'Import from calls'.",
            "Conversion that comes from a linked Firebase event; Displayed in Google Ads UI as 'Firebase'.",
            "Conversion that occurs when a user clicks on a mobile phone number; Displayed in Google Ads UI as 'Phone number clicks'.",
            "Conversion that comes from Salesforce; Displayed in Google Ads UI as 'Salesforce.com'.",
            "Conversion that comes from in-store purchases recorded by CRM; Displayed in Google Ads UI as 'Store sales (data partner)'.",
            "Conversion that comes from in-store purchases from payment network; Displayed in Google Ads UI as 'Store sales (payment network)'.",
            "Codeless Google Play conversion; Displayed in Google Ads UI as 'Google Play'.",
            "Conversion that comes from a linked third-party app analytics event; Displayed in Google Ads UI as 'Third-party app analytics'.",
            "Conversion that is controlled by Google Attribution.",
            "Store Sales conversion based on first-party or third-party merchant data uploads. Displayed in Google Ads UI as 'Store sales (direct upload)'.",
            "Store Sales conversion based on first-party or third-party merchant data uploads and/or from in-store purchases using cards from payment networks. Displayed in Google Ads UI as 'Store sales'.",
            "Conversions imported from Search Ads 360 Floodlight data.",
            "Conversions that track local actions from Google's products and services after interacting with an ad.",
            "Conversions reported by Floodlight tags.",
            "Conversions that come from Google Analytics specifically for Search Ads 360. Displayed in Google Ads UI as Analytics (SA360).",
            "Conversion that comes from a linked Firebase event for Search Ads 360.",
            "Conversion that is reported by Floodlight for DV360."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEBPAGE",
            "ANALYTICS",
            "UPLOAD",
            "AD_CALL_METRICS",
            "WEBSITE_CALL_METRICS",
            "STORE_VISITS",
            "ANDROID_IN_APP",
            "IOS_IN_APP",
            "IOS_FIRST_OPEN",
            "APP_UNSPECIFIED",
            "ANDROID_FIRST_OPEN",
            "UPLOAD_CALLS",
            "FIREBASE",
            "CLICK_TO_CALL",
            "SALESFORCE",
            "STORE_SALES_CRM",
            "STORE_SALES_PAYMENT_NETWORK",
            "GOOGLE_PLAY",
            "THIRD_PARTY_APP_ANALYTICS",
            "GOOGLE_ATTRIBUTION",
            "STORE_SALES_DIRECT_UPLOAD",
            "STORE_SALES",
            "SEARCH_ADS_360",
            "GOOGLE_HOSTED",
            "FLOODLIGHT",
            "ANALYTICS_SEARCH_ADS_360",
            "FIREBASE_SEARCH_ADS_360",
            "DISPLAY_AND_VIDEO_360_FLOODLIGHT"
          ]
        },
        "geoTargetAirport": {
          "description": "Resource name of the geo target constant that represents an airport.",
          "type": "string"
        },
        "geoTargetCanton": {
          "description": "Resource name of the geo target constant that represents a canton.",
          "type": "string"
        },
        "geoTargetCity": {
          "description": "Resource name of the geo target constant that represents a city.",
          "type": "string"
        },
        "geoTargetCountry": {
          "description": "Resource name of the geo target constant that represents a country.",
          "type": "string"
        },
        "geoTargetCounty": {
          "description": "Resource name of the geo target constant that represents a county.",
          "type": "string"
        },
        "geoTargetDistrict": {
          "description": "Resource name of the geo target constant that represents a district.",
          "type": "string"
        },
        "geoTargetMetro": {
          "description": "Resource name of the geo target constant that represents a metro.",
          "type": "string"
        },
        "geoTargetMostSpecificLocation": {
          "description": "Resource name of the geo target constant that represents the most specific location.",
          "type": "string"
        },
        "geoTargetPostalCode": {
          "description": "Resource name of the geo target constant that represents a postal code.",
          "type": "string"
        },
        "geoTargetProvince": {
          "description": "Resource name of the geo target constant that represents a province.",
          "type": "string"
        },
        "geoTargetRegion": {
          "description": "Resource name of the geo target constant that represents a region.",
          "type": "string"
        },
        "geoTargetState": {
          "description": "Resource name of the geo target constant that represents a state.",
          "type": "string"
        },
        "hotelBookingWindowDays": {
          "description": "Hotel booking window in days.",
          "type": "string",
          "format": "int64"
        },
        "hotelCenterId": {
          "description": "Hotel center ID.",
          "type": "string",
          "format": "int64"
        },
        "hotelCheckInDate": {
          "description": "Hotel check-in date. Formatted as yyyy-MM-dd.",
          "type": "string"
        },
        "hotelCheckInDayOfWeek": {
          "description": "Hotel check-in day of week.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Monday.",
            "Tuesday.",
            "Wednesday.",
            "Thursday.",
            "Friday.",
            "Saturday.",
            "Sunday."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        },
        "hotelCity": {
          "description": "Hotel city.",
          "type": "string"
        },
        "hotelClass": {
          "description": "Hotel class.",
          "type": "integer",
          "format": "int32"
        },
        "hotelCountry": {
          "description": "Hotel country.",
          "type": "string"
        },
        "hotelDateSelectionType": {
          "description": "Hotel date selection type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Dates selected by default.",
            "Dates selected by the user."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DEFAULT_SELECTION",
            "USER_SELECTED"
          ]
        },
        "hotelLengthOfStay": {
          "description": "Hotel length of stay.",
          "type": "integer",
          "format": "int32"
        },
        "hotelRateRuleId": {
          "description": "Hotel rate rule ID.",
          "type": "string"
        },
        "hotelRateType": {
          "description": "Hotel rate type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Rate type information is unavailable.",
            "Rates available to everyone.",
            "A membership program rate is available and satisfies basic requirements like having a public rate available. UI treatment will strikethrough the public rate and indicate that a discount is available to the user. For more on Qualified Rates, visit https://developers.google.com/hotels/hotel-ads/dev-guide/qualified-rates",
            "Rates available to users that satisfy some eligibility criteria, for example, all signed-in users, 20% of mobile users, all mobile users in Canada, etc."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "PUBLIC_RATE",
            "QUALIFIED_RATE",
            "PRIVATE_RATE"
          ]
        },
        "hotelPriceBucket": {
          "description": "Hotel price bucket.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Uniquely lowest price. Partner has the lowest price, and no other partners are within a small variance of that price.",
            "Tied for lowest price. Partner is within a small variance of the lowest price.",
            "Not lowest price. Partner is not within a small variance of the lowest price.",
            "Partner was the only one shown."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LOWEST_UNIQUE",
            "LOWEST_TIED",
            "NOT_LOWEST",
            "ONLY_PARTNER_SHOWN"
          ]
        },
        "hotelState": {
          "description": "Hotel state.",
          "type": "string"
        },
        "hour": {
          "description": "Hour of day as a number between 0 and 23, inclusive.",
          "type": "integer",
          "format": "int32"
        },
        "interactionOnThisExtension": {
          "description": "Only used with feed item metrics. Indicates whether the interaction metrics occurred on the feed item itself or a different extension or ad unit.",
          "type": "boolean"
        },
        "keyword": {
          "description": "Keyword criterion.",
          "$ref": "GoogleAdsGoogleadsV21Common__Keyword"
        },
        "landingPageSource": {
          "description": "The source of a landing page in the landing page report.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The landing page was explicitly provided by the advertiser.",
            "The landing page was selected automatically. This could happen when the advertiser enables AI Max or other features that automatically select landing pages and Google selects the best landing page for the query."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER",
            "AUTOMATIC"
          ]
        },
        "month": {
          "description": "Month as represented by the date of the first day of a month. Formatted as yyyy-MM-dd.",
          "type": "string"
        },
        "monthOfYear": {
          "description": "Month of the year, for example, January.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "January.",
            "February.",
            "March.",
            "April.",
            "May.",
            "June.",
            "July.",
            "August.",
            "September.",
            "October.",
            "November.",
            "December."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ]
        },
        "partnerHotelId": {
          "description": "Partner hotel ID.",
          "type": "string"
        },
        "productAggregatorId": {
          "description": "Aggregator ID of the product.",
          "type": "string",
          "format": "int64"
        },
        "productCategoryLevel1": {
          "description": "Category (level 1) of the product.",
          "type": "string"
        },
        "productCategoryLevel2": {
          "description": "Category (level 2) of the product.",
          "type": "string"
        },
        "productCategoryLevel3": {
          "description": "Category (level 3) of the product.",
          "type": "string"
        },
        "productCategoryLevel4": {
          "description": "Category (level 4) of the product.",
          "type": "string"
        },
        "productCategoryLevel5": {
          "description": "Category (level 5) of the product.",
          "type": "string"
        },
        "productBrand": {
          "description": "Brand of the product.",
          "type": "string"
        },
        "productChannel": {
          "description": "Channel of the product.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold online.",
            "The item is sold in local stores."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ONLINE",
            "LOCAL"
          ]
        },
        "productChannelExclusivity": {
          "description": "Channel exclusivity of the product.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The item is sold through one channel only, either local stores or online as indicated by its ProductChannel.",
            "The item is matched to its online or local stores counterpart, indicating it is available for purchase in both ShoppingProductChannels."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SINGLE_CHANNEL",
            "MULTI_CHANNEL"
          ]
        },
        "productCondition": {
          "description": "Condition of the product.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The product condition is new.",
            "The product condition is refurbished.",
            "The product condition is used."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "REFURBISHED",
            "USED"
          ]
        },
        "productCountry": {
          "description": "Resource name of the geo target constant for the country of sale of the product.",
          "type": "string"
        },
        "productCustomAttribute0": {
          "description": "Custom attribute 0 of the product.",
          "type": "string"
        },
        "productCustomAttribute1": {
          "description": "Custom attribute 1 of the product.",
          "type": "string"
        },
        "productCustomAttribute2": {
          "description": "Custom attribute 2 of the product.",
          "type": "string"
        },
        "productCustomAttribute3": {
          "description": "Custom attribute 3 of the product.",
          "type": "string"
        },
        "productCustomAttribute4": {
          "description": "Custom attribute 4 of the product.",
          "type": "string"
        },
        "productFeedLabel": {
          "description": "Feed label of the product.",
          "type": "string"
        },
        "productItemId": {
          "description": "Item ID of the product.",
          "type": "string"
        },
        "productLanguage": {
          "description": "Resource name of the language constant for the language of the product.",
          "type": "string"
        },
        "productMerchantId": {
          "description": "Merchant ID of the product.",
          "type": "string",
          "format": "int64"
        },
        "productStoreId": {
          "description": "Store ID of the product.",
          "type": "string"
        },
        "productTitle": {
          "description": "Title of the product.",
          "type": "string"
        },
        "productTypeL1": {
          "description": "Type (level 1) of the product.",
          "type": "string"
        },
        "productTypeL2": {
          "description": "Type (level 2) of the product.",
          "type": "string"
        },
        "productTypeL3": {
          "description": "Type (level 3) of the product.",
          "type": "string"
        },
        "productTypeL4": {
          "description": "Type (level 4) of the product.",
          "type": "string"
        },
        "productTypeL5": {
          "description": "Type (level 5) of the product.",
          "type": "string"
        },
        "quarter": {
          "description": "Quarter as represented by the date of the first day of a quarter. Uses the calendar year for quarters, for example, the second quarter of 2018 starts on 2018-04-01. Formatted as yyyy-MM-dd.",
          "type": "string"
        },
        "travelDestinationCity": {
          "description": "The city the user is searching for at query time.",
          "type": "string"
        },
        "travelDestinationCountry": {
          "description": "The country the user is searching for at query time.",
          "type": "string"
        },
        "travelDestinationRegion": {
          "description": "The region the user is searching for at query time.",
          "type": "string"
        },
        "recommendationType": {
          "description": "Recommendation type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Provides optimized budget recommendations for campaigns.",
            "Keyword recommendation.",
            "Recommendation to add a new text ad.",
            "Recommendation to update a campaign to use a Target CPA bidding strategy.",
            "Recommendation to update a campaign to use the Maximize Conversions bidding strategy.",
            "Recommendation to enable Enhanced Cost Per Click for a campaign.",
            "Recommendation to start showing your campaign's ads on Google Search Partners Websites.",
            "Recommendation to update a campaign to use a Maximize Clicks bidding strategy.",
            "Recommendation to start using the \"Optimize\" ad rotation setting for the given ad group.",
            "Recommendation to change an existing keyword from one match type to a broader match type.",
            "Recommendation to move unused budget from one budget to a constrained budget.",
            "Budget recommendation for campaigns that are expected to become budget-constrained in the future (as opposed to the CAMPAIGN_BUDGET recommendation, which applies to campaigns that are currently budget-constrained).",
            "Recommendation to update a campaign to use a Target ROAS bidding strategy.",
            "Recommendation to add a new responsive search ad.",
            "Budget recommendation for campaigns whose ROI is predicted to increase with a budget adjustment.",
            "Recommendation to add broad match versions of keywords for fully automated conversion-based bidding campaigns.",
            "Recommendation to add new responsive search ad assets.",
            "Recommendation to upgrade a Smart Shopping campaign to a Performance Max campaign.",
            "Recommendation to improve strength of responsive search ad.",
            "Recommendation to update a campaign to use Display Expansion.",
            "Recommendation to upgrade a Local campaign to a Performance Max campaign.",
            "Recommendation to raise target CPA when it is too low and there are very few or no conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to raise the budget in advance of a seasonal event that is forecasted to increase traffic, and change bidding strategy from maximize conversion value to target ROAS.",
            "Recommendation to add callout assets to campaign or customer level.",
            "Recommendation to add sitelink assets to campaign or customer level.",
            "Recommendation to add call assets to campaign or customer level.",
            "Recommendation to add the age group attribute to offers that are demoted because of a missing age group.",
            "Recommendation to add a color to offers that are demoted because of a missing color.",
            "Recommendation to add a gender to offers that are demoted because of a missing gender.",
            "Recommendation to add a GTIN (Global Trade Item Number) to offers that are demoted because of a missing GTIN.",
            "Recommendation to add more identifiers to offers that are demoted because of missing identifiers.",
            "Recommendation to add the size to offers that are demoted because of a missing size.",
            "Recommendation informing a customer about a campaign that cannot serve because no products are being targeted.",
            "The shopping recommendation informing a customer about campaign with a high percentage of disapproved products.",
            "Recommendation to create a catch-all campaign that targets all offers.",
            "Recommendation to fix Merchant Center account suspension issues.",
            "Recommendation to fix Merchant Center account suspension warning issues.",
            "Recommendation to migrate offers targeted by Regular Shopping Campaigns to existing Performance Max campaigns.",
            "Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
            "Recommendation to raise Target CPA based on Google predictions modeled from past conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
            "Recommendation to lower Target ROAS.",
            "Recommendation to opt into Performance Max campaigns.",
            "Recommendation to improve the asset group strength of a Performance Max campaign to an \"Excellent\" rating.",
            "Recommendation to migrate Dynamic Search Ads to Performance Max campaigns.",
            "Recommendation to set a target CPA for campaigns that do not have one specified, in advance of a seasonal event that is forecasted to increase traffic.",
            "Recommendation to set a target CPA for campaigns that do not have one specified.",
            "Recommendation to set a target ROAS for campaigns that do not have one specified.",
            "Recommendation to update a campaign to use the Maximize Conversion Value bidding strategy.",
            "Recommendation to deploy Google Tag on more pages.",
            "Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
            "Recommendation to update a customer list that hasn't been updated in the last 90 days.",
            "Recommendation to create a custom audience.",
            "Recommendation to add lead form assets to campaign or customer level.",
            "Recommendation to improve the strength of ads in Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BUDGET",
            "KEYWORD",
            "TEXT_AD",
            "TARGET_CPA_OPT_IN",
            "MAXIMIZE_CONVERSIONS_OPT_IN",
            "ENHANCED_CPC_OPT_IN",
            "SEARCH_PARTNERS_OPT_IN",
            "MAXIMIZE_CLICKS_OPT_IN",
            "OPTIMIZE_AD_ROTATION",
            "KEYWORD_MATCH_TYPE",
            "MOVE_UNUSED_BUDGET",
            "FORECASTING_CAMPAIGN_BUDGET",
            "TARGET_ROAS_OPT_IN",
            "RESPONSIVE_SEARCH_AD",
            "MARGINAL_ROI_CAMPAIGN_BUDGET",
            "USE_BROAD_MATCH_KEYWORD",
            "RESPONSIVE_SEARCH_AD_ASSET",
            "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH",
            "DISPLAY_EXPANSION_OPT_IN",
            "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX",
            "RAISE_TARGET_CPA_BID_TOO_LOW",
            "FORECASTING_SET_TARGET_ROAS",
            "CALLOUT_ASSET",
            "SITELINK_ASSET",
            "CALL_ASSET",
            "SHOPPING_ADD_AGE_GROUP",
            "SHOPPING_ADD_COLOR",
            "SHOPPING_ADD_GENDER",
            "SHOPPING_ADD_GTIN",
            "SHOPPING_ADD_MORE_IDENTIFIERS",
            "SHOPPING_ADD_SIZE",
            "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN",
            "SHOPPING_FIX_DISAPPROVED_PRODUCTS",
            "SHOPPING_TARGET_ALL_OFFERS",
            "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT",
            "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING",
            "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX",
            "DYNAMIC_IMAGE_EXTENSION_OPT_IN",
            "RAISE_TARGET_CPA",
            "LOWER_TARGET_ROAS",
            "PERFORMANCE_MAX_OPT_IN",
            "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH",
            "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX",
            "FORECASTING_SET_TARGET_CPA",
            "SET_TARGET_CPA",
            "SET_TARGET_ROAS",
            "MAXIMIZE_CONVERSION_VALUE_OPT_IN",
            "IMPROVE_GOOGLE_TAG_COVERAGE",
            "PERFORMANCE_MAX_FINAL_URL_OPT_IN",
            "REFRESH_CUSTOMER_MATCH_LIST",
            "CUSTOM_AUDIENCE_OPT_IN",
            "LEAD_FORM_ASSET",
            "IMPROVE_DEMAND_GEN_AD_STRENGTH"
          ]
        },
        "searchEngineResultsPageType": {
          "description": "Type of the search engine results page.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Only ads were contained in the search engine results page.",
            "Only organic results were contained in the search engine results page.",
            "Both ads and organic results were contained in the search engine results page."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADS_ONLY",
            "ORGANIC_ONLY",
            "ADS_AND_ORGANIC"
          ]
        },
        "searchSubcategory": {
          "description": "A search term subcategory. An empty string denotes the catch-all subcategory for search terms that didn't fit into another subcategory.",
          "type": "string"
        },
        "searchTerm": {
          "description": "A search term.",
          "type": "string"
        },
        "searchTermMatchType": {
          "description": "Match type of the keyword that triggered the ad. This segment is for use with keyword_view. For other resources, use match_type. While match_type is filtered to Broad, Exact, Phrase and Ai Max, search_term_match_type includes variants like Near Exact and Near Phrase.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Broad match.",
            "Exact match.",
            "Phrase match.",
            "Exact match (close variant).",
            "Phrase match (close variant).",
            "Match type for AI Max Search.",
            "Match type for Performance Max campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BROAD",
            "EXACT",
            "PHRASE",
            "NEAR_EXACT",
            "NEAR_PHRASE",
            "AI_MAX",
            "PERFORMANCE_MAX"
          ]
        },
        "matchType": {
          "description": "The match type of the keyword that triggered the ad. This segment is for use with keyword_view. For other resources, use search_term_match_type. While match_type is filtered to Broad, Exact, Phrase and Ai Max, search_term_match_type includes variants like Near Exact, Near Phrase.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Broad match.",
            "Exact match.",
            "Phrase match.",
            "Match type for AI Max Search."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BROAD",
            "EXACT",
            "PHRASE",
            "AI_MAX"
          ]
        },
        "slot": {
          "description": "Position of the ad.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google search: Side.",
            "Google search: Top.",
            "Google search: Other.",
            "Google Display Network.",
            "Search partners: Top.",
            "Search partners: Other.",
            "Cross-network."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH_SIDE",
            "SEARCH_TOP",
            "SEARCH_OTHER",
            "CONTENT",
            "SEARCH_PARTNER_TOP",
            "SEARCH_PARTNER_OTHER",
            "MIXED"
          ]
        },
        "conversionValueRulePrimaryDimension": {
          "description": "Primary dimension of applied conversion value rules. NO_RULE_APPLIED shows the total recorded value of conversions that do not have a value rule applied. ORIGINAL shows the original value of conversions to which a value rule has been applied. GEO_LOCATION, DEVICE, AUDIENCE, ITINERARY show the net adjustment after value rules were applied.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "For no-value-rule-applied conversions after value rule is enabled.",
            "Below are for value-rule-applied conversions: The original stats.",
            "When a new or returning customer condition is satisfied.",
            "When a query-time Geo location condition is satisfied.",
            "When a query-time browsing device condition is satisfied.",
            "When a query-time audience condition is satisfied.",
            "When multiple rules are applied.",
            "When a query-time itinerary condition is satisfied."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_RULE_APPLIED",
            "ORIGINAL",
            "NEW_VS_RETURNING_USER",
            "GEO_LOCATION",
            "DEVICE",
            "AUDIENCE",
            "MULTIPLE",
            "ITINERARY"
          ]
        },
        "webpage": {
          "description": "Resource name of the ad group criterion that represents webpage criterion.",
          "type": "string"
        },
        "week": {
          "description": "Week as defined as Monday through Sunday, and represented by the date of Monday. Formatted as yyyy-MM-dd.",
          "type": "string"
        },
        "year": {
          "description": "Year, formatted as yyyy.",
          "type": "integer",
          "format": "int32"
        },
        "skAdNetworkFineConversionValue": {
          "description": "iOS Store Kit Ad Network conversion value. Null value means this segment is not applicable, for example, non-iOS campaign.",
          "type": "string",
          "format": "int64"
        },
        "skAdNetworkRedistributedFineConversionValue": {
          "description": "iOS Store Kit Ad Network redistributed fine conversion value. Google uses modeling on observed conversion values(obtained from Apple) to calculate conversions from SKAN postbacks where NULLs are returned. This column represents the sum of the modeled conversion values and the observed conversion values. See https://support.google.com/google-ads/answer/14892597 to lean more.",
          "type": "string",
          "format": "int64"
        },
        "skAdNetworkUserType": {
          "description": "iOS Store Kit Ad Network user type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The value was not present in the postback or we do not have this data for other reasons.",
            "The user installed the app for the first time.",
            "The user has previously installed the app."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "NEW_INSTALLER",
            "REINSTALLER"
          ]
        },
        "skAdNetworkAdEventType": {
          "description": "iOS Store Kit Ad Network ad event type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The value was not present in the postback or we do not have this data for other reasons.",
            "The user interacted with the ad.",
            "The user viewed the ad."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "INTERACTION",
            "VIEW"
          ]
        },
        "skAdNetworkSourceApp": {
          "description": "App where the ad that drove the iOS Store Kit Ad Network install was shown. Null value means this segment is not applicable, for example, non-iOS campaign, or was not present in any postbacks sent by Apple.",
          "$ref": "GoogleAdsGoogleadsV21Common__SkAdNetworkSourceApp"
        },
        "skAdNetworkAttributionCredit": {
          "description": "iOS Store Kit Ad Network attribution credit",
          "type": "string",
          "enumDescriptions": [
            "Default value. This value is equivalent to null.",
            "The value is unknown in this API version. The true enum value cannot be returned in this API version or is not supported yet.",
            "The value was not present in the postback or we do not have this data for other reasons.",
            "Google was the ad network that won ad attribution.",
            "Google qualified for attribution, but didn't win."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "WON",
            "CONTRIBUTED"
          ]
        },
        "skAdNetworkCoarseConversionValue": {
          "description": "iOS Store Kit Ad Network coarse conversion value.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The value was not present in the postback or we do not have this data for other reasons.",
            "A low coarse conversion value.",
            "A medium coarse conversion value.",
            "A high coarse conversion value.",
            "A coarse conversion value was not configured."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "LOW",
            "MEDIUM",
            "HIGH",
            "NONE"
          ]
        },
        "skAdNetworkSourceDomain": {
          "description": "Website where the ad that drove the iOS Store Kit Ad Network install was shown. Null value means this segment is not applicable, for example, non-iOS campaign, or was not present in any postbacks sent by Apple.",
          "type": "string"
        },
        "skAdNetworkSourceType": {
          "description": "The source type where the ad that drove the iOS Store Kit Ad Network install was shown. Null value means this segment is not applicable, for example, non-iOS campaign, or neither source domain nor source app were present in any postbacks sent by Apple.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The source app ID or source domain was not present in the postback or we do not have this data for other reasons.",
            "The ad was shown on a webpage.",
            "The ad was shown on an app."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "WEBSITE",
            "MOBILE_APPLICATION"
          ]
        },
        "skAdNetworkPostbackSequenceIndex": {
          "description": "iOS Store Kit Ad Network postback sequence index.",
          "type": "string",
          "format": "int64"
        },
        "skAdNetworkVersion": {
          "description": "The version of the SKAdNetwork API used.",
          "type": "string"
        },
        "assetInteractionTarget": {
          "description": "Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics. Indicates whether the interaction metrics occurred on the asset itself or a different asset or ad unit. Interactions (for example, clicks) are counted across all the parts of the served ad (for example, Ad itself and other components like Sitelinks) when they are served together. When interaction_on_this_asset is true, it means the interactions are on this specific asset and when interaction_on_this_asset is false, it means the interactions is not on this specific asset but on other parts of the served ad this asset is served with.",
          "$ref": "GoogleAdsGoogleadsV21Common__AssetInteractionTarget"
        },
        "newVersusReturningCustomers": {
          "description": "This is for segmenting conversions by whether the user is a new customer or a returning customer. This segmentation is typically used to measure the impact of customer acquisition goal.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Converting user is new to the advertiser.",
            "Converting user is returning to the advertiser. Definition of returning differs among conversion types, such as a second store visit versus a second online purchase.",
            "Converting user is new to the advertiser and has high lifetime value."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "RETURNING",
            "NEW_AND_HIGH_LTV"
          ]
        },
        "adjustedAgeRange": {
          "description": "Adjusted age range. This is the age range of the user after applying modeling to get more accurate age and gender information. Currently, both adjusted_age_range and adjusted_gender need to be selected together to get valid reach stats. These segmentations are only available for allowlisted customers.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Between 18 and 24 years old.",
            "Between 25 and 34 years old.",
            "Between 35 and 44 years old.",
            "Between 45 and 54 years old.",
            "Between 55 and 64 years old.",
            "65 years old and beyond.",
            "Undetermined age range."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AGE_RANGE_18_24",
            "AGE_RANGE_25_34",
            "AGE_RANGE_35_44",
            "AGE_RANGE_45_54",
            "AGE_RANGE_55_64",
            "AGE_RANGE_65_UP",
            "AGE_RANGE_UNDETERMINED"
          ]
        },
        "adjustedGender": {
          "description": "Adjusted gender. This is the gender of the user after applying modeling to get more accurate age and gender information. Currently, both adjusted_age_range and adjusted_gender need to be selected together to get valid reach stats. These segmentations are only available for allowlisted customers.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Male.",
            "Female.",
            "Undetermined gender."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MALE",
            "FEMALE",
            "UNDETERMINED"
          ]
        },
        "searchTermMatchSource": {
          "description": "Specifies the source for how the search term was matched, which reveals the type of ad campaign responsible. Use this to distinguish between automated campaigns (like AI Max, Dynamic Search Ads) and keyword-based campaigns (Standard).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The match is from a user-provided keyword.",
            "The match is from the keywordless expansion portion of AI Max.",
            "The match is from the broad match expansion portion of AI Max.",
            "The match is from a Dynamic Search Ad.",
            "The match is from the search term matching functionality in PMax."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER_PROVIDED_KEYWORD",
            "AI_MAX_KEYWORDLESS",
            "AI_MAX_BROAD_MATCH",
            "DYNAMIC_SEARCH_ADS",
            "PERFORMANCE_MAX"
          ]
        },
        "searchTermTargetingStatus": {
          "description": "Indicates whether the search term is currently one of your targeted or excluded keywords.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search term is added to targeted keywords.",
            "Search term matches a negative keyword.",
            "Search term has been both added and excluded.",
            "Search term is neither targeted nor excluded."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADDED",
            "EXCLUDED",
            "ADDED_EXCLUDED",
            "NONE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__BudgetCampaignAssociationStatus": {
      "id": "GoogleAdsGoogleadsV21Common__BudgetCampaignAssociationStatus",
      "description": "A BudgetCampaignAssociationStatus segment.",
      "type": "object",
      "properties": {
        "campaign": {
          "description": "The campaign resource name.",
          "type": "string"
        },
        "status": {
          "description": "Budget campaign association status.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The campaign is currently using the budget.",
            "The campaign is no longer using the budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "REMOVED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Keyword": {
      "id": "GoogleAdsGoogleadsV21Common__Keyword",
      "description": "A Keyword criterion segment.",
      "type": "object",
      "properties": {
        "adGroupCriterion": {
          "description": "The AdGroupCriterion resource name.",
          "type": "string"
        },
        "info": {
          "description": "Keyword info.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SkAdNetworkSourceApp": {
      "id": "GoogleAdsGoogleadsV21Common__SkAdNetworkSourceApp",
      "description": "A SkAdNetworkSourceApp segment.",
      "type": "object",
      "properties": {
        "skAdNetworkSourceAppId": {
          "description": "App id where the ad that drove the iOS Store Kit Ad Network install was shown.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__AssetInteractionTarget": {
      "id": "GoogleAdsGoogleadsV21Common__AssetInteractionTarget",
      "description": "An AssetInteractionTarget segment.",
      "type": "object",
      "properties": {
        "asset": {
          "description": "The asset resource name.",
          "type": "string"
        },
        "interactionOnThisAsset": {
          "description": "Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics. Indicates whether the interaction metrics occurred on the asset itself or a different asset or ad unit.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamRequest",
      "description": "Request message for GoogleAdsService.SearchStream.",
      "type": "object",
      "properties": {
        "query": {
          "description": "Required. The query string.",
          "type": "string"
        },
        "summaryRowSetting": {
          "description": "Determines whether a summary row will be returned. By default, summary row is not returned. If requested, the summary row will be sent in a response by itself after all other query results are returned.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represent unknown values of return summary row.",
            "Do not return summary row.",
            "Return summary row along with results. The summary row will be returned in the last batch alone (last batch will contain no results).",
            "Return summary row only and return no results."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_SUMMARY_ROW",
            "SUMMARY_ROW_WITH_RESULTS",
            "SUMMARY_ROW_ONLY"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsStreamResponse",
      "description": "Response message for GoogleAdsService.SearchStream.",
      "type": "object",
      "properties": {
        "results": {
          "description": "The list of rows that matched the query.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__GoogleAdsRow"
          }
        },
        "fieldMask": {
          "description": "FieldMask that represents what fields were requested by the user.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "summaryRow": {
          "description": "Summary row that contains summary of metrics in results. Summary of metrics means aggregation of metrics across all results, here aggregation could be sum, average, rate, etc.",
          "$ref": "GoogleAdsGoogleadsV21Services__GoogleAdsRow"
        },
        "requestId": {
          "description": "The unique id of the request that is used for debugging purposes.",
          "type": "string"
        },
        "queryResourceConsumption": {
          "description": "The amount of resources consumed to serve the query. query_resource_consumption for the Summary row and non-Summary responses are returned separately in their respective rows. query_resource_consumption for non-Summary responses is returned in the final batch of results.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateGoogleAdsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateGoogleAdsRequest",
      "description": "Request message for GoogleAdsService.Mutate.",
      "type": "object",
      "properties": {
        "mutateOperations": {
          "description": "Required. The list of operations to perform on individual resources.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation. The mutable resource will only be returned if the resource has the appropriate response field. For example, MutateCampaignResult.campaign.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateOperation": {
      "id": "GoogleAdsGoogleadsV21Services__MutateOperation",
      "description": "A single operation (create, update, remove) on a resource.",
      "type": "object",
      "properties": {
        "adGroupAdLabelOperation": {
          "description": "An ad group ad label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAdLabelOperation"
        },
        "adGroupAdOperation": {
          "description": "An ad group ad mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAdOperation"
        },
        "adGroupAssetOperation": {
          "description": "An ad group asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupAssetOperation"
        },
        "adGroupBidModifierOperation": {
          "description": "An ad group bid modifier mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupBidModifierOperation"
        },
        "adGroupCriterionCustomizerOperation": {
          "description": "An ad group criterion customizer mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionCustomizerOperation"
        },
        "adGroupCriterionLabelOperation": {
          "description": "An ad group criterion label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionLabelOperation"
        },
        "adGroupCriterionOperation": {
          "description": "An ad group criterion mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCriterionOperation"
        },
        "adGroupCustomizerOperation": {
          "description": "An ad group customizer mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupCustomizerOperation"
        },
        "adGroupLabelOperation": {
          "description": "An ad group label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupLabelOperation"
        },
        "adGroupOperation": {
          "description": "An ad group mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdGroupOperation"
        },
        "adOperation": {
          "description": "An ad mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdOperation"
        },
        "adParameterOperation": {
          "description": "An ad parameter mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdParameterOperation"
        },
        "assetOperation": {
          "description": "An asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetOperation"
        },
        "assetGroupAssetOperation": {
          "description": "An asset group asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupAssetOperation"
        },
        "assetGroupListingGroupFilterOperation": {
          "description": "An asset group listing group filter mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupListingGroupFilterOperation"
        },
        "assetGroupSignalOperation": {
          "description": "An asset group signal mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupSignalOperation"
        },
        "assetGroupOperation": {
          "description": "An asset group mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupOperation"
        },
        "assetSetAssetOperation": {
          "description": "An asset set asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetSetAssetOperation"
        },
        "assetSetOperation": {
          "description": "An asset set mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetSetOperation"
        },
        "audienceOperation": {
          "description": "An audience mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__AudienceOperation"
        },
        "biddingDataExclusionOperation": {
          "description": "A bidding data exclusion mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__BiddingDataExclusionOperation"
        },
        "biddingSeasonalityAdjustmentOperation": {
          "description": "A bidding seasonality adjustment mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__BiddingSeasonalityAdjustmentOperation"
        },
        "biddingStrategyOperation": {
          "description": "A bidding strategy mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__BiddingStrategyOperation"
        },
        "campaignAssetOperation": {
          "description": "A campaign asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignAssetOperation"
        },
        "campaignAssetSetOperation": {
          "description": "A campaign asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignAssetSetOperation"
        },
        "campaignBidModifierOperation": {
          "description": "A campaign bid modifier mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignBidModifierOperation"
        },
        "campaignBudgetOperation": {
          "description": "A campaign budget mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignBudgetOperation"
        },
        "campaignConversionGoalOperation": {
          "description": "A campaign conversion goal mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignConversionGoalOperation"
        },
        "campaignCriterionOperation": {
          "description": "A campaign criterion mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignCriterionOperation"
        },
        "campaignCustomizerOperation": {
          "description": "A campaign customizer mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignCustomizerOperation"
        },
        "campaignDraftOperation": {
          "description": "A campaign draft mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignDraftOperation"
        },
        "campaignGroupOperation": {
          "description": "A campaign group mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignGroupOperation"
        },
        "campaignLabelOperation": {
          "description": "A campaign label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignLabelOperation"
        },
        "campaignOperation": {
          "description": "A campaign mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignOperation"
        },
        "campaignSharedSetOperation": {
          "description": "A campaign shared set mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignSharedSetOperation"
        },
        "conversionActionOperation": {
          "description": "A conversion action mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConversionActionOperation"
        },
        "conversionCustomVariableOperation": {
          "description": "A conversion custom variable mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConversionCustomVariableOperation"
        },
        "conversionGoalCampaignConfigOperation": {
          "description": "A conversion goal campaign config mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConversionGoalCampaignConfigOperation"
        },
        "conversionValueRuleOperation": {
          "description": "A conversion value rule mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConversionValueRuleOperation"
        },
        "conversionValueRuleSetOperation": {
          "description": "A conversion value rule set mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConversionValueRuleSetOperation"
        },
        "customConversionGoalOperation": {
          "description": "A custom conversion goal mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomConversionGoalOperation"
        },
        "customerAssetOperation": {
          "description": "A customer asset mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerAssetOperation"
        },
        "customerConversionGoalOperation": {
          "description": "A customer conversion goal mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerConversionGoalOperation"
        },
        "customerCustomizerOperation": {
          "description": "A customer customizer mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerCustomizerOperation"
        },
        "customerLabelOperation": {
          "description": "A customer label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerLabelOperation"
        },
        "customerNegativeCriterionOperation": {
          "description": "A customer negative criterion mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerNegativeCriterionOperation"
        },
        "customerOperation": {
          "description": "A customer mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerOperation"
        },
        "customizerAttributeOperation": {
          "description": "A customizer attribute mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomizerAttributeOperation"
        },
        "experimentOperation": {
          "description": "An experiment mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ExperimentOperation"
        },
        "experimentArmOperation": {
          "description": "An experiment arm mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__ExperimentArmOperation"
        },
        "keywordPlanAdGroupOperation": {
          "description": "A keyword plan ad group operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupOperation"
        },
        "keywordPlanAdGroupKeywordOperation": {
          "description": "A keyword plan ad group keyword operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanAdGroupKeywordOperation"
        },
        "keywordPlanCampaignKeywordOperation": {
          "description": "A keyword plan campaign keyword operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignKeywordOperation"
        },
        "keywordPlanCampaignOperation": {
          "description": "A keyword plan campaign operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanCampaignOperation"
        },
        "keywordPlanOperation": {
          "description": "A keyword plan operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordPlanOperation"
        },
        "labelOperation": {
          "description": "A label mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__LabelOperation"
        },
        "recommendationSubscriptionOperation": {
          "description": "A recommendation subscription mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__RecommendationSubscriptionOperation"
        },
        "remarketingActionOperation": {
          "description": "A remarketing action mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__RemarketingActionOperation"
        },
        "sharedCriterionOperation": {
          "description": "A shared criterion mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__SharedCriterionOperation"
        },
        "sharedSetOperation": {
          "description": "A shared set mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__SharedSetOperation"
        },
        "smartCampaignSettingOperation": {
          "description": "A Smart campaign setting mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignSettingOperation"
        },
        "userListOperation": {
          "description": "A user list mutate operation.",
          "$ref": "GoogleAdsGoogleadsV21Services__UserListOperation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateGoogleAdsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateGoogleAdsResponse",
      "description": "Response message for GoogleAdsService.Mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "mutateOperationResponses": {
          "description": "All responses for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateOperationResponse"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateOperationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateOperationResponse",
      "description": "Response message for the resource mutate.",
      "type": "object",
      "properties": {
        "adGroupAdLabelResult": {
          "description": "The result for the ad group ad label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdLabelResult"
        },
        "adGroupAdResult": {
          "description": "The result for the ad group ad mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAdResult"
        },
        "adGroupAssetResult": {
          "description": "The result for the ad group asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupAssetResult"
        },
        "adGroupBidModifierResult": {
          "description": "The result for the ad group bid modifier mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupBidModifierResult"
        },
        "adGroupCriterionCustomizerResult": {
          "description": "The result for the ad group criterion customizer mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionCustomizerResult"
        },
        "adGroupCriterionLabelResult": {
          "description": "The result for the ad group criterion label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionLabelResult"
        },
        "adGroupCriterionResult": {
          "description": "The result for the ad group criterion mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCriterionResult"
        },
        "adGroupCustomizerResult": {
          "description": "The result for the ad group customizer mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupCustomizerResult"
        },
        "adGroupLabelResult": {
          "description": "The result for the ad group label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupLabelResult"
        },
        "adGroupResult": {
          "description": "The result for the ad group mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdGroupResult"
        },
        "adParameterResult": {
          "description": "The result for the ad parameter mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdParameterResult"
        },
        "adResult": {
          "description": "The result for the ad mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAdResult"
        },
        "assetResult": {
          "description": "The result for the asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetResult"
        },
        "assetGroupAssetResult": {
          "description": "The result for the asset group asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupAssetResult"
        },
        "assetGroupListingGroupFilterResult": {
          "description": "The result for the asset group listing group filter mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupListingGroupFilterResult"
        },
        "assetGroupSignalResult": {
          "description": "The result for the asset group signal mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupSignalResult"
        },
        "assetGroupResult": {
          "description": "The result for the asset group mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetGroupResult"
        },
        "assetSetAssetResult": {
          "description": "The result for the asset set asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetAssetResult"
        },
        "assetSetResult": {
          "description": "The result for the asset set mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAssetSetResult"
        },
        "audienceResult": {
          "description": "The result for the audience mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateAudienceResult"
        },
        "biddingDataExclusionResult": {
          "description": "The result for the bidding data exclusion mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingDataExclusionsResult"
        },
        "biddingSeasonalityAdjustmentResult": {
          "description": "The result for the bidding seasonality adjustment mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingSeasonalityAdjustmentsResult"
        },
        "biddingStrategyResult": {
          "description": "The result for the bidding strategy mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateBiddingStrategyResult"
        },
        "campaignAssetResult": {
          "description": "The result for the campaign asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetResult"
        },
        "campaignAssetSetResult": {
          "description": "The result for the campaign asset set mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignAssetSetResult"
        },
        "campaignBidModifierResult": {
          "description": "The result for the campaign bid modifier mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBidModifierResult"
        },
        "campaignBudgetResult": {
          "description": "The result for the campaign budget mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignBudgetResult"
        },
        "campaignConversionGoalResult": {
          "description": "The result for the campaign conversion goal mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignConversionGoalResult"
        },
        "campaignCriterionResult": {
          "description": "The result for the campaign criterion mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCriterionResult"
        },
        "campaignCustomizerResult": {
          "description": "The result for the campaign customizer mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignCustomizerResult"
        },
        "campaignDraftResult": {
          "description": "The result for the campaign draft mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignDraftResult"
        },
        "campaignGroupResult": {
          "description": "The result for the campaign group mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignGroupResult"
        },
        "campaignLabelResult": {
          "description": "The result for the campaign label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignLabelResult"
        },
        "campaignResult": {
          "description": "The result for the campaign mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignResult"
        },
        "campaignSharedSetResult": {
          "description": "The result for the campaign shared set mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCampaignSharedSetResult"
        },
        "conversionActionResult": {
          "description": "The result for the conversion action mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionActionResult"
        },
        "conversionCustomVariableResult": {
          "description": "The result for the conversion custom variable mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionCustomVariableResult"
        },
        "conversionGoalCampaignConfigResult": {
          "description": "The result for the conversion goal campaign config mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionGoalCampaignConfigResult"
        },
        "conversionValueRuleResult": {
          "description": "The result for the conversion value rule mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleResult"
        },
        "conversionValueRuleSetResult": {
          "description": "The result for the conversion value rule set mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateConversionValueRuleSetResult"
        },
        "customConversionGoalResult": {
          "description": "The result for the custom conversion goal mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomConversionGoalResult"
        },
        "customerAssetResult": {
          "description": "The result for the customer asset mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetResult"
        },
        "customerConversionGoalResult": {
          "description": "The result for the customer conversion goal mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerConversionGoalResult"
        },
        "customerCustomizerResult": {
          "description": "The result for the customer customizer mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerCustomizerResult"
        },
        "customerLabelResult": {
          "description": "The result for the customer label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerLabelResult"
        },
        "customerNegativeCriterionResult": {
          "description": "The result for the customer negative criterion mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerNegativeCriteriaResult"
        },
        "customerResult": {
          "description": "The result for the customer mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerResult"
        },
        "customizerAttributeResult": {
          "description": "The result for the customizer attribute mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomizerAttributeResult"
        },
        "experimentResult": {
          "description": "The result for the experiment mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentResult"
        },
        "experimentArmResult": {
          "description": "The result for the experiment arm mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateExperimentArmResult"
        },
        "keywordPlanAdGroupResult": {
          "description": "The result for the keyword plan ad group mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupResult"
        },
        "keywordPlanCampaignResult": {
          "description": "The result for the keyword plan campaign mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignResult"
        },
        "keywordPlanAdGroupKeywordResult": {
          "description": "The result for the keyword plan ad group keyword mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanAdGroupKeywordResult"
        },
        "keywordPlanCampaignKeywordResult": {
          "description": "The result for the keyword plan campaign keyword mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlanCampaignKeywordResult"
        },
        "keywordPlanResult": {
          "description": "The result for the keyword plan mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateKeywordPlansResult"
        },
        "labelResult": {
          "description": "The result for the label mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateLabelResult"
        },
        "recommendationSubscriptionResult": {
          "description": "The result for the recommendation subscription mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateRecommendationSubscriptionResult"
        },
        "remarketingActionResult": {
          "description": "The result for the remarketing action mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateRemarketingActionResult"
        },
        "sharedCriterionResult": {
          "description": "The result for the shared criterion mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedCriterionResult"
        },
        "sharedSetResult": {
          "description": "The result for the shared set mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateSharedSetResult"
        },
        "smartCampaignSettingResult": {
          "description": "The result for the Smart campaign setting mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateSmartCampaignSettingResult"
        },
        "userListResult": {
          "description": "The result for the user list mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBatchJobRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBatchJobRequest",
      "description": "Request message for BatchJobService.MutateBatchJob.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on an individual batch job.",
          "$ref": "GoogleAdsGoogleadsV21Services__BatchJobOperation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BatchJobOperation": {
      "id": "GoogleAdsGoogleadsV21Services__BatchJobOperation",
      "description": "A single operation on a batch job.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new batch job.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BatchJob"
        },
        "remove": {
          "description": "Remove operation: The batch job must not have been run. A resource name for the removed batch job is expected, in this format: `customers/{customer_id}/batchJobs/{batch_job_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBatchJobResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBatchJobResponse",
      "description": "Response message for BatchJobService.MutateBatchJob.",
      "type": "object",
      "properties": {
        "result": {
          "description": "The result for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateBatchJobResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBatchJobResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBatchJobResult",
      "description": "The result for the batch job mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name of the batch job.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListBatchJobResultsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListBatchJobResultsResponse",
      "description": "Response message for BatchJobService.ListBatchJobResults.",
      "type": "object",
      "properties": {
        "results": {
          "description": "The list of rows that matched the query.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BatchJobResult"
          }
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BatchJobResult": {
      "id": "GoogleAdsGoogleadsV21Services__BatchJobResult",
      "description": "An individual batch job result.",
      "type": "object",
      "properties": {
        "operationIndex": {
          "description": "Index of the mutate operation.",
          "type": "string",
          "format": "int64"
        },
        "mutateOperationResponse": {
          "description": "Response for the mutate. May be empty if errors occurred.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateOperationResponse"
        },
        "status": {
          "description": "Details of the errors when processing the operation.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RunBatchJobRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RunBatchJobRequest",
      "description": "Request message for BatchJobService.RunBatchJob.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsRequest",
      "description": "Request message for BatchJobService.AddBatchJobOperations.",
      "type": "object",
      "properties": {
        "sequenceToken": {
          "description": "A token used to enforce sequencing. The first AddBatchJobOperations request for a batch job should not set sequence_token. Subsequent requests must set sequence_token to the value of next_sequence_token received in the previous AddBatchJobOperations response.",
          "type": "string"
        },
        "mutateOperations": {
          "description": "Required. The list of mutates being added. Operations can use negative integers as temp ids to signify dependencies between entities created in this batch job. For example, a customer with id = 1234 can create a campaign and an ad group in that same campaign by creating a campaign in the first operation with the resource name explicitly set to \"customers/1234/campaigns/-1\", and creating an ad group in the second operation with the campaign field also set to \"customers/1234/campaigns/-1\".",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateOperation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__AddBatchJobOperationsResponse",
      "description": "Response message for BatchJobService.AddBatchJobOperations.",
      "type": "object",
      "properties": {
        "totalOperations": {
          "description": "The total number of operations added so far for this batch job.",
          "type": "string",
          "format": "int64"
        },
        "nextSequenceToken": {
          "description": "The sequence token to be used when calling AddBatchJobOperations again if more operations need to be added. The next AddBatchJobOperations request must set the sequence_token field to the value of this field.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBillingSetupRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBillingSetupRequest",
      "description": "Request message for billing setup mutate operations.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform.",
          "$ref": "GoogleAdsGoogleadsV21Services__BillingSetupOperation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BillingSetupOperation": {
      "id": "GoogleAdsGoogleadsV21Services__BillingSetupOperation",
      "description": "A single operation on a billing setup, which describes the cancellation of an existing billing setup.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Creates a billing setup. No resource name is expected for the new billing setup.",
          "$ref": "GoogleAdsGoogleadsV21Resources__BillingSetup"
        },
        "remove": {
          "description": "Resource name of the billing setup to remove. A setup cannot be removed unless it is in a pending state or its scheduled start time is in the future. The resource name looks like `customers/{customer_id}/billingSetups/{billing_id}`.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBillingSetupResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBillingSetupResponse",
      "description": "Response message for a billing setup operation.",
      "type": "object",
      "properties": {
        "result": {
          "description": "A result that identifies the resource affected by the mutate request.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateBillingSetupResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateBillingSetupResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateBillingSetupResult",
      "description": "Result for a single billing setup mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestBrandsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestBrandsRequest",
      "description": "Request message for BrandSuggestionService.SuggestBrands.",
      "type": "object",
      "properties": {
        "brandPrefix": {
          "description": "Required. The prefix of a brand name.",
          "type": "string"
        },
        "selectedBrands": {
          "description": "Optional. Ids of the brands already selected by advertisers. They will be excluded in response. These are expected to be brand ids not brand names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestBrandsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestBrandsResponse",
      "description": "Response message for BrandSuggestionService.SuggestBrands.",
      "type": "object",
      "properties": {
        "brands": {
          "description": "Generated brand suggestions of verified brands for the given prefix.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BrandSuggestion"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BrandSuggestion": {
      "id": "GoogleAdsGoogleadsV21Services__BrandSuggestion",
      "description": "Information of brand suggestion.",
      "type": "object",
      "properties": {
        "id": {
          "description": "Id for the brand. It would be CKG MID for verified/global scoped brands.",
          "type": "string"
        },
        "name": {
          "description": "Name of the brand.",
          "type": "string"
        },
        "urls": {
          "description": "Urls which uniquely identify the brand.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "state": {
          "description": "Current state of the brand.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Brand is verified and globally available for selection",
            "Brand was globally available in past but is no longer a valid brand (based on business criteria)",
            "Brand is unverified and customer scoped, but can be selected by customer (only who requested for same) for targeting",
            "Was a customer-scoped (unverified) brand, which got approved by business and added to the global list. Its assigned CKG MID should be used instead of this",
            "Was a customer-scoped (unverified) brand, but the request was canceled by customer and this brand id is no longer valid",
            "Was a customer-scoped (unverified) brand, but the request was rejected by internal business team and this brand id is no longer valid"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENABLED",
            "DEPRECATED",
            "UNVERIFIED",
            "APPROVED",
            "CANCELLED",
            "REJECTED"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsRequest",
      "description": "Request message for CampaignLifecycleGoalService.configureCampaignLifecycleGoals.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform campaign lifecycle goal update.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignLifecycleGoalOperation"
        },
        "validateOnly": {
          "description": "Optional. If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignLifecycleGoalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignLifecycleGoalOperation",
      "description": "A single operation on a campaign lifecycle goal.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "Optional. FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: Create a new campaign lifecycle goal. The campaign field should be set for this operation.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignLifecycleGoal"
        },
        "update": {
          "description": "Update operation: Update an existing campaign lifecycle goal. The campaign field should not be set for this operation.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CampaignLifecycleGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResponse",
      "description": "Response message for CampaignLifecycleGoalService.configureCampaignLifecycleGoals.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result for the campaign lifecycle goal configuration.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResult": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCampaignLifecycleGoalsResult",
      "description": "The result for the campaign lifecycle goal configuration.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for the successful operation.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsRequest",
      "description": "Request message for ContentCreatorInsightsService.GenerateCreatorInsights.",
      "type": "object",
      "properties": {
        "customerInsightsGroup": {
          "description": "Required. The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        },
        "countryLocations": {
          "description": "Required. The countries to search that apply to the criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "subCountryLocations": {
          "description": "The sub-country geographic locations to search that apply to the criteria. Only supported for [SearchAttributes] criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        },
        "searchAttributes": {
          "description": "The attributes used to identify top creators. Data fetched is based on the list of countries or sub-country locations specified in [country_locations] or [sub_country_locations].",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchAttributes"
        },
        "searchBrand": {
          "description": "A brand used to search for top creators. Data fetched is based on the list of countries specified in [country_locations].",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchBrand"
        },
        "searchChannels": {
          "description": "YouTube Channel IDs for Creator Insights. Data fetched for channels is based on the list of countries specified in [country_locations].",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_YouTubeChannels"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchAttributes": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchAttributes",
      "description": "The audience attributes (such as Age, Gender, Affinity, and In-Market) and creator attributes (such as creator's content topics) used to search for top creators.",
      "type": "object",
      "properties": {
        "audienceAttributes": {
          "description": "Optional. Audience attributes that describe an audience of viewers. This is used to search for creators whose own viewers match the input audience. Attributes age_range, gender, user_interest, entity, category, device, parental_status, and income_range are supported. Attribute location is not supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
          }
        },
        "creatorAttributes": {
          "description": "Optional. Creator attributes that describe a collection of types of content. This is used to search for creators whose content matches the input creator attributes. Only Knowledge Graph Entities tagged with InsightsKnowledgeGraphEntityCapabilities.CREATOR_ATTRIBUTE are supported. Use AudienceInsightsService.ListAudienceInsightsAttributes to get the list of supported entities. Other attributes including location are not supported.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchBrand": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_SearchBrand",
      "description": "The brand used to search for top creators.",
      "type": "object",
      "properties": {
        "brandEntities": {
          "description": "Optional. One or more Knowledge Graph Entities that represent the brand for which to find insights.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
          }
        },
        "includeRelatedTopics": {
          "description": "Optional. When true, we will expand the search to beyond just the entities specified in [brand_entities] to other related knowledge graph entities similar to the brand. The default value is `false`.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_YouTubeChannels": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateCreatorInsightsRequest_YouTubeChannels",
      "description": "A collection of YouTube Channels.",
      "type": "object",
      "properties": {
        "youtubeChannels": {
          "description": "Optional. The YouTube Channel IDs to fetch creator insights for.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateCreatorInsightsResponse",
      "description": "Response message for ContentCreatorInsightsService.GenerateCreatorInsights.",
      "type": "object",
      "properties": {
        "creatorInsights": {
          "description": "A collection of YouTube Creators, each containing a collection of YouTube Channels maintained by the YouTube Creator.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__YouTubeCreatorInsights"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__YouTubeCreatorInsights": {
      "id": "GoogleAdsGoogleadsV21Services__YouTubeCreatorInsights",
      "description": "A YouTube creator and the insights for this creator.",
      "type": "object",
      "properties": {
        "creatorName": {
          "description": "The name of the creator.",
          "type": "string"
        },
        "creatorChannels": {
          "description": "The list of YouTube Channels",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__YouTubeChannelInsights"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__YouTubeChannelInsights": {
      "id": "GoogleAdsGoogleadsV21Services__YouTubeChannelInsights",
      "description": "YouTube Channel insights, and its metadata (such as channel name and channel ID), returned for a creator insights response.",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "The name of the YouTube Channel.",
          "type": "string"
        },
        "youtubeChannel": {
          "description": "The YouTube Channel ID.",
          "$ref": "GoogleAdsGoogleadsV21Common__YouTubeChannelInfo"
        },
        "channelUrl": {
          "description": "URL for the channel in the form of https://www.youtube.com/channel/{channel_id}.",
          "type": "string"
        },
        "channelDescription": {
          "description": "Description of the channel.",
          "type": "string"
        },
        "handle": {
          "description": "The unique, short, and user-visible identifier for the channel starting with an \"@\" symbol (such as \"@youtubecreators\"). See https://support.google.com/youtube/answer/11585688 for more information.",
          "type": "string"
        },
        "thumbnailUrl": {
          "description": "URL for a 240px by 240px thumbnail image of the channel.",
          "type": "string"
        },
        "publishDate": {
          "description": "The date that the channel was created. Formatted as \"yyyy-mm-dd\".",
          "type": "string"
        },
        "countryLocation": {
          "description": "The country with which the channel is associated.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "channelMetrics": {
          "description": "The metrics for a YouTube Channel.",
          "$ref": "GoogleAdsGoogleadsV21Services__YouTubeMetrics"
        },
        "channelAudienceAttributes": {
          "description": "The types of audiences and demographics linked to the channel's main audience. Audiences and demographics have a breakdown of subscriber share across dimensions of the same value, such as Age Range, Gender, and User Interest.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        },
        "channelAttributes": {
          "description": "The attributes associated with the content made by a channel.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        },
        "topVideos": {
          "description": "The top 10 videos for the channel.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
          }
        },
        "channelType": {
          "description": "Metadata string associated with the type of channel.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__YouTubeMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__YouTubeMetrics",
      "description": "YouTube Channel metrics.",
      "type": "object",
      "properties": {
        "subscriberCount": {
          "description": "The number of subscribers.",
          "type": "string",
          "format": "int64"
        },
        "viewsCount": {
          "description": "The total number of views.",
          "type": "string",
          "format": "int64"
        },
        "videoCount": {
          "description": "The total number of videos.",
          "type": "string",
          "format": "int64"
        },
        "likesCount": {
          "description": "The total number of likes across all videos of this channel.",
          "type": "string",
          "format": "int64"
        },
        "sharesCount": {
          "description": "The total number of shares across all videos of this channel.",
          "type": "string",
          "format": "int64"
        },
        "commentsCount": {
          "description": "The total number of comments across all videos of this channel.",
          "type": "string",
          "format": "int64"
        },
        "engagementRate": {
          "description": "The lifetime engagement rate of this channel. The value is computed as the total number of likes, shares, and comments across all videos divided by the total number of videos.",
          "type": "number",
          "format": "double"
        },
        "averageViewsPerVideo": {
          "description": "The average number of views per video in the last 28 days.",
          "type": "number",
          "format": "double"
        },
        "averageLikesPerVideo": {
          "description": "The average number of likes per video in the last 28 days.",
          "type": "number",
          "format": "double"
        },
        "averageSharesPerVideo": {
          "description": "The average number of shares per video in the last 28 days.",
          "type": "number",
          "format": "double"
        },
        "averageCommentsPerVideo": {
          "description": "The average number of comments per video in the last 28 days.",
          "type": "number",
          "format": "double"
        },
        "shortsViewsCount": {
          "description": "The total number of views across all Shorts videos of this channel.",
          "type": "string",
          "format": "int64"
        },
        "shortsVideoCount": {
          "description": "The total number of Shorts videos.",
          "type": "string",
          "format": "int64"
        },
        "isActiveShortsCreator": {
          "description": "When true, this channel has published a Shorts video in the last 90 days.",
          "type": "boolean"
        },
        "isBrandConnectCreator": {
          "description": "When true, this creator can be partnered with to create original branded content using the Google Ads creator partnership platform, BrandConnect. See https://support.google.com/google-ads/answer/13828964 for more information about BrandConnect.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsRequest",
      "description": "Request message for [ContentCreatorInsightsService.GenerateTrendingInsights]",
      "type": "object",
      "properties": {
        "customerInsightsGroup": {
          "description": "Required. The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "insightsApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        },
        "countryLocation": {
          "description": "Required. The country to find trends in.",
          "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
        },
        "searchAudience": {
          "description": "An audience to search for trending content in.",
          "$ref": "GoogleAdsGoogleadsV21Services__SearchAudience"
        },
        "searchTopics": {
          "description": "Content topics to return trend information for.",
          "$ref": "GoogleAdsGoogleadsV21Services__SearchTopics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchAudience": {
      "id": "GoogleAdsGoogleadsV21Services__SearchAudience",
      "description": "A collection of audience attributes that describe an audience of viewers. This is used to search for topics trending for the defined audience.",
      "type": "object",
      "properties": {
        "audienceAttributes": {
          "description": "Required. Audience attributes that describe an audience of viewers. This is used to search for topics trending for the defined audience.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchTopics": {
      "id": "GoogleAdsGoogleadsV21Services__SearchTopics",
      "description": "A collection of content topics to return trend information for.",
      "type": "object",
      "properties": {
        "entities": {
          "description": "Required. A list of knowledge graph entities to retrieve trend information for. Supported entities are tagged with InsightsKnowledgeGraphEntityCapabilities.CONTENT_TRENDING_INSIGHTS.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsEntity"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateTrendingInsightsResponse",
      "description": "Response message for [ContentCreatorInsightsService.GenerateTrendingInsights]",
      "type": "object",
      "properties": {
        "trendInsights": {
          "description": "The list of trending insights for the given criteria.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__TrendInsight"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__TrendInsight": {
      "id": "GoogleAdsGoogleadsV21Services__TrendInsight",
      "description": "A trend insight for a given attribute.",
      "type": "object",
      "properties": {
        "trendAttribute": {
          "description": "The attribute this trend is for.",
          "$ref": "GoogleAdsGoogleadsV21Common__AudienceInsightsAttributeMetadata"
        },
        "trendMetrics": {
          "description": "Metrics associated with this trend.",
          "$ref": "GoogleAdsGoogleadsV21Services__TrendInsightMetrics"
        },
        "trend": {
          "description": "The direction of trend (such as RISING or DECLINING).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "This is a new trend.",
            "This trend has increased recently.",
            "This trend has remained stable.",
            "This trend is declining."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EMERGING",
            "RISING",
            "SUSTAINED",
            "DECLINING"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__TrendInsightMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__TrendInsightMetrics",
      "description": "Metrics associated with a trend insight.",
      "type": "object",
      "properties": {
        "viewsCount": {
          "description": "The number of views for this trend. This is only populated for SearchTopics requests.",
          "type": "string",
          "format": "int64"
        },
        "audienceShare": {
          "description": "The fraction (from 0 to 1 inclusive) of the requested audience that has has searched or viewed this trend. This is only populated for SearchAudience requests.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsRequest",
      "description": "Request message for ConversionAdjustmentUploadService.UploadConversionAdjustments.",
      "type": "object",
      "properties": {
        "conversionAdjustments": {
          "description": "Required. The conversion adjustments that are being uploaded.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionAdjustment"
          }
        },
        "partialFailure": {
          "description": "Required. If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. This should always be set to true. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "jobId": {
          "description": "Optional. Optional input to set job ID. Must be a non-negative number that is less than 2^31 if provided. If this field is not provided, the API will generate a job ID in the range [2^31, (2^63)-1]. The API will return the value for this request in the `job_id` field of the `UploadConversionAdjustmentsResponse`.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionAdjustment": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionAdjustment",
      "description": "A conversion adjustment.",
      "type": "object",
      "properties": {
        "gclidDateTimePair": {
          "description": "For adjustments, uniquely identifies a conversion that was reported without an order ID specified. If the adjustment_type is ENHANCEMENT, this value is optional but may be set in addition to the order_id.",
          "$ref": "GoogleAdsGoogleadsV21Services__GclidDateTimePair"
        },
        "orderId": {
          "description": "The order ID of the conversion to be adjusted. If the conversion was reported with an order ID specified, that order ID must be used as the identifier here. The order ID is required for enhancements.",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion adjustment. Note: Although this resource name consists of a customer id and a conversion action id, validation will ignore the customer id and use the conversion action id as the sole identifier of the conversion action.",
          "type": "string"
        },
        "adjustmentDateTime": {
          "description": "The date time at which the adjustment occurred. Must be after the conversion_date_time. The timezone must be specified. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "adjustmentType": {
          "description": "The adjustment type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represents value unknown in this version.",
            "Negates a conversion so that its total value and count are both zero.",
            "Changes the value of a conversion.",
            "Supplements an existing conversion with provided user identifiers and user agent, which can be used by Google to enhance the conversion count."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RETRACTION",
            "RESTATEMENT",
            "ENHANCEMENT"
          ]
        },
        "restatementValue": {
          "description": "Information needed to restate the conversion's value. Required for restatements. Should not be supplied for retractions. An error will be returned if provided for a retraction. NOTE: If you want to upload a second restatement with a different adjusted value, it must have a new, more recent, adjustment occurrence time. Otherwise, it will be treated as a duplicate of the previous restatement and ignored.",
          "$ref": "GoogleAdsGoogleadsV21Services__RestatementValue"
        },
        "userIdentifiers": {
          "description": "The user identifiers to enhance the original conversion. ConversionAdjustmentUploadService only accepts user identifiers in enhancements. The maximum number of user identifiers for each enhancement is 5.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserIdentifier"
          }
        },
        "userAgent": {
          "description": "The user agent to enhance the original conversion. This can be found in your user's HTTP request header when they convert on your web page. Example, \"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X)\". User agent can only be specified in enhancements with user identifiers. This should match the user agent of the request that sent the original conversion so the conversion and its enhancement are either both attributed as same-device or both attributed as cross-device.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GclidDateTimePair": {
      "id": "GoogleAdsGoogleadsV21Services__GclidDateTimePair",
      "description": "Uniquely identifies a conversion that was reported without an order ID specified.",
      "type": "object",
      "properties": {
        "gclid": {
          "description": "Google click ID (gclid) associated with the original conversion for this adjustment.",
          "type": "string"
        },
        "conversionDateTime": {
          "description": "The date time at which the original conversion for this adjustment occurred. The timezone must be specified. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RestatementValue": {
      "id": "GoogleAdsGoogleadsV21Services__RestatementValue",
      "description": "Contains information needed to restate a conversion's value.",
      "type": "object",
      "properties": {
        "adjustedValue": {
          "description": "The restated conversion value. This is the value of the conversion after restatement. For example, to change the value of a conversion from 100 to 70, an adjusted value of 70 should be reported. NOTE: If you want to upload a second restatement with a different adjusted value, it must have a new, more recent, adjustment occurrence time. Otherwise, it will be treated as a duplicate of the previous restatement and ignored.",
          "type": "number",
          "format": "double"
        },
        "currencyCode": {
          "description": "The currency of the restated value. If not provided, then the default currency from the conversion action is used, and if that is not set then the account currency is used. This is the ISO 4217 3-character currency code for example, USD or EUR.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserIdentifier": {
      "id": "GoogleAdsGoogleadsV21Common__UserIdentifier",
      "description": "User identifying information.",
      "type": "object",
      "properties": {
        "userIdentifierSource": {
          "description": "Source of the user identifier when the upload is from Store Sales, ConversionUploadService, or ConversionAdjustmentUploadService.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version",
            "Indicates that the user identifier was provided by the first party (advertiser).",
            "Indicates that the user identifier was provided by the third party (partner)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FIRST_PARTY",
            "THIRD_PARTY"
          ]
        },
        "hashedEmail": {
          "description": "Hashed email address using SHA-256 hash function after normalization. Accepted for Customer Match, Store Sales, ConversionUploadService, and ConversionAdjustmentUploadService.",
          "type": "string"
        },
        "hashedPhoneNumber": {
          "description": "Hashed phone number using SHA-256 hash function after normalization (E164 standard). Accepted for Customer Match, Store Sales, ConversionUploadService, and ConversionAdjustmentUploadService.",
          "type": "string"
        },
        "mobileId": {
          "description": "Mobile device ID (advertising ID/IDFA). Accepted only for Customer Match.",
          "type": "string"
        },
        "thirdPartyUserId": {
          "description": "Advertiser-assigned user ID for Customer Match upload, or third-party-assigned user ID for Store Sales. Accepted only for Customer Match and Store Sales.",
          "type": "string"
        },
        "addressInfo": {
          "description": "Address information. Accepted only for Customer Match, Store Sales, and ConversionAdjustmentUploadService.",
          "$ref": "GoogleAdsGoogleadsV21Common__OfflineUserAddressInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__OfflineUserAddressInfo": {
      "id": "GoogleAdsGoogleadsV21Common__OfflineUserAddressInfo",
      "description": "Address identifier of offline data.",
      "type": "object",
      "properties": {
        "hashedFirstName": {
          "description": "First name of the user, which is hashed as SHA-256 after normalized (Lowercase all characters; Remove any extra spaces before, after, and in between).",
          "type": "string"
        },
        "hashedLastName": {
          "description": "Last name of the user, which is hashed as SHA-256 after normalized (lower case only and no punctuation).",
          "type": "string"
        },
        "city": {
          "description": "City of the address. Only accepted for Store Sales and ConversionAdjustmentUploadService.",
          "type": "string"
        },
        "state": {
          "description": "State code of the address. Only accepted for Store Sales and ConversionAdjustmentUploadService.",
          "type": "string"
        },
        "countryCode": {
          "description": "2-letter country code in ISO-3166-1 alpha-2 of the user's address.",
          "type": "string"
        },
        "postalCode": {
          "description": "Postal code of the user's address.",
          "type": "string"
        },
        "hashedStreetAddress": {
          "description": "The street address of the user hashed using SHA-256 hash function after normalization (lower case only). Only accepted for ConversionAdjustmentUploadService.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UploadConversionAdjustmentsResponse",
      "description": "Response message for ConversionAdjustmentUploadService.UploadConversionAdjustments.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to conversion adjustment failures in the partial failure mode. Returned when all errors occur inside the adjustments. If any errors occur outside the adjustments (for example, auth errors), we return an RPC level error. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "Returned for successfully processed conversion adjustments. Proto will be empty for rows that received an error. Results are not returned when validate_only is true.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionAdjustmentResult"
          }
        },
        "jobId": {
          "description": "Job ID for the upload batch.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionAdjustmentResult": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionAdjustmentResult",
      "description": "Information identifying a successfully processed ConversionAdjustment.",
      "type": "object",
      "properties": {
        "gclidDateTimePair": {
          "description": "The gclid and conversion date time of the conversion.",
          "$ref": "GoogleAdsGoogleadsV21Services__GclidDateTimePair"
        },
        "orderId": {
          "description": "The order ID of the conversion to be adjusted.",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion adjustment.",
          "type": "string"
        },
        "adjustmentDateTime": {
          "description": "The date time at which the adjustment occurred. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "adjustmentType": {
          "description": "The adjustment type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Represents value unknown in this version.",
            "Negates a conversion so that its total value and count are both zero.",
            "Changes the value of a conversion.",
            "Supplements an existing conversion with provided user identifiers and user agent, which can be used by Google to enhance the conversion count."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RETRACTION",
            "RESTATEMENT",
            "ENHANCEMENT"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadClickConversionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UploadClickConversionsRequest",
      "description": "Request message for ConversionUploadService.UploadClickConversions.",
      "type": "object",
      "properties": {
        "conversions": {
          "description": "Required. The conversions that are being uploaded.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ClickConversion"
          }
        },
        "partialFailure": {
          "description": "Required. If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. This should always be set to true. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "jobId": {
          "description": "Optional. Optional input to set job ID. Must be a non-negative number that is less than 2^31 if provided. If this field is not provided, the API will generate a job ID in the range [2^31, (2^63)-1]. The API will return the value for this request in the `job_id` field of the `UploadClickConversionsResponse`.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ClickConversion": {
      "id": "GoogleAdsGoogleadsV21Services__ClickConversion",
      "description": "A click conversion.",
      "type": "object",
      "properties": {
        "gclid": {
          "description": "The Google click ID (gclid) associated with this conversion.",
          "type": "string"
        },
        "gbraid": {
          "description": "The click identifier for clicks associated with app conversions and originating from iOS devices starting with iOS14.",
          "type": "string"
        },
        "wbraid": {
          "description": "The click identifier for clicks associated with web conversions and originating from iOS devices starting with iOS14.",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion. Note: Although this resource name consists of a customer id and a conversion action id, validation will ignore the customer id and use the conversion action id as the sole identifier of the conversion action.",
          "type": "string"
        },
        "conversionDateTime": {
          "description": "The date time at which the conversion occurred. Must be after the click time. The timezone must be specified. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "conversionValue": {
          "description": "The value of the conversion for the advertiser.",
          "type": "number",
          "format": "double"
        },
        "currencyCode": {
          "description": "Currency associated with the conversion value. This is the ISO 4217 3-character currency code. For example: USD, EUR.",
          "type": "string"
        },
        "orderId": {
          "description": "The order ID associated with the conversion. An order id can only be used for one conversion per conversion action.",
          "type": "string"
        },
        "externalAttributionData": {
          "description": "Additional data about externally attributed conversions. This field is required for conversions with an externally attributed conversion action, but should not be set otherwise.",
          "$ref": "GoogleAdsGoogleadsV21Services__ExternalAttributionData"
        },
        "customVariables": {
          "description": "The custom variables associated with this conversion.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomVariable"
          }
        },
        "cartData": {
          "description": "The cart data associated with this conversion.",
          "$ref": "GoogleAdsGoogleadsV21Services__CartData"
        },
        "userIdentifiers": {
          "description": "The user identifiers associated with this conversion. Only hashed_email and hashed_phone_number are supported for conversion uploads. The maximum number of user identifiers for each conversion is 5.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserIdentifier"
          }
        },
        "conversionEnvironment": {
          "description": "The environment this conversion was recorded on, for example, App or Web.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The conversion was recorded on an app.",
            "The conversion was recorded on a website."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "APP",
            "WEB"
          ]
        },
        "consent": {
          "description": "The consent setting for the event.",
          "$ref": "GoogleAdsGoogleadsV21Common__Consent"
        },
        "customerType": {
          "description": "Type of the customer associated with the conversion (new or returning). Accessible only to customers on the allow-list.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Converting user is new to the advertiser.",
            "Converting user is returning to the advertiser. Definition of returning differs among conversion types, such as a second store visit versus a second online purchase."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NEW",
            "RETURNING"
          ]
        },
        "userIpAddress": {
          "description": "The IP address of the customer when they arrived on the landing page after an ad click but before a conversion event. This is the IP address of the customer's device, not the advertiser's server. Google Ads does not support IP address matching for end users in the European Economic Area (EEA), United Kingdom (UK), or Switzerland (CH). Add logic to conditionally exclude sharing IP addresses from users from these regions and ensure that you provide users with clear and comprehensive information about the data you collect on your sites, apps, and other properties and get consent where required by law or any applicable Google policies. See the https://support.google.com/google-ads/answer/2998031 page for more details.",
          "type": "string"
        },
        "sessionAttributesEncoded": {
          "description": "The session attributes for the event, represented as a base64-encoded JSON string. The content should be generated by Google-provided library. To set session attributes individually, use session_attributes_key_value_pairs instead.",
          "type": "string",
          "format": "byte"
        },
        "sessionAttributesKeyValuePairs": {
          "description": "The session attributes for the event, represented as key-value pairs.",
          "$ref": "GoogleAdsGoogleadsV21Services__SessionAttributesKeyValuePairs"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ExternalAttributionData": {
      "id": "GoogleAdsGoogleadsV21Services__ExternalAttributionData",
      "description": "Contains additional information about externally attributed conversions.",
      "type": "object",
      "properties": {
        "externalAttributionCredit": {
          "description": "Represents the fraction of the conversion that is attributed to the Google Ads click.",
          "type": "number",
          "format": "double"
        },
        "externalAttributionModel": {
          "description": "Specifies the attribution model name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomVariable": {
      "id": "GoogleAdsGoogleadsV21Services__CustomVariable",
      "description": "A custom variable.",
      "type": "object",
      "properties": {
        "conversionCustomVariable": {
          "description": "Resource name of the custom variable associated with this conversion. Note: Although this resource name consists of a customer id and a conversion custom variable id, validation will ignore the customer id and use the conversion custom variable id as the sole identifier of the conversion custom variable.",
          "type": "string"
        },
        "value": {
          "description": "The value string of this custom variable. The value of the custom variable should not contain private customer data, such as email addresses or phone numbers.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CartData": {
      "id": "GoogleAdsGoogleadsV21Services__CartData",
      "description": "Contains additional information about cart data.",
      "type": "object",
      "properties": {
        "merchantId": {
          "description": "The Merchant Center ID where the items are uploaded.",
          "type": "string",
          "format": "int64"
        },
        "feedCountryCode": {
          "description": "The country code associated with the feed where the items are uploaded.",
          "type": "string"
        },
        "feedLanguageCode": {
          "description": "The language code associated with the feed where the items are uploaded.",
          "type": "string"
        },
        "localTransactionCost": {
          "description": "Sum of all transaction level discounts, such as free shipping and coupon discounts for the whole cart. The currency code is the same as that in the ClickConversion message.",
          "type": "number",
          "format": "double"
        },
        "items": {
          "description": "Data of the items purchased.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_CartData_Item"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_CartData_Item": {
      "id": "GoogleAdsGoogleadsV21Services_CartData_Item",
      "description": "Contains data of the items purchased.",
      "type": "object",
      "properties": {
        "productId": {
          "description": "The shopping id of the item. Must be equal to the Merchant Center product identifier.",
          "type": "string"
        },
        "quantity": {
          "description": "Number of items sold.",
          "type": "integer",
          "format": "int32"
        },
        "unitPrice": {
          "description": "Unit price excluding tax, shipping, and any transaction level discounts. The currency code is the same as that in the ClickConversion message.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SessionAttributesKeyValuePairs": {
      "id": "GoogleAdsGoogleadsV21Services__SessionAttributesKeyValuePairs",
      "description": "Contains session attributes of the conversion, represented as key-value pairs.",
      "type": "object",
      "properties": {
        "keyValuePairs": {
          "description": "Required. The session attributes for the conversion.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__SessionAttributeKeyValuePair"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SessionAttributeKeyValuePair": {
      "id": "GoogleAdsGoogleadsV21Services__SessionAttributeKeyValuePair",
      "description": "Contains one session attribute of the conversion.",
      "type": "object",
      "properties": {
        "sessionAttributeKey": {
          "description": "Required. The name of the session attribute.",
          "type": "string"
        },
        "sessionAttributeValue": {
          "description": "Required. The value of the session attribute.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadClickConversionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UploadClickConversionsResponse",
      "description": "Response message for ConversionUploadService.UploadClickConversions.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to conversion failures in the partial failure mode. Returned when all errors occur inside the conversions. If any errors occur outside the conversions (for example, auth errors), we return an RPC level error. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "Returned for successfully processed conversions. Proto will be empty for rows that received an error. Results are not returned when validate_only is true.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ClickConversionResult"
          }
        },
        "jobId": {
          "description": "Job ID for the upload batch.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ClickConversionResult": {
      "id": "GoogleAdsGoogleadsV21Services__ClickConversionResult",
      "description": "Identifying information for a successfully processed ClickConversion.",
      "type": "object",
      "properties": {
        "gclid": {
          "description": "The Google Click ID (gclid) associated with this conversion.",
          "type": "string"
        },
        "gbraid": {
          "description": "The click identifier for clicks associated with app conversions and originating from iOS devices starting with iOS14.",
          "type": "string"
        },
        "wbraid": {
          "description": "The click identifier for clicks associated with web conversions and originating from iOS devices starting with iOS14.",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion.",
          "type": "string"
        },
        "conversionDateTime": {
          "description": "The date time at which the conversion occurred. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "userIdentifiers": {
          "description": "The user identifiers associated with this conversion. Only hashed_email and hashed_phone_number are supported for conversion uploads. The maximum number of user identifiers for each conversion is 5.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserIdentifier"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadCallConversionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UploadCallConversionsRequest",
      "description": "Request message for ConversionUploadService.UploadCallConversions.",
      "type": "object",
      "properties": {
        "conversions": {
          "description": "Required. The conversions that are being uploaded.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CallConversion"
          }
        },
        "partialFailure": {
          "description": "Required. If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. This should always be set to true. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CallConversion": {
      "id": "GoogleAdsGoogleadsV21Services__CallConversion",
      "description": "A call conversion.",
      "type": "object",
      "properties": {
        "callerId": {
          "description": "The caller id from which this call was placed. Caller id is expected to be in E.164 format with preceding '+' sign, for example, \"+16502531234\".",
          "type": "string"
        },
        "callStartDateTime": {
          "description": "The date time at which the call occurred. The timezone must be specified. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion. Note: Although this resource name consists of a customer id and a conversion action id, validation will ignore the customer id and use the conversion action id as the sole identifier of the conversion action.",
          "type": "string"
        },
        "conversionDateTime": {
          "description": "The date time at which the conversion occurred. Must be after the call time. The timezone must be specified. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "conversionValue": {
          "description": "The value of the conversion for the advertiser.",
          "type": "number",
          "format": "double"
        },
        "currencyCode": {
          "description": "Currency associated with the conversion value. This is the ISO 4217 3-character currency code. For example: USD, EUR.",
          "type": "string"
        },
        "customVariables": {
          "description": "The custom variables associated with this conversion.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomVariable"
          }
        },
        "consent": {
          "description": "The consent setting for the event.",
          "$ref": "GoogleAdsGoogleadsV21Common__Consent"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadCallConversionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UploadCallConversionsResponse",
      "description": "Response message for ConversionUploadService.UploadCallConversions.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to conversion failures in the partial failure mode. Returned when all errors occur inside the conversions. If any errors occur outside the conversions (for example, auth errors), we return an RPC level error. See https://developers.google.com/google-ads/api/docs/best-practices/partial-failures for more information about partial failure.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "Returned for successfully processed conversions. Proto will be empty for rows that received an error. Results are not returned when validate_only is true.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CallConversionResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CallConversionResult": {
      "id": "GoogleAdsGoogleadsV21Services__CallConversionResult",
      "description": "Identifying information for a successfully processed CallConversionUpload.",
      "type": "object",
      "properties": {
        "callerId": {
          "description": "The caller id from which this call was placed. Caller id is expected to be in E.164 format with preceding '+' sign.",
          "type": "string"
        },
        "callStartDateTime": {
          "description": "The date time at which the call occurred. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "conversionAction": {
          "description": "Resource name of the conversion action associated with this conversion.",
          "type": "string"
        },
        "conversionDateTime": {
          "description": "The date time at which the conversion occurred. The format is \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesRequest",
      "description": "Request message for CustomAudienceService.MutateCustomAudiences.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual custom audiences.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomAudienceOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomAudienceOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomAudienceOperation",
      "description": "A single operation (create, update) on a custom audience.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new custom audience.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomAudience"
        },
        "update": {
          "description": "Update operation: The custom audience is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomAudience"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed custom audience is expected, in this format: `customers/{customer_id}/customAudiences/{custom_audience_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomAudiencesResponse",
      "description": "Response message for custom audience mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomAudienceResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomAudienceResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomAudienceResult",
      "description": "The result for the custom audience mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomInterestsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomInterestsRequest",
      "description": "Request message for CustomInterestService.MutateCustomInterests.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual custom interests.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomInterestOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomInterestOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomInterestOperation",
      "description": "A single operation (create, update) on a custom interest.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new custom interest.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomInterest"
        },
        "update": {
          "description": "Update operation: The custom interest is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomInterest"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomInterestsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomInterestsResponse",
      "description": "Response message for custom interest mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomInterestResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomInterestResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomInterestResult",
      "description": "The result for the custom interest mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsRequest",
      "description": "Request message for CustomerAssetSetService.MutateCustomerAssetSets.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customer asset sets.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerAssetSetOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "responseContentType": {
          "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.",
          "type": "string",
          "enumDescriptions": [
            "Not specified. Will return the resource name only in the response.",
            "The mutate response will be the resource name.",
            "The mutate response will contain the resource name and the resource with mutable fields if possible. Otherwise, only the resource name will be returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "RESOURCE_NAME_ONLY",
            "MUTABLE_RESOURCE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerAssetSetOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerAssetSetOperation",
      "description": "A single operation (create, remove) on a customer asset set.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new customer asset set.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAssetSet"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed customer asset set is expected, in this format: `customers/{customer_id}/customerAssetSets/{asset_set_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetsResponse",
      "description": "Response message for a customer asset set mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (e.g. auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerAssetSetResult",
      "description": "The result for the customer asset set mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        },
        "customerAssetSet": {
          "description": "The mutated customer asset set with only mutable fields after mutate. The field will only be returned when response_content_type is set to \"MUTABLE_RESOURCE\".",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerAssetSet"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkRequest",
      "description": "Request message for CustomerClientLinkService.MutateCustomerClientLink.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on the individual CustomerClientLink.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerClientLinkOperation"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerClientLinkOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerClientLinkOperation",
      "description": "A single operation (create, update) on a CustomerClientLink.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: No resource name is expected for the new link.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerClientLink"
        },
        "update": {
          "description": "Update operation: The link is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerClientLink"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResponse",
      "description": "Response message for a CustomerClientLink mutate.",
      "type": "object",
      "properties": {
        "result": {
          "description": "A result that identifies the resource affected by the mutate request.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerClientLinkResult",
      "description": "The result for a single customer client link mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsRequest",
      "description": "Request message for CustomerLifecycleGoalService.configureCustomerLifecycleGoals.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform customer lifecycle goal update.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerLifecycleGoalOperation"
        },
        "validateOnly": {
          "description": "Optional. If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerLifecycleGoalOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerLifecycleGoalOperation",
      "description": "A single operation on a customer lifecycle goal.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "Optional. FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "create": {
          "description": "Create operation: Create a new customer lifecycle goal.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerLifecycleGoal"
        },
        "update": {
          "description": "Update operation: Update an existing customer lifecycle goal.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerLifecycleGoal"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResponse",
      "description": "Response message for CustomerLifecycleGoalService.configureCustomerLifecycleGoals.",
      "type": "object",
      "properties": {
        "result": {
          "description": "result for the customer lifecycle goal configuration.",
          "$ref": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResult": {
      "id": "GoogleAdsGoogleadsV21Services__ConfigureCustomerLifecycleGoalsResult",
      "description": "The result for the customer lifecycle goal configuration.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for the successful operation.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkRequest",
      "description": "Request message for CustomerManagerLinkService.MutateCustomerManagerLink.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on individual customer manager links.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CustomerManagerLinkOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerManagerLinkOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerManagerLinkOperation",
      "description": "Updates the status of a CustomerManagerLink. The following actions are possible: 1. Update operation with status ACTIVE accepts a pending invitation. 2. Update operation with status REFUSED declines a pending invitation. 3. Update operation with status INACTIVE terminates link to manager.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The link is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerManagerLink"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResponse",
      "description": "Response message for a CustomerManagerLink mutate.",
      "type": "object",
      "properties": {
        "results": {
          "description": "A result that identifies the resource affected by the mutate request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerManagerLinkResult",
      "description": "The result for the customer manager link mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MoveManagerLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MoveManagerLinkRequest",
      "description": "Request message for CustomerManagerLinkService.MoveManagerLink.",
      "type": "object",
      "properties": {
        "previousCustomerManagerLink": {
          "description": "Required. The resource name of the previous CustomerManagerLink. The resource name has the form: `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`",
          "type": "string"
        },
        "newManager": {
          "description": "Required. The resource name of the new manager customer that the client wants to move to. Customer resource names have the format: \"customers/{customer_id}\"",
          "type": "string"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MoveManagerLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MoveManagerLinkResponse",
      "description": "Response message for a CustomerManagerLink moveManagerLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations. Represents a CustomerManagerLink resource of the newly created link between client customer and new manager customer.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaRequest",
      "description": "Request message for CustomerSkAdNetworkConversionValueSchemaService.MutateCustomerSkAdNetworkConversionValueSchema.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "The operation to perform.",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerSkAdNetworkConversionValueSchemaOperation"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "enableWarnings": {
          "description": "Optional. If true, enables returning warnings. Warnings return error messages and error codes without blocking the execution of the mutate operation.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerSkAdNetworkConversionValueSchemaOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerSkAdNetworkConversionValueSchemaOperation",
      "description": "A single update operation for a CustomerSkAdNetworkConversionValueSchema.",
      "type": "object",
      "properties": {
        "update": {
          "description": "Update operation: The schema is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerSkAdNetworkConversionValueSchema"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__CustomerSkAdNetworkConversionValueSchema": {
      "id": "GoogleAdsGoogleadsV21Resources__CustomerSkAdNetworkConversionValueSchema",
      "description": "A CustomerSkAdNetworkConversionValueSchema.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the schema. CustomerSkAdNetworkConversionValueSchema resource names have the form: customers/{customer_id}/customerSkAdNetworkConversionValueSchemas/{account_link_id}",
          "readOnly": true,
          "type": "string"
        },
        "schema": {
          "description": "Output only. The schema for the specified resource.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchema_SkAdNetworkConversionValueSchema"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchema_SkAdNetworkConversionValueSchema": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchema_SkAdNetworkConversionValueSchema",
      "description": "The CustomerLink specific SkAdNetworkConversionValueSchema.",
      "type": "object",
      "properties": {
        "appId": {
          "description": "Required. Output only. Apple App Store app ID.",
          "readOnly": true,
          "type": "string"
        },
        "measurementWindowHours": {
          "description": "Output only. A time window (measured in hours) post-install, after which the App Attribution Partner or advertiser stops calling [updateConversionValue] (https://developer.apple.com/documentation/storekit/skadnetwork/3566697-updateconversionvalue).",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "fineGrainedConversionValueMappings": {
          "description": "Output only. Fine grained conversion value mappings. For SkAdNetwork versions \u003e= 4.0 that support multiple conversion windows, fine grained conversion value mappings are only applicable to the first postback.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_FineGrainedConversionValueMappings"
          }
        },
        "postbackMappings": {
          "description": "Output only. Per-postback conversion value mappings for postbacks in multiple conversion windows. Only applicable for SkAdNetwork versions \u003e= 4.0.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_PostbackMapping"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_FineGrainedConversionValueMappings": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_FineGrainedConversionValueMappings",
      "description": "Mappings for fine grained conversion value.",
      "type": "object",
      "properties": {
        "fineGrainedConversionValue": {
          "description": "Output only. Fine grained conversion value. Valid values are in the inclusive range [0,63].",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "conversionValueMapping": {
          "description": "Output only. Conversion events the fine grained conversion value maps to.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping",
      "description": "Represents mapping from one conversion value to one or more conversion events.",
      "type": "object",
      "properties": {
        "minTimePostInstallHours": {
          "description": "Output only. The minimum of the time range in which a user was last active during the measurement window.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "maxTimePostInstallHours": {
          "description": "Output only. The maximum of the time range in which a user was last active during the measurement window.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "mappedEvents": {
          "description": "Output only. The conversion value may be mapped to multiple events with various attributes.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_Event"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_Event": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_Event",
      "description": "Defines a Google conversion event that the conversion value is mapped to.",
      "type": "object",
      "properties": {
        "mappedEventName": {
          "description": "Output only. Google event name represented by this conversion value.",
          "readOnly": true,
          "type": "string"
        },
        "currencyCode": {
          "description": "Output only. The reported currency for the event_revenue. ISO 4217 three-letter currency code, for example, \"USD\"",
          "readOnly": true,
          "type": "string"
        },
        "eventRevenueRange": {
          "description": "Output only. The event revenue range.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_RevenueRange"
        },
        "eventRevenueValue": {
          "description": "Output only. The specific event revenue value.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "eventOccurrenceRange": {
          "description": "Output only. The event counter range.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_EventOccurrenceRange"
        },
        "eventCounter": {
          "description": "Output only. For specific event counter values.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_RevenueRange": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_RevenueRange",
      "description": "Defines a range for revenue values.",
      "type": "object",
      "properties": {
        "minEventRevenue": {
          "description": "Output only. For revenue ranges, the minimum value in `currency_code` for which this conversion value would be updated. A value of 0 will be treated as unset.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        },
        "maxEventRevenue": {
          "description": "Output only. For revenue ranges, the maximum value in `currency_code` for which this conversion value would be updated. A value of 0 will be treated as unset.",
          "readOnly": true,
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_EventOccurrenceRange": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_EventOccurrenceRange",
      "description": "Defines a range for event counter values.",
      "type": "object",
      "properties": {
        "minEventCount": {
          "description": "Output only. For event counter ranges, the minimum of the defined range. A value of 0 will be treated as unset.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "maxEventCount": {
          "description": "Output only. For event counter ranges, the maximum of the defined range. A value of 0 will be treated as unset.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_PostbackMapping": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_PostbackMapping",
      "description": "Mappings for each postback in multiple conversion windows.",
      "type": "object",
      "properties": {
        "postbackSequenceIndex": {
          "description": "Output only. 0-based index that indicates the order of postback. Valid values are in the inclusive range [0,2].",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "coarseGrainedConversionValueMappings": {
          "description": "Output only. Conversion value mappings for all coarse grained conversion values.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_CoarseGrainedConversionValueMappings"
        },
        "lockWindowCoarseConversionValue": {
          "description": "Output only. Coarse grained conversion value that triggers conversion window lock.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "The value was not present in the postback or we do not have this data for other reasons.",
            "A low coarse conversion value.",
            "A medium coarse conversion value.",
            "A high coarse conversion value.",
            "A coarse conversion value was not configured."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNAVAILABLE",
            "LOW",
            "MEDIUM",
            "HIGH",
            "NONE"
          ]
        },
        "lockWindowFineConversionValue": {
          "description": "Output only. Fine grained conversion value that triggers conversion window lock.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "lockWindowEvent": {
          "description": "Output only. Event name that triggers conversion window lock.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_CoarseGrainedConversionValueMappings": {
      "id": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_CoarseGrainedConversionValueMappings",
      "description": "Mappings for coarse grained conversion values.",
      "type": "object",
      "properties": {
        "lowConversionValueMapping": {
          "description": "Output only. Mapping for \"low\" coarse conversion value.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping"
        },
        "mediumConversionValueMapping": {
          "description": "Output only. Mapping for \"medium\" coarse conversion value.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping"
        },
        "highConversionValueMapping": {
          "description": "Output only. Mapping for \"high\" coarse conversion value.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse",
      "description": "Response message for MutateCustomerSkAdNetworkConversionValueSchema.",
      "type": "object",
      "properties": {
        "result": {
          "description": "All results for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResult"
        },
        "warning": {
          "description": "Non blocking errors that provides schema validation failure details. Returned only when enable_warnings = true.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerSkAdNetworkConversionValueSchemaResult",
      "description": "The result for the CustomerSkAdNetworkConversionValueSchema mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Resource name of the customer that was modified.",
          "type": "string"
        },
        "appId": {
          "description": "App ID of the SkanConversionValue modified.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationRequest",
      "description": "Request message for CustomerUserAccessInvitationService.MutateCustomerUserAccessInvitation",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on the access invitation",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerUserAccessInvitationOperation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerUserAccessInvitationOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerUserAccessInvitationOperation",
      "description": "A single operation (create or remove) on customer user access invitation.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Create operation: No resource name is expected for the new access invitation.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerUserAccessInvitation"
        },
        "remove": {
          "description": "Remove operation: A resource name for the revoke invitation is expected, in this format: `customers/{customer_id}/customerUserAccessInvitations/{invitation_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResponse",
      "description": "Response message for access invitation mutate.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessInvitationResult",
      "description": "The result for the access invitation mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessRequest",
      "description": "Mutate Request for CustomerUserAccessService.MutateCustomerUserAccess.",
      "type": "object",
      "properties": {
        "operation": {
          "description": "Required. The operation to perform on the customer",
          "$ref": "GoogleAdsGoogleadsV21Services__CustomerUserAccessOperation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CustomerUserAccessOperation": {
      "id": "GoogleAdsGoogleadsV21Services__CustomerUserAccessOperation",
      "description": "A single operation (update, remove) on customer user access.",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "FieldMask that determines which resource fields are modified in an update.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "update": {
          "description": "Update operation: The customer user access is expected to have a valid resource name.",
          "$ref": "GoogleAdsGoogleadsV21Resources__CustomerUserAccess"
        },
        "remove": {
          "description": "Remove operation: A resource name for the removed access is expected, in this format: `customers/{customer_id}/customerUserAccesses/{CustomerUserAccess.user_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResponse",
      "description": "Response message for customer user access mutate.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result for the mutate.",
          "$ref": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResult"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateCustomerUserAccessResult",
      "description": "The result for the customer user access mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateDataLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateDataLinkRequest",
      "description": "Request message for DataLinkService.CreateDataLink.",
      "type": "object",
      "properties": {
        "dataLink": {
          "description": "Required. The data link to be created.",
          "$ref": "GoogleAdsGoogleadsV21Resources__DataLink"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateDataLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateDataLinkResponse",
      "description": "Response message for DataLinkService.CreateDataLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations. Resource name of the data link.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveDataLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveDataLinkRequest",
      "description": "Request message for DataLinkService.RemoveDataLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Required. The data link is expected to have a valid resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveDataLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveDataLinkResponse",
      "description": "Response message for DataLinkService.RemoveDataLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Result for the remove request.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UpdateDataLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UpdateDataLinkRequest",
      "description": "Request message for DataLinkService.UpdateDataLink.",
      "type": "object",
      "properties": {
        "dataLinkStatus": {
          "description": "Required. The data link status to be updated to.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Link has been requested by one party, but not confirmed by the other party.",
            "Link is waiting for the customer to approve.",
            "Link is established and can be used as needed.",
            "Link is no longer valid and should be ignored.",
            "Link request has been cancelled by the requester and further cleanup may be needed.",
            "Link request has been rejected by the approver."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUESTED",
            "PENDING_APPROVAL",
            "ENABLED",
            "DISABLED",
            "REVOKED",
            "REJECTED"
          ]
        },
        "resourceName": {
          "description": "Required. The data link is expected to have a valid resource name.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UpdateDataLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UpdateDataLinkResponse",
      "description": "Response message for DataLinkService.UpdateDataLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations. Resource name of the data link.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsRequest",
      "description": "Request message for GeoTargetConstantService.SuggestGeoTargetConstants.",
      "type": "object",
      "properties": {
        "locale": {
          "description": "If possible, returned geo targets are translated using this locale. If not, en is used by default. This is also used as a hint for returned geo targets.",
          "type": "string"
        },
        "countryCode": {
          "description": "Returned geo targets are restricted to this country code.",
          "type": "string"
        },
        "locationNames": {
          "description": "The location names to search by. At most 25 names can be set.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_LocationNames"
        },
        "geoTargets": {
          "description": "The geo target constant resource names to filter by.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_GeoTargets"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_LocationNames": {
      "id": "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_LocationNames",
      "description": "A list of location names.",
      "type": "object",
      "properties": {
        "names": {
          "description": "A list of location names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_GeoTargets": {
      "id": "GoogleAdsGoogleadsV21Services_SuggestGeoTargetConstantsRequest_GeoTargets",
      "description": "A list of geo target constant resource names.",
      "type": "object",
      "properties": {
        "geoTargetConstants": {
          "description": "A list of geo target constant resource names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestGeoTargetConstantsResponse",
      "description": "Response message for GeoTargetConstantService.SuggestGeoTargetConstants.",
      "type": "object",
      "properties": {
        "geoTargetConstantSuggestions": {
          "description": "Geo target constant suggestions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__GeoTargetConstantSuggestion"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GeoTargetConstantSuggestion": {
      "id": "GoogleAdsGoogleadsV21Services__GeoTargetConstantSuggestion",
      "description": "A geo target constant suggestion.",
      "type": "object",
      "properties": {
        "locale": {
          "description": "The language this GeoTargetConstantSuggestion is currently translated to. It affects the name of geo target fields. For example, if locale=en, then name=Spain. If locale=es, then name=España. The default locale will be returned if no translation exists for the locale in the request.",
          "type": "string"
        },
        "reach": {
          "description": "Approximate user population that will be targeted, rounded to the nearest 100.",
          "type": "string",
          "format": "int64"
        },
        "searchTerm": {
          "description": "If the request searched by location name, this is the location name that matched the geo target.",
          "type": "string"
        },
        "geoTargetConstant": {
          "description": "The GeoTargetConstant result.",
          "$ref": "GoogleAdsGoogleadsV21Resources__GeoTargetConstant"
        },
        "geoTargetConstantParents": {
          "description": "The list of parents of the geo target constant.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__GeoTargetConstant"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__GoogleAdsField": {
      "id": "GoogleAdsGoogleadsV21Resources__GoogleAdsField",
      "description": "A field or resource (artifact) used by GoogleAdsService.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the artifact. Artifact resource names have the form: `googleAdsFields/{name}`",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "Output only. The name of the artifact.",
          "readOnly": true,
          "type": "string"
        },
        "category": {
          "description": "Output only. The category of the artifact.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified",
            "Unknown",
            "The described artifact is a resource.",
            "The described artifact is a field and is an attribute of a resource. Including a resource attribute field in a query may segment the query if the resource to which it is attributed segments the resource found in the FROM clause.",
            "The described artifact is a field and always segments search queries.",
            "The described artifact is a field and is a metric. It never segments search queries."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESOURCE",
            "ATTRIBUTE",
            "SEGMENT",
            "METRIC"
          ]
        },
        "selectable": {
          "description": "Output only. Whether the artifact can be used in a SELECT clause in search queries.",
          "readOnly": true,
          "type": "boolean"
        },
        "filterable": {
          "description": "Output only. Whether the artifact can be used in a WHERE clause in search queries.",
          "readOnly": true,
          "type": "boolean"
        },
        "sortable": {
          "description": "Output only. Whether the artifact can be used in a ORDER BY clause in search queries.",
          "readOnly": true,
          "type": "boolean"
        },
        "selectableWith": {
          "description": "Output only. The names of all resources, segments, and metrics that are selectable with the described artifact.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "attributeResources": {
          "description": "Output only. The names of all resources that are selectable with the described artifact. Fields from these resources do not segment metrics when included in search queries. This field is only set for artifacts whose category is RESOURCE.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "metrics": {
          "description": "Output only. This field lists the names of all metrics that are selectable with the described artifact when it is used in the FROM clause. It is only set for artifacts whose category is RESOURCE.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "segments": {
          "description": "Output only. This field lists the names of all artifacts, whether a segment or another resource, that segment metrics when included in search queries and when the described artifact is used in the FROM clause. It is only set for artifacts whose category is RESOURCE.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enumValues": {
          "description": "Output only. Values the artifact can assume if it is a field of type ENUM. This field is only set for artifacts of category SEGMENT or ATTRIBUTE.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dataType": {
          "description": "Output only. This field determines the operators that can be used with the artifact in WHERE clauses.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified",
            "Unknown",
            "Maps to google.protobuf.BoolValue Applicable operators: =, !=",
            "Maps to google.protobuf.StringValue. It can be compared using the set of operators specific to dates however. Applicable operators: =, \u003c, \u003e, \u003c=, \u003e=, BETWEEN, DURING, and IN",
            "Maps to google.protobuf.DoubleValue Applicable operators: =, !=, \u003c, \u003e, IN, NOT IN",
            "Maps to an enum. It's specific definition can be found at type_url. Applicable operators: =, !=, IN, NOT IN",
            "Maps to google.protobuf.FloatValue Applicable operators: =, !=, \u003c, \u003e, IN, NOT IN",
            "Maps to google.protobuf.Int32Value Applicable operators: =, !=, \u003c, \u003e, \u003c=, \u003e=, BETWEEN, IN, NOT IN",
            "Maps to google.protobuf.Int64Value Applicable operators: =, !=, \u003c, \u003e, \u003c=, \u003e=, BETWEEN, IN, NOT IN",
            "Maps to a protocol buffer message type. The data type's details can be found in type_url. No operators work with MESSAGE fields.",
            "Maps to google.protobuf.StringValue. Represents the resource name (unique id) of a resource or one of its foreign keys. No operators work with RESOURCE_NAME fields.",
            "Maps to google.protobuf.StringValue. Applicable operators: =, !=, LIKE, NOT LIKE, IN, NOT IN",
            "Maps to google.protobuf.UInt64Value Applicable operators: =, !=, \u003c, \u003e, \u003c=, \u003e=, BETWEEN, IN, NOT IN"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BOOLEAN",
            "DATE",
            "DOUBLE",
            "ENUM",
            "FLOAT",
            "INT32",
            "INT64",
            "MESSAGE",
            "RESOURCE_NAME",
            "STRING",
            "UINT64"
          ]
        },
        "typeUrl": {
          "description": "Output only. The URL of proto describing the artifact's data type.",
          "readOnly": true,
          "type": "string"
        },
        "isRepeated": {
          "description": "Output only. Whether the field artifact is repeated.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsRequest",
      "description": "Request message for GoogleAdsFieldService.SearchGoogleAdsFields.",
      "type": "object",
      "properties": {
        "query": {
          "description": "Required. The query string.",
          "type": "string"
        },
        "pageToken": {
          "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from `next_page_token` in the previous response in order to request the next page of results.",
          "type": "string"
        },
        "pageSize": {
          "description": "Number of elements to retrieve in a single page. When too large a page is requested, the server may decide to further limit the number of returned resources.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SearchGoogleAdsFieldsResponse",
      "description": "Response message for GoogleAdsFieldService.SearchGoogleAdsFields.",
      "type": "object",
      "properties": {
        "results": {
          "description": "The list of fields that matched the query.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__GoogleAdsField"
          }
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        },
        "totalResultsCount": {
          "description": "Total number of results that match the query ignoring the LIMIT clause.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__StartIdentityVerificationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__StartIdentityVerificationRequest",
      "description": "Request message for [IdentityVerificationService.StartIdentityVerification].",
      "type": "object",
      "properties": {
        "verificationProgram": {
          "description": "Required. The verification program type for which we want to start the verification.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Advertiser submits documents to verify their identity."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER_IDENTITY_VERIFICATION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GetIdentityVerificationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GetIdentityVerificationResponse",
      "description": "Response message for [IdentityVerificationService.GetIdentityVerification].",
      "type": "object",
      "properties": {
        "identityVerification": {
          "description": "List of identity verifications for the customer.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__IdentityVerification"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__IdentityVerification": {
      "id": "GoogleAdsGoogleadsV21Services__IdentityVerification",
      "description": "An identity verification for a customer.",
      "type": "object",
      "properties": {
        "verificationProgram": {
          "description": "The verification program type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Advertiser submits documents to verify their identity."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ADVERTISER_IDENTITY_VERIFICATION"
          ]
        },
        "identityVerificationRequirement": {
          "description": "The verification requirement for this verification program for this customer.",
          "$ref": "GoogleAdsGoogleadsV21Services__IdentityVerificationRequirement"
        },
        "verificationProgress": {
          "description": "Information regarding progress for this verification program for this customer.",
          "$ref": "GoogleAdsGoogleadsV21Services__IdentityVerificationProgress"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__IdentityVerificationRequirement": {
      "id": "GoogleAdsGoogleadsV21Services__IdentityVerificationRequirement",
      "description": "Information regarding the verification requirement for a verification program type.",
      "type": "object",
      "properties": {
        "verificationStartDeadlineTime": {
          "description": "The deadline to start verification in \"yyyy-MM-dd HH:mm:ss\" format.",
          "type": "string"
        },
        "verificationCompletionDeadlineTime": {
          "description": "The deadline to submit verification.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__IdentityVerificationProgress": {
      "id": "GoogleAdsGoogleadsV21Services__IdentityVerificationProgress",
      "description": "Information regarding the verification progress for a verification program type.",
      "type": "object",
      "properties": {
        "programStatus": {
          "description": "Current Status (PENDING_USER_ACTION, SUCCESS, FAILURE etc)",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Verification is pending on user action to proceed.",
            "Verification is pending on review.",
            "Verification succeeded.",
            "Verification failed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PENDING_USER_ACTION",
            "PENDING_REVIEW",
            "SUCCESS",
            "FAILURE"
          ]
        },
        "invitationLinkExpirationTime": {
          "description": "The timestamp when the action url will expire in \"yyyy-MM-dd HH:mm:ss\" format.",
          "type": "string"
        },
        "actionUrl": {
          "description": "Action URL for user to complete verification for the given verification program type.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListInvoicesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListInvoicesResponse",
      "description": "Response message for InvoiceService.ListInvoices.",
      "type": "object",
      "properties": {
        "invoices": {
          "description": "The list of invoices that match the billing setup and time period.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Invoice"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__Invoice": {
      "id": "GoogleAdsGoogleadsV21Resources__Invoice",
      "description": "An invoice. All invoice information is snapshotted to match the PDF invoice. For invoices older than the launch of InvoiceService, the snapshotted information may not match the PDF invoice.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the invoice. Multiple customers can share a given invoice, so multiple resource names may point to the same invoice. Invoice resource names have the form: `customers/{customer_id}/invoices/{invoice_id}`",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. The ID of the invoice. It appears on the invoice PDF as \"Invoice number\".",
          "readOnly": true,
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of invoice.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "An invoice with a negative amount. The account receives a credit.",
            "An invoice with a positive amount. The account owes a balance."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CREDIT_MEMO",
            "INVOICE"
          ]
        },
        "billingSetup": {
          "description": "Output only. The resource name of this invoice's billing setup. `customers/{customer_id}/billingSetups/{billing_setup_id}`",
          "readOnly": true,
          "type": "string"
        },
        "paymentsAccountId": {
          "description": "Output only. A 16 digit ID used to identify the payments account associated with the billing setup, for example, \"1234-5678-9012-3456\". It appears on the invoice PDF as \"Billing Account Number\".",
          "readOnly": true,
          "type": "string"
        },
        "paymentsProfileId": {
          "description": "Output only. A 12 digit ID used to identify the payments profile associated with the billing setup, for example, \"1234-5678-9012\". It appears on the invoice PDF as \"Billing ID\".",
          "readOnly": true,
          "type": "string"
        },
        "issueDate": {
          "description": "Output only. The issue date in yyyy-mm-dd format. It appears on the invoice PDF as either \"Issue date\" or \"Invoice date\".",
          "readOnly": true,
          "type": "string"
        },
        "dueDate": {
          "description": "Output only. The due date in yyyy-mm-dd format.",
          "readOnly": true,
          "type": "string"
        },
        "serviceDateRange": {
          "description": "Output only. The service period date range of this invoice. The end date is inclusive.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        },
        "currencyCode": {
          "description": "Output only. The currency code. All costs are returned in this currency. A subset of the currency codes derived from the ISO 4217 standard is supported.",
          "readOnly": true,
          "type": "string"
        },
        "adjustmentsSubtotalAmountMicros": {
          "description": "Output only. The pretax subtotal amount of invoice level adjustments, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "adjustmentsTaxAmountMicros": {
          "description": "Output only. The sum of taxes on the invoice level adjustments, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "adjustmentsTotalAmountMicros": {
          "description": "Output only. The total amount of invoice level adjustments, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsSubtotalAmountMicros": {
          "description": "Output only. The pretax subtotal amount of invoice level regulatory costs, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsTaxAmountMicros": {
          "description": "Output only. The sum of taxes on the invoice level regulatory costs, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsTotalAmountMicros": {
          "description": "Output only. The total amount of invoice level regulatory costs, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeSubtotalAmountMicros": {
          "description": "Output only. The pretax subtotal amount of invoice level export charges, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeTaxAmountMicros": {
          "description": "Output only. The sum of taxes on the invoice level export charges, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeTotalAmountMicros": {
          "description": "Output only. The total amount of invoice level export charges, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "subtotalAmountMicros": {
          "description": "Output only. The pretax subtotal amount, in micros. This is equal to the sum of the AccountBudgetSummary subtotal amounts and Invoice.adjustments_subtotal_amount_micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "taxAmountMicros": {
          "description": "Output only. The sum of all taxes on the invoice, in micros. This equals the sum of the AccountBudgetSummary tax amounts, plus taxes not associated with a specific account budget.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "totalAmountMicros": {
          "description": "Output only. The total amount, in micros. This equals the sum of Invoice.subtotal_amount_micros, Invoice.tax_amount_micros, Invoice.regulatory_costs_subtotal_amount_micros, and Invoice.export_charge_subtotal_amount_micros (which is separated into a separate line item starting with V14.1).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "correctedInvoice": {
          "description": "Output only. The resource name of the original invoice corrected, wrote off, or canceled by this invoice, if applicable. If `corrected_invoice` is set, `replaced_invoices` will not be set. Invoice resource names have the form: `customers/{customer_id}/invoices/{invoice_id}`",
          "readOnly": true,
          "type": "string"
        },
        "replacedInvoices": {
          "description": "Output only. The resource name of the original invoice(s) being rebilled or replaced by this invoice, if applicable. There might be multiple replaced invoices due to invoice consolidation. The replaced invoices may not belong to the same payments account. If `replaced_invoices` is set, `corrected_invoice` will not be set. Invoice resource names have the form: `customers/{customer_id}/invoices/{invoice_id}`",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "pdfUrl": {
          "description": "Output only. The URL to a PDF copy of the invoice. Users need to pass in their OAuth token to request the PDF with this URL.",
          "readOnly": true,
          "type": "string"
        },
        "accountBudgetSummaries": {
          "description": "Output only. The list of summarized account budget information associated with this invoice.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Invoice_AccountBudgetSummary"
          }
        },
        "accountSummaries": {
          "description": "Output only. The list of summarized account information associated with this invoice.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Invoice_AccountSummary"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Invoice_AccountBudgetSummary": {
      "id": "GoogleAdsGoogleadsV21Resources_Invoice_AccountBudgetSummary",
      "description": "Represents a summarized account budget billable cost.",
      "type": "object",
      "properties": {
        "customer": {
          "description": "Output only. The resource name of the customer associated with this account budget. This contains the customer ID, which appears on the invoice PDF as \"Account ID\". Customer resource names have the form: `customers/{customer_id}`",
          "readOnly": true,
          "type": "string"
        },
        "customerDescriptiveName": {
          "description": "Output only. The descriptive name of the account budget's customer. It appears on the invoice PDF as \"Account\".",
          "readOnly": true,
          "type": "string"
        },
        "accountBudget": {
          "description": "Output only. The resource name of the account budget associated with this summarized billable cost. AccountBudget resource names have the form: `customers/{customer_id}/accountBudgets/{account_budget_id}`",
          "readOnly": true,
          "type": "string"
        },
        "accountBudgetName": {
          "description": "Output only. The name of the account budget. It appears on the invoice PDF as \"Account budget\".",
          "readOnly": true,
          "type": "string"
        },
        "purchaseOrderNumber": {
          "description": "Output only. The purchase order number of the account budget. It appears on the invoice PDF as \"Purchase order\".",
          "readOnly": true,
          "type": "string"
        },
        "subtotalAmountMicros": {
          "description": "Output only. The pretax subtotal amount attributable to this budget during the service period, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "taxAmountMicros": {
          "description": "Output only. The tax amount attributable to this budget during the service period, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "totalAmountMicros": {
          "description": "Output only. The total amount attributable to this budget during the service period, in micros. This equals the sum of the account budget subtotal amount and the account budget tax amount.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billableActivityDateRange": {
          "description": "Output only. The billable activity date range of the account budget, within the service date range of this invoice. The end date is inclusive. This can be different from the account budget's start and end time.",
          "readOnly": true,
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        },
        "servedAmountMicros": {
          "description": "Output only. The pretax served amount attributable to this budget during the service period, in micros. This is only useful to reconcile invoice and delivery data.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billedAmountMicros": {
          "description": "Output only. The pretax billed amount attributable to this budget during the service period, in micros. This does not account for any adjustments.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "overdeliveryAmountMicros": {
          "description": "Output only. The pretax overdelivery amount attributable to this budget during the service period, in micros (negative value).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "invalidActivityAmountMicros": {
          "description": "Output only. The pretax invalid activity amount attributable to this budget in previous months, in micros (negative value).",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "invalidActivitySummaries": {
          "description": "Output only. The list of summarized invalid activity credits with original linkages.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources_Invoice_InvalidActivitySummary"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Invoice_InvalidActivitySummary": {
      "id": "GoogleAdsGoogleadsV21Resources_Invoice_InvalidActivitySummary",
      "description": "Details about the invalid activity for the invoice that contain additional details about invoice against which corrections are made.",
      "type": "object",
      "properties": {
        "originalMonthOfService": {
          "description": "Output only. Original month of service related to this invalid activity credit.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "January.",
            "February.",
            "March.",
            "April.",
            "May.",
            "June.",
            "July.",
            "August.",
            "September.",
            "October.",
            "November.",
            "December."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ]
        },
        "originalYearOfService": {
          "description": "Output only. Original year of service related to this invalid activity credit.",
          "readOnly": true,
          "type": "string"
        },
        "originalInvoiceId": {
          "description": "Output only. Original invoice number related to this invalid activity credit.",
          "readOnly": true,
          "type": "string"
        },
        "originalAccountBudgetName": {
          "description": "Output only. Original account budget name related to this invalid activity credit.",
          "readOnly": true,
          "type": "string"
        },
        "originalPurchaseOrderNumber": {
          "description": "Output only. Original purchase order number related to this invalid activity credit.",
          "readOnly": true,
          "type": "string"
        },
        "amountMicros": {
          "description": "Output only. Invalid activity amount in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources_Invoice_AccountSummary": {
      "id": "GoogleAdsGoogleadsV21Resources_Invoice_AccountSummary",
      "description": "Represents a summarized view at account level.",
      "type": "object",
      "properties": {
        "customer": {
          "description": "Output only. The account associated with the account summary.",
          "readOnly": true,
          "type": "string"
        },
        "billingCorrectionSubtotalAmountMicros": {
          "description": "Output only. Pretax billing correction subtotal amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billingCorrectionTaxAmountMicros": {
          "description": "Output only. Tax on billing correction, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "billingCorrectionTotalAmountMicros": {
          "description": "Output only. Total billing correction amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "couponAdjustmentSubtotalAmountMicros": {
          "description": "Output only. Pretax coupon adjustment subtotal amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "couponAdjustmentTaxAmountMicros": {
          "description": "Output only. Tax on coupon adjustment, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "couponAdjustmentTotalAmountMicros": {
          "description": "Output only. Total coupon adjustment amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "excessCreditAdjustmentSubtotalAmountMicros": {
          "description": "Output only. Pretax excess credit adjustment subtotal amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "excessCreditAdjustmentTaxAmountMicros": {
          "description": "Output only. Tax on excess credit adjustment, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "excessCreditAdjustmentTotalAmountMicros": {
          "description": "Output only. Total excess credit adjustment amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsSubtotalAmountMicros": {
          "description": "Output only. Pretax regulatory costs subtotal amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsTaxAmountMicros": {
          "description": "Output only. Tax on regulatory costs, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "regulatoryCostsTotalAmountMicros": {
          "description": "Output only. Total regulatory costs amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeSubtotalAmountMicros": {
          "description": "Output only. Pretax export charge subtotal amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeTaxAmountMicros": {
          "description": "Output only. Tax on export charge, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "exportChargeTotalAmountMicros": {
          "description": "Output only. Total export charge amount, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "subtotalAmountMicros": {
          "description": "Output only. Total pretax subtotal amount attributable to the account during the service period, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "taxAmountMicros": {
          "description": "Output only. Total tax amount attributable to the account during the service period, in micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        },
        "totalAmountMicros": {
          "description": "Output only. Total amount attributable to the account during the service period, in micros. This equals the sum of the subtotal_amount_micros and tax_amount_micros.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeasRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeasRequest",
      "description": "Request message for KeywordPlanIdeaService.GenerateKeywordIdeas.",
      "type": "object",
      "properties": {
        "language": {
          "description": "The resource name of the language to target. Each keyword belongs to some set of languages; a keyword is included if language is one of its languages. If not set, all keywords will be included.",
          "type": "string"
        },
        "geoTargetConstants": {
          "description": "The resource names of the location to target. Maximum is 10. An empty list MAY be used to specify all targeting geos.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "includeAdultKeywords": {
          "description": "If true, adult keywords will be included in response. The default value is false.",
          "type": "boolean"
        },
        "pageToken": {
          "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. To request next page of results use the value obtained from `next_page_token` in the previous response. The request fields must match across pages.",
          "type": "string"
        },
        "pageSize": {
          "description": "Number of results to retrieve in a single page. A maximum of 10,000 results may be returned, if the page_size exceeds this, it is ignored. If unspecified, at most 10,000 results will be returned. The server may decide to further limit the number of returned resources. If the response contains fewer than 10,000 results it may not be assumed as last page of results.",
          "type": "integer",
          "format": "int32"
        },
        "keywordPlanNetwork": {
          "description": "Targeting network. If not set, Google Search And Partners Network will be used.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google Search.",
            "Google Search + Search partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_SEARCH",
            "GOOGLE_SEARCH_AND_PARTNERS"
          ]
        },
        "keywordAnnotation": {
          "description": "The keyword annotations to include in response.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "Return the keyword concept and concept group data."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "KEYWORD_CONCEPT"
            ]
          }
        },
        "aggregateMetrics": {
          "description": "The aggregate fields to include in response.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetrics"
        },
        "historicalMetricsOptions": {
          "description": "The options for historical metrics data.",
          "$ref": "GoogleAdsGoogleadsV21Common__HistoricalMetricsOptions"
        },
        "keywordAndUrlSeed": {
          "description": "A Keyword and a specific Url to generate ideas from for example, cars, www.example.com/cars.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordAndUrlSeed"
        },
        "keywordSeed": {
          "description": "A Keyword or phrase to generate ideas from, for example, cars.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordSeed"
        },
        "urlSeed": {
          "description": "A specific url to generate ideas from, for example, www.example.com/cars.",
          "$ref": "GoogleAdsGoogleadsV21Services__UrlSeed"
        },
        "siteSeed": {
          "description": "The site to generate ideas from, for example, www.example.com.",
          "$ref": "GoogleAdsGoogleadsV21Services__SiteSeed"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetrics": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetrics",
      "description": "The aggregate metrics specification of the request.",
      "type": "object",
      "properties": {
        "aggregateMetricTypes": {
          "description": "The list of aggregate metrics to fetch data.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "The device breakdown of aggregate search volume."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "DEVICE"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__HistoricalMetricsOptions": {
      "id": "GoogleAdsGoogleadsV21Common__HistoricalMetricsOptions",
      "description": "Historical metrics options.",
      "type": "object",
      "properties": {
        "yearMonthRange": {
          "description": "The year month range for historical metrics. If not specified, metrics for the past 12 months are returned. Search metrics are available for the past 4 years. If the search volume is not available for the entire year_month_range provided, the subset of the year month range for which search volume is available are returned.",
          "$ref": "GoogleAdsGoogleadsV21Common__YearMonthRange"
        },
        "includeAverageCpc": {
          "description": "Indicates whether to include average cost per click value. Average CPC is provided only for legacy support.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YearMonthRange": {
      "id": "GoogleAdsGoogleadsV21Common__YearMonthRange",
      "description": "The year month range inclusive of the start and end months. Eg: A year month range to represent Jan 2020 would be: (Jan 2020, Jan 2020).",
      "type": "object",
      "properties": {
        "start": {
          "description": "The inclusive start year month.",
          "$ref": "GoogleAdsGoogleadsV21Common__YearMonth"
        },
        "end": {
          "description": "The inclusive end year month.",
          "$ref": "GoogleAdsGoogleadsV21Common__YearMonth"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__YearMonth": {
      "id": "GoogleAdsGoogleadsV21Common__YearMonth",
      "description": "Year month.",
      "type": "object",
      "properties": {
        "year": {
          "description": "The year (for example, 2020).",
          "type": "string",
          "format": "int64"
        },
        "month": {
          "description": "The month of the year. (for example, FEBRUARY).",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "January.",
            "February.",
            "March.",
            "April.",
            "May.",
            "June.",
            "July.",
            "August.",
            "September.",
            "October.",
            "November.",
            "December."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordAndUrlSeed": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordAndUrlSeed",
      "description": "Keyword And Url Seed",
      "type": "object",
      "properties": {
        "url": {
          "description": "The URL to crawl in order to generate keyword ideas.",
          "type": "string"
        },
        "keywords": {
          "description": "Requires at least one keyword and no more than 20 keywords.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordSeed": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordSeed",
      "description": "Keyword Seed",
      "type": "object",
      "properties": {
        "keywords": {
          "description": "Requires at least one keyword and no more than 20 keywords.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UrlSeed": {
      "id": "GoogleAdsGoogleadsV21Services__UrlSeed",
      "description": "Url Seed",
      "type": "object",
      "properties": {
        "url": {
          "description": "The URL to crawl in order to generate keyword ideas.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SiteSeed": {
      "id": "GoogleAdsGoogleadsV21Services__SiteSeed",
      "description": "Site Seed",
      "type": "object",
      "properties": {
        "site": {
          "description": "The domain name of the site. If the customer requesting the ideas doesn't own the site provided only public information is returned.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResponse",
      "description": "Response message for KeywordPlanIdeaService.GenerateKeywordIdeas.",
      "type": "object",
      "properties": {
        "results": {
          "description": "Results of generating keyword ideas.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResult"
          }
        },
        "aggregateMetricResults": {
          "description": "The aggregate metrics for all keyword ideas.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetricResults"
        },
        "nextPageToken": {
          "description": "Pagination token used to retrieve the next page of results. Pass the content of this string as the `page_token` attribute of the next request. `next_page_token` is not returned for the last page.",
          "type": "string"
        },
        "totalSize": {
          "description": "Total number of results available.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResult": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordIdeaResult",
      "description": "The result of generating keyword ideas.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Text of the keyword idea. As in Keyword Plan historical metrics, this text may not be an actual keyword, but the canonical form of multiple keywords. See KeywordPlanKeywordHistoricalMetrics message in KeywordPlanService.",
          "type": "string"
        },
        "keywordIdeaMetrics": {
          "description": "The historical metrics for the keyword.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanHistoricalMetrics"
        },
        "keywordAnnotations": {
          "description": "The annotations for the keyword. The annotation data is only provided if requested.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordAnnotations"
        },
        "closeVariants": {
          "description": "The list of close variants from the requested keywords that are combined into this GenerateKeywordIdeaResult. See https://support.google.com/google-ads/answer/9342105 for the definition of \"close variants\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordPlanHistoricalMetrics": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordPlanHistoricalMetrics",
      "description": "Historical metrics specific to the targeting options selected. Targeting options include geographies, network, and so on. Refer to https://support.google.com/google-ads/answer/3022575 for more details.",
      "type": "object",
      "properties": {
        "avgMonthlySearches": {
          "description": "Approximate number of monthly searches on this query, averaged for the past 12 months.",
          "type": "string",
          "format": "int64"
        },
        "monthlySearchVolumes": {
          "description": "Approximate number of searches on this query for the past twelve months.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__MonthlySearchVolume"
          }
        },
        "competition": {
          "description": "The competition level for the query.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Low competition. The Competition Index range for this is [0, 33].",
            "Medium competition. The Competition Index range for this is [34, 66].",
            "High competition. The Competition Index range for this is [67, 100]."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LOW",
            "MEDIUM",
            "HIGH"
          ]
        },
        "competitionIndex": {
          "description": "The competition index for the query in the range [0, 100]. Shows how competitive ad placement is for a keyword. The level of competition from 0-100 is determined by the number of ad slots filled divided by the total number of ad slots available. If not enough data is available, null is returned.",
          "type": "string",
          "format": "int64"
        },
        "lowTopOfPageBidMicros": {
          "description": "Top of page bid low range (20th percentile) in micros for the keyword.",
          "type": "string",
          "format": "int64"
        },
        "highTopOfPageBidMicros": {
          "description": "Top of page bid high range (80th percentile) in micros for the keyword.",
          "type": "string",
          "format": "int64"
        },
        "averageCpcMicros": {
          "description": "Average Cost Per Click in micros for the keyword.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__MonthlySearchVolume": {
      "id": "GoogleAdsGoogleadsV21Common__MonthlySearchVolume",
      "description": "Monthly search volume.",
      "type": "object",
      "properties": {
        "year": {
          "description": "The year of the search volume (for example, 2020).",
          "type": "string",
          "format": "int64"
        },
        "month": {
          "description": "The month of the search volume.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "January.",
            "February.",
            "March.",
            "April.",
            "May.",
            "June.",
            "July.",
            "August.",
            "September.",
            "October.",
            "November.",
            "December."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "JANUARY",
            "FEBRUARY",
            "MARCH",
            "APRIL",
            "MAY",
            "JUNE",
            "JULY",
            "AUGUST",
            "SEPTEMBER",
            "OCTOBER",
            "NOVEMBER",
            "DECEMBER"
          ]
        },
        "monthlySearches": {
          "description": "Approximate number of searches for the month. A null value indicates the search volume is unavailable for that month.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordAnnotations": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordAnnotations",
      "description": "The annotations for the keyword plan keywords.",
      "type": "object",
      "properties": {
        "concepts": {
          "description": "The list of concepts for the keyword.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordConcept"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordConcept": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordConcept",
      "description": "The concept for the keyword.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The concept name for the keyword in the concept_group.",
          "type": "string"
        },
        "conceptGroup": {
          "description": "The concept group of the concept details.",
          "$ref": "GoogleAdsGoogleadsV21Common__ConceptGroup"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ConceptGroup": {
      "id": "GoogleAdsGoogleadsV21Common__ConceptGroup",
      "description": "The concept group for the keyword concept.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The concept group name.",
          "type": "string"
        },
        "type": {
          "description": "The concept group type.",
          "type": "string",
          "enumDescriptions": [
            "The concept group classification different from brand/non-brand. This is a catch all bucket for all classifications that are none of the below.",
            "The value is unknown in this version.",
            "The concept group classification is based on BRAND.",
            "The concept group classification based on BRAND, that didn't fit well with the BRAND classifications. These are generally outliers and can have very few keywords in this type of classification.",
            "These concept group classification is not based on BRAND. This is returned for generic keywords that don't have a brand association."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BRAND",
            "OTHER_BRANDS",
            "NON_BRAND"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetricResults": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetricResults",
      "description": "The aggregated historical metrics for keyword plan keywords.",
      "type": "object",
      "properties": {
        "deviceSearches": {
          "description": "The aggregate searches for all the keywords segmented by device for the specified time. Supports the following device types: MOBILE, TABLET, DESKTOP. This is only set when KeywordPlanAggregateMetricTypeEnum.DEVICE is set in the KeywordPlanAggregateMetrics field in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanDeviceSearches"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__KeywordPlanDeviceSearches": {
      "id": "GoogleAdsGoogleadsV21Common__KeywordPlanDeviceSearches",
      "description": "The total searches for the device type during the specified time period.",
      "type": "object",
      "properties": {
        "device": {
          "description": "The device type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Mobile devices with full browsers.",
            "Tablets with full browsers.",
            "Computers.",
            "Smart TVs and game consoles.",
            "Other device types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MOBILE",
            "TABLET",
            "DESKTOP",
            "CONNECTED_TV",
            "OTHER"
          ]
        },
        "searchCount": {
          "description": "The total searches for the device.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsRequest",
      "description": "Request message for KeywordPlanIdeaService.GenerateKeywordHistoricalMetrics.",
      "type": "object",
      "properties": {
        "keywords": {
          "description": "A list of keywords to get historical metrics. Not all inputs will be returned as a result of near-exact deduplication. For example, if stats for \"car\" and \"cars\" are requested, only \"car\" will be returned. A maximum of 10,000 keywords can be used.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "language": {
          "description": "The resource name of the language to target. Each keyword belongs to some set of languages; a keyword is included if language is one of its languages. If not set, all keywords will be included.",
          "type": "string"
        },
        "includeAdultKeywords": {
          "description": "If true, adult keywords will be included in response. The default value is false.",
          "type": "boolean"
        },
        "geoTargetConstants": {
          "description": "The resource names of the location to target. Maximum is 10. An empty list MAY be used to specify all targeting geos.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "keywordPlanNetwork": {
          "description": "Targeting network. If not set, Google Search And Partners Network will be used.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google Search.",
            "Google Search + Search partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_SEARCH",
            "GOOGLE_SEARCH_AND_PARTNERS"
          ]
        },
        "aggregateMetrics": {
          "description": "The aggregate fields to include in response.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetrics"
        },
        "historicalMetricsOptions": {
          "description": "The options for historical metrics data.",
          "$ref": "GoogleAdsGoogleadsV21Common__HistoricalMetricsOptions"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResponse",
      "description": "Response message for KeywordPlanIdeaService.GenerateKeywordHistoricalMetrics.",
      "type": "object",
      "properties": {
        "results": {
          "description": "List of keywords and their historical metrics.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResult"
          }
        },
        "aggregateMetricResults": {
          "description": "The aggregate metrics for all keywords.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanAggregateMetricResults"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResult": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordHistoricalMetricsResult",
      "description": "The result of generating keyword historical metrics.",
      "type": "object",
      "properties": {
        "text": {
          "description": "The text of the query associated with one or more keywords. Note that we de-dupe your keywords list, eliminating close variants before returning the keywords as text. For example, if your request originally contained the keywords \"car\" and \"cars\", the returned search query will only contain \"cars\". The list of de-duped queries will be included in close_variants field.",
          "type": "string"
        },
        "closeVariants": {
          "description": "The list of close variants from the requested keywords whose stats are combined into this GenerateKeywordHistoricalMetricsResult.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "keywordMetrics": {
          "description": "The historical metrics for text and its close variants",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordPlanHistoricalMetrics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesRequest",
      "description": "Request message for KeywordPlanIdeaService.GenerateAdGroupThemes.",
      "type": "object",
      "properties": {
        "keywords": {
          "description": "Required. A list of keywords to group into the provided AdGroups.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "adGroups": {
          "description": "Required. A list of resource names of AdGroups to group keywords into. Resource name format: `customers/{customer_id}/adGroups/{ad_group_id}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateAdGroupThemesResponse",
      "description": "Response message for KeywordPlanIdeaService.GenerateAdGroupThemes.",
      "type": "object",
      "properties": {
        "adGroupKeywordSuggestions": {
          "description": "A list of suggested AdGroup/keyword pairings.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__AdGroupKeywordSuggestion"
          }
        },
        "unusableAdGroups": {
          "description": "A list of provided AdGroups that could not be used as suggestions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__UnusableAdGroup"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdGroupKeywordSuggestion": {
      "id": "GoogleAdsGoogleadsV21Services__AdGroupKeywordSuggestion",
      "description": "The suggested text and AdGroup/Campaign pairing for a given keyword.",
      "type": "object",
      "properties": {
        "keywordText": {
          "description": "The original keyword text.",
          "type": "string"
        },
        "suggestedKeywordText": {
          "description": "The normalized version of keyword_text for BROAD/EXACT/PHRASE suggestions.",
          "type": "string"
        },
        "suggestedMatchType": {
          "description": "The suggested keyword match type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        },
        "suggestedAdGroup": {
          "description": "The suggested AdGroup for the keyword. Resource name format: `customers/{customer_id}/adGroups/{ad_group_id}`",
          "type": "string"
        },
        "suggestedCampaign": {
          "description": "The suggested Campaign for the keyword. Resource name format: `customers/{customer_id}/campaigns/{campaign_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UnusableAdGroup": {
      "id": "GoogleAdsGoogleadsV21Services__UnusableAdGroup",
      "description": "An AdGroup/Campaign pair that could not be used as a suggestion for keywords. AdGroups may not be usable if the AdGroup * belongs to a Campaign that is not ENABLED or PAUSED * is itself not ENABLED",
      "type": "object",
      "properties": {
        "adGroup": {
          "description": "The AdGroup resource name. Resource name format: `customers/{customer_id}/adGroups/{ad_group_id}`",
          "type": "string"
        },
        "campaign": {
          "description": "The Campaign resource name. Resource name format: `customers/{customer_id}/campaigns/{campaign_id}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsRequest",
      "description": "Request message for [KeywordPlanIdeaService.GenerateKeywordForecastMetrics].",
      "type": "object",
      "properties": {
        "currencyCode": {
          "description": "The currency used for exchange rate conversion. By default, the account currency of the customer is used. Set this field only if the currency is different from the account currency. The list of valid currency codes can be found at https://developers.google.com/google-ads/api/data/codes-formats#currency-codes.",
          "type": "string"
        },
        "forecastPeriod": {
          "description": "The date range for the forecast. The start date must be in the future and end date must be within 1 year from today. The reference timezone used is the one of the Google Ads account belonging to the customer. If not set, a default date range from next Sunday to the following Saturday will be used.",
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        },
        "campaign": {
          "description": "Required. The campaign used in the forecast.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignToForecast"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignToForecast": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignToForecast",
      "description": "A campaign to do a keyword campaign forecast.",
      "type": "object",
      "properties": {
        "languageConstants": {
          "description": "The list of resource names of languages to be targeted. The resource name is of the format \"languageConstants/{criterion_id}\". See https://developers.google.com/google-ads/api/data/codes-formats#languages for the list of language criterion codes.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "geoModifiers": {
          "description": "Locations to be targeted. Locations must be unique.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__CriterionBidModifier"
          }
        },
        "keywordPlanNetwork": {
          "description": "Required. The network used for targeting.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Google Search.",
            "Google Search + Search partners."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "GOOGLE_SEARCH",
            "GOOGLE_SEARCH_AND_PARTNERS"
          ]
        },
        "negativeKeywords": {
          "description": "The list of negative keywords to be used in the campaign when doing the forecast.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
          }
        },
        "biddingStrategy": {
          "description": "Required. The bidding strategy for the campaign.",
          "$ref": "GoogleAdsGoogleadsV21Services_CampaignToForecast_CampaignBiddingStrategy"
        },
        "conversionRate": {
          "description": "The expected conversion rate (number of conversions divided by number of total clicks) as defined by the user. This value is expressed as a decimal value, so an expected conversion rate of 2% should be entered as 0.02. If left empty, an estimated conversion rate will be used.",
          "type": "number",
          "format": "double"
        },
        "adGroups": {
          "description": "The ad groups in the new campaign to forecast.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ForecastAdGroup"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CriterionBidModifier": {
      "id": "GoogleAdsGoogleadsV21Services__CriterionBidModifier",
      "description": "Location Criterion bid modifier.",
      "type": "object",
      "properties": {
        "geoTargetConstant": {
          "description": "The resource name of the geo location to target. The resource name is of the format \"geoTargetConstants/{criterion_id}\".",
          "type": "string"
        },
        "bidModifier": {
          "description": "The associated multiplier for the criterion_id. If set, this value cannot be 0.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_CampaignToForecast_CampaignBiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Services_CampaignToForecast_CampaignBiddingStrategy",
      "description": "Supported bidding strategies for new campaign forecasts.",
      "type": "object",
      "properties": {
        "manualCpcBiddingStrategy": {
          "description": "Use manual CPC bidding strategy for forecasting.",
          "$ref": "GoogleAdsGoogleadsV21Services__ManualCpcBiddingStrategy"
        },
        "maximizeClicksBiddingStrategy": {
          "description": "Use maximize clicks bidding strategy for forecasting.",
          "$ref": "GoogleAdsGoogleadsV21Services__MaximizeClicksBiddingStrategy"
        },
        "maximizeConversionsBiddingStrategy": {
          "description": "Use maximize conversions bidding strategy for forecasting.",
          "$ref": "GoogleAdsGoogleadsV21Services__MaximizeConversionsBiddingStrategy"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ManualCpcBiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Services__ManualCpcBiddingStrategy",
      "description": "Manual CPC Bidding Strategy.",
      "type": "object",
      "properties": {
        "dailyBudgetMicros": {
          "description": "Campaign level budget in micros. If set, a minimum value is enforced for the local currency used in the campaign. An error will occur showing the minimum value if this field is set too low.",
          "type": "string",
          "format": "int64"
        },
        "maxCpcBidMicros": {
          "description": "Required. A bid in micros to be applied to ad groups within the campaign for a manual CPC bidding strategy.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MaximizeClicksBiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Services__MaximizeClicksBiddingStrategy",
      "description": "Maximize Clicks Bidding Strategy.",
      "type": "object",
      "properties": {
        "dailyTargetSpendMicros": {
          "description": "Required. The daily target spend in micros to be used for estimation. A minimum value is enforced for the local currency used in the campaign. An error will occur showing the minimum value if this field is set too low.",
          "type": "string",
          "format": "int64"
        },
        "maxCpcBidCeilingMicros": {
          "description": "Ceiling on max CPC bids in micros.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MaximizeConversionsBiddingStrategy": {
      "id": "GoogleAdsGoogleadsV21Services__MaximizeConversionsBiddingStrategy",
      "description": "Maximize Conversions Bidding Strategy.",
      "type": "object",
      "properties": {
        "dailyTargetSpendMicros": {
          "description": "Required. The daily target spend in micros to be used for estimation. This value must be greater than zero.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ForecastAdGroup": {
      "id": "GoogleAdsGoogleadsV21Services__ForecastAdGroup",
      "description": "An ad group that is part of a campaign to be forecasted.",
      "type": "object",
      "properties": {
        "maxCpcBidMicros": {
          "description": "The max cpc to use for the ad group when generating forecasted traffic. This value will override the max cpc value set in the bidding strategy. Only specify this field for bidding strategies that max cpc values.",
          "type": "string",
          "format": "int64"
        },
        "biddableKeywords": {
          "description": "Required. The list of biddable keywords to be used in the ad group when doing the forecast. Requires at least one keyword.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__BiddableKeyword"
          }
        },
        "negativeKeywords": {
          "description": "The details of the keyword. You should specify both the keyword text and match type.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__BiddableKeyword": {
      "id": "GoogleAdsGoogleadsV21Services__BiddableKeyword",
      "description": "A biddable keyword part of an ad group.",
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Required. Keyword. Must have text and match type.",
          "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
        },
        "maxCpcBidMicros": {
          "description": "A max cpc bid in micros that overrides the ad group level max cpc bid in forecast simulation. This value will override the max cpc value set in the bidding strategy and ad group. Only specify this field for bidding strategies that support max cpc values.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateKeywordForecastMetricsResponse",
      "description": "Response message for [KeywordPlanIdeaService.GenerateKeywordForecastMetrics].",
      "type": "object",
      "properties": {
        "campaignForecastMetrics": {
          "description": "Results of the campaign forecast.",
          "$ref": "GoogleAdsGoogleadsV21Services__KeywordForecastMetrics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__KeywordForecastMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__KeywordForecastMetrics",
      "description": "The forecast metrics for the planless keyword campaign.",
      "type": "object",
      "properties": {
        "impressions": {
          "description": "The total number of impressions.",
          "type": "number",
          "format": "double"
        },
        "clickThroughRate": {
          "description": "The average click through rate. Available only if impressions \u003e 0.",
          "type": "number",
          "format": "double"
        },
        "averageCpcMicros": {
          "description": "The average cpc. Available only if clicks \u003e 0.",
          "type": "string",
          "format": "int64"
        },
        "clicks": {
          "description": "The total number of clicks.",
          "type": "number",
          "format": "double"
        },
        "costMicros": {
          "description": "The total cost.",
          "type": "string",
          "format": "int64"
        },
        "conversions": {
          "description": "Forecasted number of conversions: clicks * conversion_rate.",
          "type": "number",
          "format": "double"
        },
        "conversionRate": {
          "description": "Forecasted conversion rate.",
          "type": "number",
          "format": "double"
        },
        "averageCpaMicros": {
          "description": "Average cost per acquisition calculated as cost_micros / conversions.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsRequest",
      "description": "Request message for KeywordThemeConstantService.SuggestKeywordThemeConstants.",
      "type": "object",
      "properties": {
        "queryText": {
          "description": "The query text of a keyword theme that will be used to map to similar keyword themes. For example, \"plumber\" or \"roofer\".",
          "type": "string"
        },
        "countryCode": {
          "description": "Upper-case, two-letter country code as defined by ISO-3166. This for refining the scope of the query, default to 'US' if not set.",
          "type": "string"
        },
        "languageCode": {
          "description": "The two letter language code for get corresponding keyword theme for refining the scope of the query, default to 'en' if not set.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemeConstantsResponse",
      "description": "Response message for KeywordThemeConstantService.SuggestKeywordThemeConstants.",
      "type": "object",
      "properties": {
        "keywordThemeConstants": {
          "description": "Smart Campaign keyword theme suggestions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__KeywordThemeConstant"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AppendLeadConversationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__AppendLeadConversationRequest",
      "description": "Request message for LocalServicesLeadService.AppendLeadConversation.",
      "type": "object",
      "properties": {
        "conversations": {
          "description": "Required. Conversations that are being appended.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__Conversation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__Conversation": {
      "id": "GoogleAdsGoogleadsV21Services__Conversation",
      "description": "Details of the conversation that needs to be appended.",
      "type": "object",
      "properties": {
        "localServicesLead": {
          "description": "Required. The resource name of the local services lead that the conversation should be applied to.",
          "type": "string"
        },
        "text": {
          "description": "Required. Text message that user wanted to append to lead.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AppendLeadConversationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__AppendLeadConversationResponse",
      "description": "Response message for LocalServicesLeadService.AppendLeadConversation.",
      "type": "object",
      "properties": {
        "responses": {
          "description": "Required. List of append conversation operation results.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversationOrError"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversationOrError": {
      "id": "GoogleAdsGoogleadsV21Services__ConversationOrError",
      "description": "Result of the append conversation operation.",
      "type": "object",
      "properties": {
        "localServicesLeadConversation": {
          "description": "The resource name of the appended local services lead conversation.",
          "type": "string"
        },
        "partialFailureError": {
          "description": "Failure status when the request could not be processed.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackRequest",
      "description": "Request message for LocalServicesLeadService.ProvideLeadFeedback.",
      "type": "object",
      "properties": {
        "surveyAnswer": {
          "description": "Required. Survey answer for Local Services Ads Lead.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Very satisfied with the lead.",
            "Satisfied with the lead.",
            "Neutral with the lead.",
            "Dissatisfied with the lead.",
            "Very dissatisfied with the lead."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VERY_SATISFIED",
            "SATISFIED",
            "NEUTRAL",
            "DISSATISFIED",
            "VERY_DISSATISFIED"
          ]
        },
        "surveySatisfied": {
          "description": "Details about various factors for being satisfied with the lead.",
          "$ref": "GoogleAdsGoogleadsV21Services__SurveySatisfied"
        },
        "surveyDissatisfied": {
          "description": "Details about various factors for not being satisfied with the lead.",
          "$ref": "GoogleAdsGoogleadsV21Services__SurveyDissatisfied"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SurveySatisfied": {
      "id": "GoogleAdsGoogleadsV21Services__SurveySatisfied",
      "description": "Details about various factors for being satisfied with the lead.",
      "type": "object",
      "properties": {
        "surveySatisfiedReason": {
          "description": "Required. Provider's reason for being satisfied with the lead.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Other reasons.",
            "Lead converted into a booked customer or client.",
            "Lead could convert into a booked customer or client soon.",
            "Lead was related to the services the business offers.",
            "Lead was for a service that generates high value for the business."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OTHER_SATISFIED_REASON",
            "BOOKED_CUSTOMER",
            "LIKELY_BOOKED_CUSTOMER",
            "SERVICE_RELATED",
            "HIGH_VALUE_SERVICE"
          ]
        },
        "otherReasonComment": {
          "description": "Optional. Provider's free form comments. This field is required when OTHER_SATISFIED_REASON is selected as the reason.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SurveyDissatisfied": {
      "id": "GoogleAdsGoogleadsV21Services__SurveyDissatisfied",
      "description": "Details about various factors for not being satisfied with the lead.",
      "type": "object",
      "properties": {
        "surveyDissatisfiedReason": {
          "description": "Required. Provider's reason for not being satisfied with the lead.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Other reasons.",
            "Lead was for a service that does not match the business' service area.",
            "Lead was for a service that is not offered by the business.",
            "Lead was by a customer that was not ready to book.",
            "Lead was a spam. Example: lead was from a bot, silent called, scam, etc.",
            "Lead was a duplicate of another lead that is, customer contacted the business more than once.",
            "Lead due to solicitation. Example: a person trying to get a job or selling a product, etc."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OTHER_DISSATISFIED_REASON",
            "GEO_MISMATCH",
            "JOB_TYPE_MISMATCH",
            "NOT_READY_TO_BOOK",
            "SPAM",
            "DUPLICATE",
            "SOLICITATION"
          ]
        },
        "otherReasonComment": {
          "description": "Optional. Provider's free form comments. This field is required when OTHER_DISSATISFIED_REASON is selected as the reason.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ProvideLeadFeedbackResponse",
      "description": "Response message for LocalServicesLeadService.ProvideLeadFeedback.",
      "type": "object",
      "properties": {
        "creditIssuanceDecision": {
          "description": "Required. Decision of bonus credit issued or rejected. If a bonus credit is issued, it will be available for use in about two months.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Bonus credit is issued successfully and bonus credit cap has not reached the threshold after issuing this bonus credit.",
            "Bonus credit is issued successfully and bonus credit cap has reached the threshold after issuing this bonus credit.",
            "Bonus credit is not issued because the provider has reached the bonus credit cap.",
            "Bonus credit is not issued because this lead is not eligible for bonus credit."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SUCCESS_NOT_REACHED_THRESHOLD",
            "SUCCESS_REACHED_THRESHOLD",
            "FAIL_OVER_THRESHOLD",
            "FAIL_NOT_ELIGIBLE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobRequest",
      "description": "Request message for OfflineUserDataJobService.CreateOfflineUserDataJob.",
      "type": "object",
      "properties": {
        "job": {
          "description": "Required. The offline user data job to be created.",
          "$ref": "GoogleAdsGoogleadsV21Resources__OfflineUserDataJob"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        },
        "enableMatchRateRangePreview": {
          "description": "If true, match rate range for the offline user data job is calculated and made available in the resource.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateOfflineUserDataJobResponse",
      "description": "Response message for OfflineUserDataJobService.CreateOfflineUserDataJob.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name of the OfflineUserDataJob.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsRequest",
      "description": "Request message for OfflineUserDataJobService.AddOfflineUserDataJobOperations.",
      "type": "object",
      "properties": {
        "enablePartialFailure": {
          "description": "True to enable partial failure for the offline user data job.",
          "type": "boolean"
        },
        "enableWarnings": {
          "description": "True to enable warnings for the offline user data job. When enabled, a warning will not block the OfflineUserDataJobOperation, and will also return warning messages about malformed field values.",
          "type": "boolean"
        },
        "operations": {
          "description": "Required. The list of operations to be done.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__OfflineUserDataJobOperation"
          }
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__OfflineUserDataJobOperation": {
      "id": "GoogleAdsGoogleadsV21Services__OfflineUserDataJobOperation",
      "description": "Operation to be made for the AddOfflineUserDataJobOperationsRequest.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Add the provided data to the transaction. Data cannot be retrieved after being uploaded.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserData"
        },
        "remove": {
          "description": "Remove the provided data from the transaction. Data cannot be retrieved after being uploaded.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserData"
        },
        "removeAll": {
          "description": "Remove all previously provided data. This is only supported for Customer Match.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserData": {
      "id": "GoogleAdsGoogleadsV21Common__UserData",
      "description": "User data holding user identifiers and attributes.",
      "type": "object",
      "properties": {
        "userIdentifiers": {
          "description": "User identification info. Required.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserIdentifier"
          }
        },
        "transactionAttribute": {
          "description": "Additional transactions/attributes associated with the user. Required when updating store sales data.",
          "$ref": "GoogleAdsGoogleadsV21Common__TransactionAttribute"
        },
        "userAttribute": {
          "description": "Additional attributes associated with the user. Required when updating customer match attributes. These have an expiration of 540 days.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserAttribute"
        },
        "consent": {
          "description": "The consent setting for the user. If set, will override the job level consent for this user.",
          "$ref": "GoogleAdsGoogleadsV21Common__Consent"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__TransactionAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__TransactionAttribute",
      "description": "Attribute of the store sales transaction.",
      "type": "object",
      "properties": {
        "transactionDateTime": {
          "description": "Timestamp when transaction occurred. Required. The format is \"YYYY-MM-DD HH:MM:SS[+/-HH:MM]\", where [+/-HH:MM] is an optional timezone offset from UTC. If the offset is absent, the API will use the account's timezone as default. Examples: \"2018-03-05 09:15:00\" or \"2018-02-01 14:34:30+03:00\"",
          "type": "string"
        },
        "transactionAmountMicros": {
          "description": "Transaction amount in micros. Required. Transaction amount in micros needs to be greater than 1000. If item Attributes are provided, it represents the total value of the items, after multiplying the unit price per item by the quantity provided in the ItemAttributes.",
          "type": "number",
          "format": "double"
        },
        "currencyCode": {
          "description": "Transaction currency code. ISO 4217 three-letter code is used. Required.",
          "type": "string"
        },
        "conversionAction": {
          "description": "The resource name of conversion action to report conversions to. Required.",
          "type": "string"
        },
        "orderId": {
          "description": "Transaction order id. Useful to group transactions which are part of the same order.",
          "type": "string"
        },
        "storeAttribute": {
          "description": "Store attributes of the transaction.",
          "$ref": "GoogleAdsGoogleadsV21Common__StoreAttribute"
        },
        "customValue": {
          "description": "Value of the custom variable for each transaction. Allowed only if a custom key is provided in the store sales metadata.",
          "type": "string"
        },
        "itemAttribute": {
          "description": "Item attributes of the transaction. Accessible only to customers on the allow-list.",
          "$ref": "GoogleAdsGoogleadsV21Common__ItemAttribute"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__StoreAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__StoreAttribute",
      "description": "Store attributes of the transaction.",
      "type": "object",
      "properties": {
        "storeCode": {
          "description": "Store code from https://support.google.com/business/answer/3370250#storecode",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ItemAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__ItemAttribute",
      "description": "Item attributes of the transaction.",
      "type": "object",
      "properties": {
        "itemId": {
          "description": "A unique identifier of a product. It must be the exact same Merchant Center Item ID you use in your Google Merchant Center for this product. Required.",
          "type": "string"
        },
        "merchantId": {
          "description": "ID of the Merchant Center Account. Required.",
          "type": "string",
          "format": "int64"
        },
        "countryCode": {
          "description": "Common Locale Data Repository (CLDR) territory code of the country associated with the feed where your items are uploaded. See https://developers.google.com/google-ads/api/reference/data/codes-formats#country-codes for more information. This information is useful to differentiate product information in cases where a product (identified by item_id) is associated with multiple countries.",
          "type": "string"
        },
        "languageCode": {
          "description": "ISO 639-1 code of the language associated with the feed where your items are uploaded. This information is useful to differentiate product information in cases where a product (identified by item_id) is associated with multiple languages.",
          "type": "string"
        },
        "quantity": {
          "description": "The number of items sold. Defaults to 1 if not set.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__UserAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__UserAttribute",
      "description": "User attribute, can only be used with CUSTOMER_MATCH_WITH_ATTRIBUTES job type.",
      "type": "object",
      "properties": {
        "lifetimeValueMicros": {
          "description": "Advertiser defined lifetime value for the user.",
          "type": "string",
          "format": "int64"
        },
        "lifetimeValueBucket": {
          "description": "Advertiser defined lifetime value bucket for the user. The valid range for a lifetime value bucket is from 1 (low) to 10 (high), except for remove operation where 0 will also be accepted.",
          "type": "integer",
          "format": "int32"
        },
        "lastPurchaseDateTime": {
          "description": "Timestamp of the last purchase made by the user. The format is YYYY-MM-DD HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from UTC. If the offset is absent, the API will use the account's timezone as default.",
          "type": "string"
        },
        "averagePurchaseCount": {
          "description": "Advertiser defined average number of purchases that are made by the user in a 30 day period.",
          "type": "integer",
          "format": "int32"
        },
        "averagePurchaseValueMicros": {
          "description": "Advertiser defined average purchase value in micros for the user.",
          "type": "string",
          "format": "int64"
        },
        "acquisitionDateTime": {
          "description": "Timestamp when the user was acquired. The format is YYYY-MM-DD HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from UTC. If the offset is absent, the API will use the account's timezone as default.",
          "type": "string"
        },
        "shoppingLoyalty": {
          "description": "The shopping loyalty related data. Shopping utilizes this data to provide users with a better experience. Accessible only to merchants on the allow-list with the user's consent.",
          "$ref": "GoogleAdsGoogleadsV21Common__ShoppingLoyalty"
        },
        "lifecycleStage": {
          "description": "Optional. Advertiser defined lifecycle stage for the user. The accepted values are \"Lead\", \"Active\" and \"Churned\".",
          "type": "string"
        },
        "firstPurchaseDateTime": {
          "description": "Optional. Timestamp of the first purchase made by the user. The format is YYYY-MM-DD HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from UTC. If the offset is absent, the API will use the account's timezone as default.",
          "type": "string"
        },
        "eventAttribute": {
          "description": "Optional. Advertiser defined events and their attributes. All the values in the nested fields are required. Currently this field is in beta.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__EventAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__ShoppingLoyalty": {
      "id": "GoogleAdsGoogleadsV21Common__ShoppingLoyalty",
      "description": "The shopping loyalty related data. Shopping utilizes this data to provide users with a better experience. Accessible only to merchants on the allow-list.",
      "type": "object",
      "properties": {
        "loyaltyTier": {
          "description": "The membership tier. It is a free-form string as each merchant may have their own loyalty system. For example, it could be a number from 1 to 10, or a string such as \"Golden\" or \"Silver\", or even empty string \"\".",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__EventAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__EventAttribute",
      "description": "Advertiser defined events and their attributes. All the values in the nested fields are required.",
      "type": "object",
      "properties": {
        "event": {
          "description": "Required. Advertiser defined event to be used for remarketing. The accepted values are \"Viewed\", \"Cart\", \"Purchased\" and \"Recommended\".",
          "type": "string"
        },
        "eventDateTime": {
          "description": "Required. Timestamp at which the event happened. The format is YYYY-MM-DD HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from UTC. If the offset is absent, the API will use the account's timezone as default.",
          "type": "string"
        },
        "itemAttribute": {
          "description": "Required. Item attributes of the event.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__EventItemAttribute"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__EventItemAttribute": {
      "id": "GoogleAdsGoogleadsV21Common__EventItemAttribute",
      "description": "Event Item attributes of the Customer Match.",
      "type": "object",
      "properties": {
        "itemId": {
          "description": "Optional. A unique identifier of a product. It can be either the Merchant Center Item ID or GTIN (Global Trade Item Number).",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__AddOfflineUserDataJobOperationsResponse",
      "description": "Response message for OfflineUserDataJobService.AddOfflineUserDataJobOperations.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "warning": {
          "description": "Non blocking errors that pertain to operation failures in the warnings mode. Returned only when enable_warnings = true.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RunOfflineUserDataJobRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RunOfflineUserDataJobRequest",
      "description": "Request message for OfflineUserDataJobService.RunOfflineUserDataJob.",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPaymentsAccountsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListPaymentsAccountsResponse",
      "description": "Response message for PaymentsAccountService.ListPaymentsAccounts.",
      "type": "object",
      "properties": {
        "paymentsAccounts": {
          "description": "The list of accessible payments accounts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__PaymentsAccount"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Resources__PaymentsAccount": {
      "id": "GoogleAdsGoogleadsV21Resources__PaymentsAccount",
      "description": "A payments account, which can be used to set up billing for an Ads customer.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Output only. The resource name of the payments account. PaymentsAccount resource names have the form: `customers/{customer_id}/paymentsAccounts/{payments_account_id}`",
          "readOnly": true,
          "type": "string"
        },
        "paymentsAccountId": {
          "description": "Output only. A 16 digit ID used to identify a payments account.",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "Output only. The name of the payments account.",
          "readOnly": true,
          "type": "string"
        },
        "currencyCode": {
          "description": "Output only. The currency code of the payments account. A subset of the currency codes derived from the ISO 4217 standard is supported.",
          "readOnly": true,
          "type": "string"
        },
        "paymentsProfileId": {
          "description": "Output only. A 12 digit ID used to identify the payments profile associated with the payments account.",
          "readOnly": true,
          "type": "string"
        },
        "secondaryPaymentsProfileId": {
          "description": "Output only. A secondary payments profile ID present in uncommon situations, for example, when a sequential liability agreement has been arranged.",
          "readOnly": true,
          "type": "string"
        },
        "payingManagerCustomer": {
          "description": "Output only. Paying manager of this payment account.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationRequest",
      "description": "Request message for ProductLinkInvitationService.CreateProductLinkInvitation.",
      "type": "object",
      "properties": {
        "productLinkInvitation": {
          "description": "Required. The product link invitation to be created.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductLinkInvitation"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateProductLinkInvitationResponse",
      "description": "Response message for product link invitation create.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Resource name of the product link invitation.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationRequest",
      "description": "Request message for ProductLinkInvitationService.UpdateProductLinkInvitation.",
      "type": "object",
      "properties": {
        "productLinkInvitationStatus": {
          "description": "Required. The product link invitation to be created.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The invitation is accepted.",
            "An invitation has been sent to the other account. A user on the other account may now accept the invitation by setting the status to ACCEPTED.",
            "This invitation has been sent by a user on the other account. It may be accepted by a user on this account by setting the status to ACCEPTED.",
            "The invitation is revoked by the user who sent the invitation.",
            "The invitation has been rejected by the invitee.",
            "The invitation has timed out before being accepted by the invitee."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCEPTED",
            "REQUESTED",
            "PENDING_APPROVAL",
            "REVOKED",
            "REJECTED",
            "EXPIRED"
          ]
        },
        "resourceName": {
          "description": "Required. Resource name of the product link invitation.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UpdateProductLinkInvitationResponse",
      "description": "Response message for product link invitation update.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Result of the update.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationRequest",
      "description": "Request message for ProductLinkinvitationService.RemoveProductLinkInvitation.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Required. The resource name of the product link invitation being removed. expected, in this format: ` `",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveProductLinkInvitationResponse",
      "description": "Response message for product link invitation removeal.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Result for the remove request.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateProductLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__CreateProductLinkRequest",
      "description": "Request message for ProductLinkService.CreateProductLink.",
      "type": "object",
      "properties": {
        "productLink": {
          "description": "Required. The product link to be created.",
          "$ref": "GoogleAdsGoogleadsV21Resources__ProductLink"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CreateProductLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__CreateProductLinkResponse",
      "description": "Response message for ProductLinkService.CreateProductLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations. Resource name of the product link.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveProductLinkRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveProductLinkRequest",
      "description": "Request message for ProductLinkService.RemoveProductLink.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Required. Remove operation: A resource name for the product link to remove is expected, in this format: `customers/{customer_id}/productLinks/{product_link_id} `",
          "type": "string"
        },
        "validateOnly": {
          "description": "If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RemoveProductLinkResponse": {
      "id": "GoogleAdsGoogleadsV21Services__RemoveProductLinkResponse",
      "description": "Response message for product link removal.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Result for the remove request.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateConversionRatesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateConversionRatesRequest",
      "description": "Request message for ReachPlanService.GenerateConversionRates.",
      "type": "object",
      "properties": {
        "customerId": {
          "description": "Required. The ID of the customer. A conversion rate based on the historical data of this customer may be suggested.",
          "type": "string"
        },
        "customerReachGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateConversionRatesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateConversionRatesResponse",
      "description": "Response message for ReachPlanService.GenerateConversionRates, containing conversion rate suggestions for supported plannable products.",
      "type": "object",
      "properties": {
        "conversionRateSuggestions": {
          "description": "A list containing conversion rate suggestions. Each repeated element will have an associated product code. Multiple suggestions may share the same product code.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ConversionRateSuggestion"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ConversionRateSuggestion": {
      "id": "GoogleAdsGoogleadsV21Services__ConversionRateSuggestion",
      "description": "A conversion rate suggestion.",
      "type": "object",
      "properties": {
        "conversionRateModel": {
          "description": "Model type used to calculate the suggested conversion rate.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Suggested conversion rate for the authenticated customer based on the previous 70 days.",
            "Suggested conversion rate based on an aggressive rate for the entire inventory.",
            "Suggested conversion rate based on a conservative rate for the entire inventory.",
            "Suggested conversion rate based on the median rate for the entire inventory."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_HISTORY",
            "INVENTORY_AGGRESSIVE",
            "INVENTORY_CONSERVATIVE",
            "INVENTORY_MEDIAN"
          ]
        },
        "plannableProductCode": {
          "description": "The code associated with the plannable product (for example: DEMAND_GEN). To list all plannable product codes, use ReachPlanService.ListPlannableProducts.",
          "type": "string"
        },
        "conversionRate": {
          "description": "The suggested conversion rate. The value is between 0 and 1 (exclusive).",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableLocationsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableLocationsRequest",
      "description": "Request message for ReachPlanService.ListPlannableLocations.",
      "type": "object",
      "properties": {
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableLocationsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableLocationsResponse",
      "description": "The list of plannable locations.",
      "type": "object",
      "properties": {
        "plannableLocations": {
          "description": "The list of locations available for planning. See https://developers.google.com/google-ads/api/reference/data/geotargets for sample locations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__PlannableLocation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannableLocation": {
      "id": "GoogleAdsGoogleadsV21Services__PlannableLocation",
      "description": "A plannable location: country, metro region, province, etc.",
      "type": "object",
      "properties": {
        "id": {
          "description": "The location identifier.",
          "type": "string"
        },
        "name": {
          "description": "The unique location name in English.",
          "type": "string"
        },
        "parentCountryId": {
          "description": "The parent country (not present if location is a country). If present, will always be a GeoTargetConstant ID. Additional information such as country name is provided by ReachPlanService.ListPlannableLocations or GoogleAdsService.Search/SearchStream.",
          "type": "string",
          "format": "int64"
        },
        "countryCode": {
          "description": "The ISO-3166-1 alpha-2 country code that is associated with the location.",
          "type": "string"
        },
        "locationType": {
          "description": "The location's type. Location types correspond to target_type returned by searching location type in GoogleAdsService.Search/SearchStream.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableProductsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableProductsRequest",
      "description": "Request to list available products in a given location.",
      "type": "object",
      "properties": {
        "plannableLocationId": {
          "description": "Required. The ID of the selected location for planning. To list the available plannable location IDs use ReachPlanService.ListPlannableLocations.",
          "type": "string"
        },
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableProductsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableProductsResponse",
      "description": "A response with all available products.",
      "type": "object",
      "properties": {
        "productMetadata": {
          "description": "The list of products available for planning and related targeting metadata.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ProductMetadata"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ProductMetadata": {
      "id": "GoogleAdsGoogleadsV21Services__ProductMetadata",
      "description": "The metadata associated with an available plannable product.",
      "type": "object",
      "properties": {
        "plannableProductCode": {
          "description": "The code associated with the ad product (for example: BUMPER, TRUEVIEW_IN_STREAM). To list the available plannable product codes use ReachPlanService.ListPlannableProducts.",
          "type": "string"
        },
        "plannableProductName": {
          "description": "The name associated with the ad product.",
          "type": "string"
        },
        "plannableTargeting": {
          "description": "The allowed plannable targeting for this product.",
          "$ref": "GoogleAdsGoogleadsV21Services__PlannableTargeting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannableTargeting": {
      "id": "GoogleAdsGoogleadsV21Services__PlannableTargeting",
      "description": "The targeting for which traffic metrics will be reported.",
      "type": "object",
      "properties": {
        "ageRanges": {
          "description": "Allowed plannable age ranges for the product for which metrics will be reported. Actual targeting is computed by mapping this age range onto standard Google common.AgeRangeInfo values.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "Between 18 and 24 years old.",
              "Between 18 and 34 years old.",
              "Between 18 and 44 years old.",
              "Between 18 and 49 years old.",
              "Between 18 and 54 years old.",
              "Between 18 and 64 years old.",
              "Between 18 and 65+ years old.",
              "Between 21 and 34 years old.",
              "Between 25 and 34 years old.",
              "Between 25 and 44 years old.",
              "Between 25 and 49 years old.",
              "Between 25 and 54 years old.",
              "Between 25 and 64 years old.",
              "Between 25 and 65+ years old.",
              "Between 35 and 44 years old.",
              "Between 35 and 49 years old.",
              "Between 35 and 54 years old.",
              "Between 35 and 64 years old.",
              "Between 35 and 65+ years old.",
              "Between 45 and 54 years old.",
              "Between 45 and 64 years old.",
              "Between 45 and 65+ years old.",
              "Between 50 and 65+ years old.",
              "Between 55 and 64 years old.",
              "Between 55 and 65+ years old.",
              "65 years old and beyond."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "AGE_RANGE_18_24",
              "AGE_RANGE_18_34",
              "AGE_RANGE_18_44",
              "AGE_RANGE_18_49",
              "AGE_RANGE_18_54",
              "AGE_RANGE_18_64",
              "AGE_RANGE_18_65_UP",
              "AGE_RANGE_21_34",
              "AGE_RANGE_25_34",
              "AGE_RANGE_25_44",
              "AGE_RANGE_25_49",
              "AGE_RANGE_25_54",
              "AGE_RANGE_25_64",
              "AGE_RANGE_25_65_UP",
              "AGE_RANGE_35_44",
              "AGE_RANGE_35_49",
              "AGE_RANGE_35_54",
              "AGE_RANGE_35_64",
              "AGE_RANGE_35_65_UP",
              "AGE_RANGE_45_54",
              "AGE_RANGE_45_64",
              "AGE_RANGE_45_65_UP",
              "AGE_RANGE_50_65_UP",
              "AGE_RANGE_55_64",
              "AGE_RANGE_55_65_UP",
              "AGE_RANGE_65_UP"
            ]
          }
        },
        "genders": {
          "description": "Targetable genders for the ad product.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
          }
        },
        "devices": {
          "description": "Targetable devices for the ad product. TABLET device targeting is automatically applied to reported metrics when MOBILE targeting is selected for CPM_MASTHEAD, GOOGLE_PREFERRED_BUMPER, and GOOGLE_PREFERRED_SHORT products.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__DeviceInfo"
          }
        },
        "networks": {
          "description": "Targetable networks for the ad product.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used as a return value only. Represents value unknown in this version.",
              "YouTube network.",
              "Google Video Partners (GVP) network.",
              "A combination of the YouTube network and the Google Video Partners network."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "YOUTUBE",
              "GOOGLE_VIDEO_PARTNERS",
              "YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS"
            ]
          }
        },
        "youtubeSelectLineups": {
          "description": "Targetable YouTube Select Lineups for the ad product.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__YouTubeSelectLineUp"
          }
        },
        "surfaceTargeting": {
          "description": "Targetable surface combinations for the ad product.",
          "$ref": "GoogleAdsGoogleadsV21Services__SurfaceTargetingCombinations"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__YouTubeSelectLineUp": {
      "id": "GoogleAdsGoogleadsV21Services__YouTubeSelectLineUp",
      "description": "A Plannable YouTube Select Lineup for product targeting.",
      "type": "object",
      "properties": {
        "lineupId": {
          "description": "The ID of the YouTube Select Lineup.",
          "type": "string",
          "format": "int64"
        },
        "lineupName": {
          "description": "The unique name of the YouTube Select Lineup.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SurfaceTargetingCombinations": {
      "id": "GoogleAdsGoogleadsV21Services__SurfaceTargetingCombinations",
      "description": "The surface targeting combinations available for an ad product.",
      "type": "object",
      "properties": {
        "defaultTargeting": {
          "description": "Default surface targeting applied to the ad product.",
          "$ref": "GoogleAdsGoogleadsV21Services__SurfaceTargeting"
        },
        "availableTargetingCombinations": {
          "description": "Available surface target combinations for the ad product.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__SurfaceTargeting"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SurfaceTargeting": {
      "id": "GoogleAdsGoogleadsV21Services__SurfaceTargeting",
      "description": "Container for surfaces for a product. Surfaces refer to the available types of ad inventories such as In-Feed, In-Stream, and Shorts.",
      "type": "object",
      "properties": {
        "surfaces": {
          "description": "List of surfaces available to target.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "The value is unknown in this version.",
              "Discover feed ad surface.",
              "Gmail ad surface.",
              "In-Feed ad surface.",
              "In-Stream bumper ad surface.",
              "In-Stream non-skippable ad surface.",
              "In-Stream skippable ad surface.",
              "Shorts ad surface."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "DISCOVER_FEED",
              "GMAIL",
              "IN_FEED",
              "IN_STREAM_BUMPER",
              "IN_STREAM_NON_SKIPPABLE",
              "IN_STREAM_SKIPPABLE",
              "SHORTS"
            ]
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateReachForecastRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateReachForecastRequest",
      "description": "Request message for ReachPlanService.GenerateReachForecast.",
      "type": "object",
      "properties": {
        "currencyCode": {
          "description": "The currency code. Three-character ISO 4217 currency code.",
          "type": "string"
        },
        "campaignDuration": {
          "description": "Required. Campaign duration.",
          "$ref": "GoogleAdsGoogleadsV21Services__CampaignDuration"
        },
        "cookieFrequencyCap": {
          "description": "Chosen cookie frequency cap to be applied to each planned product. This is equivalent to the frequency cap exposed in Google Ads when creating a campaign, it represents the maximum number of times an ad can be shown to the same user. If not specified, no cap is applied. This field is deprecated in v4 and will eventually be removed. Use cookie_frequency_cap_setting instead.",
          "type": "integer",
          "format": "int32"
        },
        "cookieFrequencyCapSetting": {
          "description": "Chosen cookie frequency cap to be applied to each planned product. This is equivalent to the frequency cap exposed in Google Ads when creating a campaign, it represents the maximum number of times an ad can be shown to the same user during a specified time interval. If not specified, a default of 0 (no cap) is applied. This field replaces the deprecated cookie_frequency_cap field.",
          "$ref": "GoogleAdsGoogleadsV21Services__FrequencyCap"
        },
        "minEffectiveFrequency": {
          "description": "Chosen minimum effective frequency (the number of times a person was exposed to the ad) for the reported reach metrics [1-10]. This won't affect the targeting, but just the reporting. If not specified, a default of 1 is applied. This field cannot be combined with the effective_frequency_limit field.",
          "type": "integer",
          "format": "int32"
        },
        "effectiveFrequencyLimit": {
          "description": "The highest minimum effective frequency (the number of times a person was exposed to the ad) value [1-10] to include in Forecast.effective_frequency_breakdowns. If not specified, Forecast.effective_frequency_breakdowns will not be provided. The effective frequency value provided here will also be used as the minimum effective frequency for the reported reach metrics. This field cannot be combined with the min_effective_frequency field.",
          "$ref": "GoogleAdsGoogleadsV21Services__EffectiveFrequencyLimit"
        },
        "targeting": {
          "description": "The targeting to be applied to all products selected in the product mix. This is planned targeting: execution details might vary based on the advertising product, consult an implementation specialist. See specific metrics for details on how targeting affects them.",
          "$ref": "GoogleAdsGoogleadsV21Services__Targeting"
        },
        "plannedProducts": {
          "description": "Required. The products to be forecast. The max number of allowed planned products is 15.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__PlannedProduct"
          }
        },
        "forecastMetricOptions": {
          "description": "Controls the forecast metrics returned in the response.",
          "$ref": "GoogleAdsGoogleadsV21Services__ForecastMetricOptions"
        },
        "customerReachGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__CampaignDuration": {
      "id": "GoogleAdsGoogleadsV21Services__CampaignDuration",
      "description": "The duration of a planned campaign.",
      "type": "object",
      "properties": {
        "durationInDays": {
          "description": "The duration value in days. This field cannot be combined with the date_range field.",
          "type": "integer",
          "format": "int32"
        },
        "dateRange": {
          "description": "Date range of the campaign. Dates are in the yyyy-mm-dd format and inclusive. The end date must be \u003c 1 year in the future and the date range must be \u003c= 92 days long. This field cannot be combined with the duration_in_days field.",
          "$ref": "GoogleAdsGoogleadsV21Common__DateRange"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__FrequencyCap": {
      "id": "GoogleAdsGoogleadsV21Services__FrequencyCap",
      "description": "A rule specifying the maximum number of times an ad can be shown to a user over a particular time period.",
      "type": "object",
      "properties": {
        "impressions": {
          "description": "Required. The number of impressions, inclusive.",
          "type": "integer",
          "format": "int32"
        },
        "timeUnit": {
          "description": "Required. The type of time unit.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The cap would define limit per one day.",
            "The cap would define limit per one week.",
            "The cap would define limit per one month."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DAY",
            "WEEK",
            "MONTH"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EffectiveFrequencyLimit": {
      "id": "GoogleAdsGoogleadsV21Services__EffectiveFrequencyLimit",
      "description": "Effective frequency limit.",
      "type": "object",
      "properties": {
        "effectiveFrequencyBreakdownLimit": {
          "description": "The highest effective frequency value to include in Forecast.effective_frequency_breakdowns. This field supports frequencies 1-10, inclusive.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__Targeting": {
      "id": "GoogleAdsGoogleadsV21Services__Targeting",
      "description": "The targeting for which traffic metrics will be reported.",
      "type": "object",
      "properties": {
        "plannableLocationId": {
          "description": "The ID of the selected location. Plannable location IDs can be obtained from ReachPlanService.ListPlannableLocations. Requests must set either this field or `plannable_location_ids`. This field is deprecated as of V12 and will be removed in a future release. Use `plannable_location_ids` instead.",
          "type": "string"
        },
        "plannableLocationIds": {
          "description": "The list of plannable location IDs to target with this forecast. If more than one ID is provided, all IDs must have the same `parent_country_id`. Planning for more than `parent_county` is not supported. Plannable location IDs and their `parent_country_id` can be obtained from ReachPlanService.ListPlannableLocations. Requests must set either this field or `plannable_location_id`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ageRange": {
          "description": "Targeted age range. An unset value is equivalent to targeting all ages.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The value is unknown in this version.",
            "Between 18 and 24 years old.",
            "Between 18 and 34 years old.",
            "Between 18 and 44 years old.",
            "Between 18 and 49 years old.",
            "Between 18 and 54 years old.",
            "Between 18 and 64 years old.",
            "Between 18 and 65+ years old.",
            "Between 21 and 34 years old.",
            "Between 25 and 34 years old.",
            "Between 25 and 44 years old.",
            "Between 25 and 49 years old.",
            "Between 25 and 54 years old.",
            "Between 25 and 64 years old.",
            "Between 25 and 65+ years old.",
            "Between 35 and 44 years old.",
            "Between 35 and 49 years old.",
            "Between 35 and 54 years old.",
            "Between 35 and 64 years old.",
            "Between 35 and 65+ years old.",
            "Between 45 and 54 years old.",
            "Between 45 and 64 years old.",
            "Between 45 and 65+ years old.",
            "Between 50 and 65+ years old.",
            "Between 55 and 64 years old.",
            "Between 55 and 65+ years old.",
            "65 years old and beyond."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AGE_RANGE_18_24",
            "AGE_RANGE_18_34",
            "AGE_RANGE_18_44",
            "AGE_RANGE_18_49",
            "AGE_RANGE_18_54",
            "AGE_RANGE_18_64",
            "AGE_RANGE_18_65_UP",
            "AGE_RANGE_21_34",
            "AGE_RANGE_25_34",
            "AGE_RANGE_25_44",
            "AGE_RANGE_25_49",
            "AGE_RANGE_25_54",
            "AGE_RANGE_25_64",
            "AGE_RANGE_25_65_UP",
            "AGE_RANGE_35_44",
            "AGE_RANGE_35_49",
            "AGE_RANGE_35_54",
            "AGE_RANGE_35_64",
            "AGE_RANGE_35_65_UP",
            "AGE_RANGE_45_54",
            "AGE_RANGE_45_64",
            "AGE_RANGE_45_65_UP",
            "AGE_RANGE_50_65_UP",
            "AGE_RANGE_55_64",
            "AGE_RANGE_55_65_UP",
            "AGE_RANGE_65_UP"
          ]
        },
        "genders": {
          "description": "Targeted genders. An unset value is equivalent to targeting MALE and FEMALE.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__GenderInfo"
          }
        },
        "devices": {
          "description": "Targeted devices. If not specified, targets all applicable devices. Applicable devices vary by product and region and can be obtained from ReachPlanService.ListPlannableProducts.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__DeviceInfo"
          }
        },
        "network": {
          "description": "Targetable network for the ad product. If not specified, targets all applicable networks. Applicable networks vary by product and region and can be obtained from ReachPlanService.ListPlannableProducts.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used as a return value only. Represents value unknown in this version.",
            "YouTube network.",
            "Google Video Partners (GVP) network.",
            "A combination of the YouTube network and the Google Video Partners network."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "YOUTUBE",
            "GOOGLE_VIDEO_PARTNERS",
            "YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS"
          ]
        },
        "audienceTargeting": {
          "description": "Targeted audiences. If not specified, does not target any specific audience.",
          "$ref": "GoogleAdsGoogleadsV21Services__AudienceTargeting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AudienceTargeting": {
      "id": "GoogleAdsGoogleadsV21Services__AudienceTargeting",
      "description": "Audience targeting for reach forecast.",
      "type": "object",
      "properties": {
        "userInterest": {
          "description": "List of audiences based on user interests to be targeted.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
          }
        },
        "userLists": {
          "description": "List of audiences based on user lists to be targeted.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannedProduct": {
      "id": "GoogleAdsGoogleadsV21Services__PlannedProduct",
      "description": "A product being planned for reach.",
      "type": "object",
      "properties": {
        "plannableProductCode": {
          "description": "Required. Selected product for planning. The code associated with the ad product (for example: Trueview, Bumper). To list the available plannable product codes use ReachPlanService.ListPlannableProducts.",
          "type": "string"
        },
        "budgetMicros": {
          "description": "Required. Maximum budget allocation in micros for the selected product. The value is specified in the selected planning currency_code. For example: 1 000 000$ = 1 000 000 000 000 micros.",
          "type": "string",
          "format": "int64"
        },
        "conversionRate": {
          "description": "Conversion rate as a decimal between 0 and 1, exclusive. For example: if 2% of ad interactions are expected to lead to conversions, conversion_rate should be 0.02. This field is required for DEMAND_GEN plannable products. It is not supported for other plannable products.",
          "type": "number",
          "format": "double"
        },
        "advancedProductTargeting": {
          "description": "Targeting settings for the selected product. To list the available targeting for each product use ReachPlanService.ListPlannableProducts.",
          "$ref": "GoogleAdsGoogleadsV21Services__AdvancedProductTargeting"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AdvancedProductTargeting": {
      "id": "GoogleAdsGoogleadsV21Services__AdvancedProductTargeting",
      "description": "Advanced targeting settings for products.",
      "type": "object",
      "properties": {
        "surfaceTargetingSettings": {
          "description": "Surface targeting settings for this product.",
          "$ref": "GoogleAdsGoogleadsV21Services__SurfaceTargeting"
        },
        "targetFrequencySettings": {
          "description": "Settings for a Target frequency campaign. Must be set when selecting the TARGET_FREQUENCY product. See https://support.google.com/google-ads/answer/12400225 for more information about Target Frequency campaigns.",
          "$ref": "GoogleAdsGoogleadsV21Services__TargetFrequencySettings"
        },
        "youtubeSelectSettings": {
          "description": "Settings for YouTube Select targeting.",
          "$ref": "GoogleAdsGoogleadsV21Services__YouTubeSelectSettings"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__TargetFrequencySettings": {
      "id": "GoogleAdsGoogleadsV21Services__TargetFrequencySettings",
      "description": "Target Frequency settings for a supported product.",
      "type": "object",
      "properties": {
        "timeUnit": {
          "description": "Required. The time unit used to describe the time frame for target_frequency.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Optimize bidding to reach Target Frequency in a week.",
            "Optimize bidding to reach Target Frequency in a month."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WEEKLY",
            "MONTHLY"
          ]
        },
        "targetFrequency": {
          "description": "Required. The target frequency goal per selected time unit.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__YouTubeSelectSettings": {
      "id": "GoogleAdsGoogleadsV21Services__YouTubeSelectSettings",
      "description": "Request settings for YouTube Select Lineups",
      "type": "object",
      "properties": {
        "lineupId": {
          "description": "Lineup for YouTube Select Targeting.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ForecastMetricOptions": {
      "id": "GoogleAdsGoogleadsV21Services__ForecastMetricOptions",
      "description": "Controls forecast metrics to return.",
      "type": "object",
      "properties": {
        "includeCoview": {
          "description": "Indicates whether to include co-view metrics in the response forecast.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateReachForecastResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateReachForecastResponse",
      "description": "Response message containing the generated reach curve.",
      "type": "object",
      "properties": {
        "onTargetAudienceMetrics": {
          "description": "Reference on target audiences for this curve.",
          "$ref": "GoogleAdsGoogleadsV21Services__OnTargetAudienceMetrics"
        },
        "reachCurve": {
          "description": "The generated reach curve for the planned product mix.",
          "$ref": "GoogleAdsGoogleadsV21Services__ReachCurve"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__OnTargetAudienceMetrics": {
      "id": "GoogleAdsGoogleadsV21Services__OnTargetAudienceMetrics",
      "description": "Audience metrics for the planned products. These metrics consider the following targeting dimensions: - Location - PlannableAgeRange - Gender - AudienceTargeting (only for youtube_audience_size)",
      "type": "object",
      "properties": {
        "youtubeAudienceSize": {
          "description": "Reference audience size matching the considered targeting for YouTube.",
          "type": "string",
          "format": "int64"
        },
        "censusAudienceSize": {
          "description": "Reference audience size matching the considered targeting for Census.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ReachCurve": {
      "id": "GoogleAdsGoogleadsV21Services__ReachCurve",
      "description": "The reach curve for the planned products.",
      "type": "object",
      "properties": {
        "reachForecasts": {
          "description": "All points on the reach curve.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ReachForecast"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ReachForecast": {
      "id": "GoogleAdsGoogleadsV21Services__ReachForecast",
      "description": "A point on reach curve.",
      "type": "object",
      "properties": {
        "costMicros": {
          "description": "The cost in micros.",
          "type": "string",
          "format": "int64"
        },
        "forecast": {
          "description": "Forecasted traffic metrics for this point.",
          "$ref": "GoogleAdsGoogleadsV21Services__Forecast"
        },
        "plannedProductReachForecasts": {
          "description": "The forecasted allocation and traffic metrics for each planned product at this point on the reach curve.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__PlannedProductReachForecast"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__Forecast": {
      "id": "GoogleAdsGoogleadsV21Services__Forecast",
      "description": "Forecasted traffic metrics for the planned products and targeting.",
      "type": "object",
      "properties": {
        "onTargetReach": {
          "description": "Number of unique people reached at least GenerateReachForecastRequest.min_effective_frequency or GenerateReachForecastRequest.effective_frequency_limit times that exactly matches the Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the on_target_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "totalReach": {
          "description": "Total number of unique people reached at least GenerateReachForecastRequest.min_effective_frequency or GenerateReachForecastRequest.effective_frequency_limit times. This includes people that may fall outside the specified Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the total_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "onTargetImpressions": {
          "description": "Number of ad impressions that exactly matches the Targeting.",
          "type": "string",
          "format": "int64"
        },
        "totalImpressions": {
          "description": "Total number of ad impressions. This includes impressions that may fall outside the specified Targeting, due to insufficient information on signed-in users.",
          "type": "string",
          "format": "int64"
        },
        "viewableImpressions": {
          "description": "Number of times the ad's impressions were considered viewable. See https://support.google.com/google-ads/answer/7029393 for more information about what makes an ad viewable and how viewability is measured.",
          "type": "string",
          "format": "int64"
        },
        "effectiveFrequencyBreakdowns": {
          "description": "A list of effective frequency forecasts. The list is ordered starting with 1+ and ending with the value set in GenerateReachForecastRequest.effective_frequency_limit. If no effective_frequency_limit was set, this list will be empty.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__EffectiveFrequencyBreakdown"
          }
        },
        "onTargetCoviewReach": {
          "description": "Number of unique people reached that exactly matches the Targeting including co-viewers.",
          "type": "string",
          "format": "int64"
        },
        "totalCoviewReach": {
          "description": "Number of unique people reached including co-viewers. This includes people that may fall outside the specified Targeting.",
          "type": "string",
          "format": "int64"
        },
        "onTargetCoviewImpressions": {
          "description": "Number of ad impressions that exactly matches the Targeting including co-viewers.",
          "type": "string",
          "format": "int64"
        },
        "totalCoviewImpressions": {
          "description": "Total number of ad impressions including co-viewers. This includes impressions that may fall outside the specified Targeting, due to insufficient information on signed-in users.",
          "type": "string",
          "format": "int64"
        },
        "views": {
          "description": "Number of ad views forecasted for the specified product and targeting. A view is counted when a viewer views a larger portion or the entirety of an ad beyond an impression. See https://support.google.com/google-ads/answer/2375431 for more information on views.",
          "type": "string",
          "format": "int64"
        },
        "conversions": {
          "description": "The number of conversions. This metric is only available for DEMAND_GEN plannable products. See https://support.google.com/google-ads/answer/2375431 for more information on conversions.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__EffectiveFrequencyBreakdown": {
      "id": "GoogleAdsGoogleadsV21Services__EffectiveFrequencyBreakdown",
      "description": "A breakdown of the number of unique people reached at a given effective frequency.",
      "type": "object",
      "properties": {
        "effectiveFrequency": {
          "description": "The effective frequency [1-10].",
          "type": "integer",
          "format": "int32"
        },
        "onTargetReach": {
          "description": "The number of unique people reached at least effective_frequency times that exactly matches the Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the on_target_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "totalReach": {
          "description": "Total number of unique people reached at least effective_frequency times. This includes people that may fall outside the specified Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the total_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "effectiveCoviewReach": {
          "description": "The number of users (including co-viewing users) reached for the associated effective_frequency value.",
          "type": "string",
          "format": "int64"
        },
        "onTargetEffectiveCoviewReach": {
          "description": "The number of users (including co-viewing users) reached for the associated effective_frequency value within the specified plan demographic.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannedProductReachForecast": {
      "id": "GoogleAdsGoogleadsV21Services__PlannedProductReachForecast",
      "description": "The forecasted allocation and traffic metrics for a specific product at a point on the reach curve.",
      "type": "object",
      "properties": {
        "plannableProductCode": {
          "description": "Selected product for planning. The product codes returned are within the set of the ones returned by ListPlannableProducts when using the same location ID.",
          "type": "string"
        },
        "costMicros": {
          "description": "The cost in micros. This may differ from the product's input allocation if one or more planned products cannot fulfill the budget because of limited inventory.",
          "type": "string",
          "format": "int64"
        },
        "plannedProductForecast": {
          "description": "Forecasted traffic metrics for this product.",
          "$ref": "GoogleAdsGoogleadsV21Services__PlannedProductForecast"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannedProductForecast": {
      "id": "GoogleAdsGoogleadsV21Services__PlannedProductForecast",
      "description": "Forecasted traffic metrics for a planned product.",
      "type": "object",
      "properties": {
        "onTargetReach": {
          "description": "Number of unique people reached that exactly matches the Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the on_target_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "totalReach": {
          "description": "Number of unique people reached. This includes people that may fall outside the specified Targeting. Note that a minimum number of unique people must be reached in order for data to be reported. If the minimum number is not met, the total_reach value will be rounded to 0.",
          "type": "string",
          "format": "int64"
        },
        "onTargetImpressions": {
          "description": "Number of ad impressions that exactly matches the Targeting.",
          "type": "string",
          "format": "int64"
        },
        "totalImpressions": {
          "description": "Total number of ad impressions. This includes impressions that may fall outside the specified Targeting, due to insufficient information on signed-in users.",
          "type": "string",
          "format": "int64"
        },
        "viewableImpressions": {
          "description": "Number of times the ad's impressions were considered viewable. See https://support.google.com/google-ads/answer/7029393 for more information about what makes an ad viewable and how viewability is measured.",
          "type": "string",
          "format": "int64"
        },
        "onTargetCoviewReach": {
          "description": "Number of unique people reached that exactly matches the Targeting including co-viewers.",
          "type": "string",
          "format": "int64"
        },
        "totalCoviewReach": {
          "description": "Number of unique people reached including co-viewers. This includes people that may fall outside the specified Targeting.",
          "type": "string",
          "format": "int64"
        },
        "onTargetCoviewImpressions": {
          "description": "Number of ad impressions that exactly matches the Targeting including co-viewers.",
          "type": "string",
          "format": "int64"
        },
        "totalCoviewImpressions": {
          "description": "Total number of ad impressions including co-viewers. This includes impressions that may fall outside the specified Targeting, due to insufficient information on signed-in users.",
          "type": "string",
          "format": "int64"
        },
        "averageFrequency": {
          "description": "The number of times per selected time unit a user will see an ad, averaged over the number of time units in the forecast length. This field will only be populated for a Target Frequency campaign. See https://support.google.com/google-ads/answer/12400225 for more information about Target Frequency campaigns.",
          "type": "number",
          "format": "double"
        },
        "views": {
          "description": "Number of ad views forecasted for the specified product and targeting. A view is counted when a viewer views a larger portion or the entirety of an ad beyond an impression. See https://support.google.com/google-ads/answer/2375431 for more information on views.",
          "type": "string",
          "format": "int64"
        },
        "conversions": {
          "description": "The number of conversions. This metric is only available for DEMAND_GEN plannable products. See https://support.google.com/google-ads/answer/2375431 for more information on conversions.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableUserListsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableUserListsRequest",
      "description": "Request message for ReachPlanService.ListPlannableUserLists that lists the available user lists for a customer.",
      "type": "object",
      "properties": {
        "customerId": {
          "description": "Required. The ID of the customer.",
          "type": "string"
        },
        "customerReachGroup": {
          "description": "The name of the customer being planned for. This is a user-defined value.",
          "type": "string"
        },
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableUserListsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableUserListsResponse",
      "description": "A response with all available user lists with their plannable status.",
      "type": "object",
      "properties": {
        "plannableUserLists": {
          "description": "The list of user lists available for planning and related targeting metadata.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__PlannableUserList"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannableUserList": {
      "id": "GoogleAdsGoogleadsV21Services__PlannableUserList",
      "description": "A plannable user list.",
      "type": "object",
      "properties": {
        "userListInfo": {
          "description": "The user list ID.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserListInfo"
        },
        "displayName": {
          "description": "The name of the user list.",
          "type": "string"
        },
        "userListType": {
          "description": "The user list type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "UserList represented as a collection of conversion types.",
            "UserList represented as a combination of other user lists/interests.",
            "UserList created in the Google Ad Manager platform.",
            "UserList associated with a rule.",
            "UserList with users similar to users of another UserList.",
            "UserList of first-party CRM data provided by advertiser in the form of emails or other formats.",
            "LookalikeUserlist, composed of users similar to those of a configurable seed (set of UserLists)"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REMARKETING",
            "LOGICAL",
            "EXTERNAL_REMARKETING",
            "RULE_BASED",
            "SIMILAR",
            "CRM_BASED",
            "LOOKALIKE"
          ]
        },
        "plannableStatus": {
          "description": "The plannable status of the user list.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The user list is plannable.",
            "The user list is not plannable."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PLANNABLE",
            "UNPLANNABLE"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsRequest",
      "description": "Request message for ReachPlanService.ListPlannableUserInterests.",
      "type": "object",
      "properties": {
        "customerId": {
          "description": "Required. The ID of the customer.",
          "type": "string"
        },
        "userInterestTaxonomyTypes": {
          "description": "Optional. A filter by user interest type. If set, only user interests with a type listed in the filter will be returned. If not set, user interests of all supported types will be returned. Supported user interest types are AFFINITY and IN_MARKET. Each type must be specified at most once.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "The affinity for this user interest.",
              "The market for this user interest.",
              "Users known to have installed applications in the specified categories.",
              "The geographical location of the interest-based vertical.",
              "User interest criteria for new smart phone users."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "AFFINITY",
              "IN_MARKET",
              "MOBILE_APP_INSTALL_USER",
              "VERTICAL_GEO",
              "NEW_SMART_PHONE_USER"
            ]
          }
        },
        "nameQuery": {
          "description": "A filter by user interest name. If set, only user interests with a name containing the literal string (case insensitive) in the filter will be returned. Maximum length is 200 characters.",
          "type": "string"
        },
        "pathQuery": {
          "description": "A filter by user interest path. If set, only user interests with a path containing the literal string (case insensitive) in the filter will be returned. Maximum length is 200 characters.",
          "type": "string"
        },
        "reachApplicationInfo": {
          "description": "Optional. Additional information on the application issuing the request.",
          "$ref": "GoogleAdsGoogleadsV21Common__AdditionalApplicationInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ListPlannableUserInterestsResponse",
      "description": "Response message for ReachPlanService.ListPlannableUserInterests.",
      "type": "object",
      "properties": {
        "plannableUserInterests": {
          "description": "The list of plannable user interests.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__PlannableUserInterest"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PlannableUserInterest": {
      "id": "GoogleAdsGoogleadsV21Services__PlannableUserInterest",
      "description": "A plannable user interest that can be targeted in a reach forecast using ReachPlanService.GenerateReachForecast.",
      "type": "object",
      "properties": {
        "userInterest": {
          "description": "The user interest id.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserInterestInfo"
        },
        "userInterestType": {
          "description": "The user interest type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The affinity for this user interest.",
            "The market for this user interest.",
            "Users known to have installed applications in the specified categories.",
            "The geographical location of the interest-based vertical.",
            "User interest criteria for new smart phone users."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AFFINITY",
            "IN_MARKET",
            "MOBILE_APP_INSTALL_USER",
            "VERTICAL_GEO",
            "NEW_SMART_PHONE_USER"
          ]
        },
        "userInterestDisplayName": {
          "description": "The user interest display name. For example, \"Autos & Vehicles\"",
          "type": "string"
        },
        "userInterestPath": {
          "description": "The user interest path. For example, \"/Autos & Vehicles/Motor Vehicles/Motor Vehicles by Type/Off-Road Vehicles\"",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ApplyRecommendationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__ApplyRecommendationRequest",
      "description": "Request message for RecommendationService.ApplyRecommendation.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to apply recommendations. If partial_failure=false all recommendations should be of the same type There is a limit of 100 operations per request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ApplyRecommendationOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, operations will be carried out as a transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ApplyRecommendationOperation": {
      "id": "GoogleAdsGoogleadsV21Services__ApplyRecommendationOperation",
      "description": "Information about the operation to apply a recommendation and any parameters to customize it.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name of the recommendation to apply.",
          "type": "string"
        },
        "campaignBudget": {
          "description": "Optional parameters to use when applying a campaign budget recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CampaignBudgetParameters"
        },
        "textAd": {
          "description": "Optional parameters to use when applying a text ad recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TextAdParameters"
        },
        "keyword": {
          "description": "Optional parameters to use when applying keyword recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_KeywordParameters"
        },
        "targetCpaOptIn": {
          "description": "Optional parameters to use when applying target CPA opt-in recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetCpaOptInParameters"
        },
        "targetRoasOptIn": {
          "description": "Optional parameters to use when applying target ROAS opt-in recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetRoasOptInParameters"
        },
        "calloutExtension": {
          "description": "Parameters to use when applying callout extension recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutExtensionParameters"
        },
        "callExtension": {
          "description": "Parameters to use when applying call extension recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallExtensionParameters"
        },
        "sitelinkExtension": {
          "description": "Parameters to use when applying sitelink recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkExtensionParameters"
        },
        "moveUnusedBudget": {
          "description": "Parameters to use when applying move unused budget recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters"
        },
        "responsiveSearchAd": {
          "description": "Parameters to use when applying a responsive search ad recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters"
        },
        "useBroadMatchKeyword": {
          "description": "Parameters to use when applying a use broad match keyword recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters"
        },
        "responsiveSearchAdAsset": {
          "description": "Parameters to use when applying a responsive search ad asset recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters"
        },
        "responsiveSearchAdImproveAdStrength": {
          "description": "Parameters to use when applying a responsive search ad improve ad strength recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters"
        },
        "raiseTargetCpaBidTooLow": {
          "description": "Parameters to use when applying a raise target CPA bid too low recommendation. The apply is asynchronous and can take minutes depending on the number of ad groups there is in the related campaign.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaBidTooLowParameters"
        },
        "forecastingSetTargetRoas": {
          "description": "Parameters to use when applying a forecasting set target ROAS recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters"
        },
        "calloutAsset": {
          "description": "Parameters to use when applying callout asset recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutAssetParameters"
        },
        "callAsset": {
          "description": "Parameters to use when applying call asset recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallAssetParameters"
        },
        "sitelinkAsset": {
          "description": "Parameters to use when applying sitelink asset recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkAssetParameters"
        },
        "raiseTargetCpa": {
          "description": "Parameters to use when applying raise Target CPA recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaParameters"
        },
        "lowerTargetRoas": {
          "description": "Parameters to use when applying lower Target ROAS recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LowerTargetRoasParameters"
        },
        "forecastingSetTargetCpa": {
          "description": "Parameters to use when applying forecasting set target CPA recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters"
        },
        "setTargetCpa": {
          "description": "Parameters to use when applying set target CPA recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters"
        },
        "setTargetRoas": {
          "description": "Parameters to use when applying set target ROAS recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters"
        },
        "leadFormAsset": {
          "description": "Parameters to use when applying lead form asset recommendation.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LeadFormAssetParameters"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CampaignBudgetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CampaignBudgetParameters",
      "description": "Parameters to use when applying a campaign budget recommendation.",
      "type": "object",
      "properties": {
        "newBudgetAmountMicros": {
          "description": "New budget amount to set for target budget resource. This is a required field.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TextAdParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TextAdParameters",
      "description": "Parameters to use when applying a text ad recommendation.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "New ad to add to recommended ad group. All necessary fields need to be set in this message. This is a required field.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_KeywordParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_KeywordParameters",
      "description": "Parameters to use when applying keyword recommendation.",
      "type": "object",
      "properties": {
        "adGroup": {
          "description": "The ad group resource to add keyword to. This is a required field.",
          "type": "string"
        },
        "matchType": {
          "description": "The match type of the keyword. This is a required field.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Exact match.",
            "Phrase match.",
            "Broad match."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXACT",
            "PHRASE",
            "BROAD"
          ]
        },
        "cpcBidMicros": {
          "description": "Optional, CPC bid to set for the keyword. If not set, keyword will use bid based on bidding strategy used by target ad group.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetCpaOptInParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetCpaOptInParameters",
      "description": "Parameters to use when applying Target CPA recommendation.",
      "type": "object",
      "properties": {
        "targetCpaMicros": {
          "description": "Average CPA to use for Target CPA bidding strategy. This is a required field.",
          "type": "string",
          "format": "int64"
        },
        "newCampaignBudgetAmountMicros": {
          "description": "Optional, budget amount to set for the campaign.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetRoasOptInParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_TargetRoasOptInParameters",
      "description": "Parameters to use when applying a Target ROAS opt-in recommendation.",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "Average ROAS (revenue per unit of spend) to use for Target ROAS bidding strategy. The value is between 0.01 and 1000.0, inclusive. This is a required field, unless new_campaign_budget_amount_micros is set.",
          "type": "number",
          "format": "double"
        },
        "newCampaignBudgetAmountMicros": {
          "description": "Optional, budget amount to set for the campaign.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutExtensionParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutExtensionParameters",
      "description": "Parameters to use when applying callout extension recommendation.",
      "type": "object",
      "properties": {
        "calloutExtensions": {
          "description": "Callout extensions to be added. This is a required field.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CalloutFeedItem"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CalloutFeedItem": {
      "id": "GoogleAdsGoogleadsV21Common__CalloutFeedItem",
      "description": "Represents a callout extension.",
      "type": "object",
      "properties": {
        "calloutText": {
          "description": "The callout text. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallExtensionParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallExtensionParameters",
      "description": "Parameters to use when applying call extension recommendation.",
      "type": "object",
      "properties": {
        "callExtensions": {
          "description": "Call extensions to be added. This is a required field.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CallFeedItem"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__CallFeedItem": {
      "id": "GoogleAdsGoogleadsV21Common__CallFeedItem",
      "description": "Represents a Call extension.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "The advertiser's phone number to append to the ad. This string must not be empty.",
          "type": "string"
        },
        "countryCode": {
          "description": "Uppercase two-letter country code of the advertiser's phone number. This string must not be empty.",
          "type": "string"
        },
        "callTrackingEnabled": {
          "description": "Indicates whether call tracking is enabled. By default, call tracking is not enabled.",
          "type": "boolean"
        },
        "callConversionAction": {
          "description": "The conversion action to attribute a call conversion to. If not set a default conversion action is used. This field only has effect if call_tracking_enabled is set to true. Otherwise this field is ignored.",
          "type": "string"
        },
        "callConversionTrackingDisabled": {
          "description": "If true, disable call conversion tracking. call_conversion_action should not be set if this is true. Optional.",
          "type": "boolean"
        },
        "callConversionReportingState": {
          "description": "Enum value that indicates whether this call extension uses its own call conversion setting (or just have call conversion disabled), or following the account level setting.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Call conversion action is disabled.",
            "Call conversion action will use call conversion type set at the account level.",
            "Call conversion action will use call conversion type set at the resource (call only ads/call extensions) level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DISABLED",
            "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION",
            "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkExtensionParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkExtensionParameters",
      "description": "Parameters to use when applying sitelink recommendation.",
      "type": "object",
      "properties": {
        "sitelinkExtensions": {
          "description": "Sitelinks to be added. This is a required field.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__SitelinkFeedItem"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__SitelinkFeedItem": {
      "id": "GoogleAdsGoogleadsV21Common__SitelinkFeedItem",
      "description": "Represents a sitelink.",
      "type": "object",
      "properties": {
        "linkText": {
          "description": "URL display text for the sitelink. The length of this string should be between 1 and 25, inclusive.",
          "type": "string"
        },
        "line1": {
          "description": "First line of the description for the sitelink. If this value is set, line2 must also be set. The length of this string should be between 0 and 35, inclusive.",
          "type": "string"
        },
        "line2": {
          "description": "Second line of the description for the sitelink. If this value is set, line1 must also be set. The length of this string should be between 0 and 35, inclusive.",
          "type": "string"
        },
        "finalUrls": {
          "description": "A list of possible final URLs after all cross domain redirects.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "finalMobileUrls": {
          "description": "A list of possible final mobile URLs after all cross domain redirects.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "trackingUrlTemplate": {
          "description": "URL template for constructing a tracking URL.",
          "type": "string"
        },
        "urlCustomParameters": {
          "description": "A list of mappings to be used for substituting URL custom parameter tags in the tracking_url_template, final_urls, and/or final_mobile_urls.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__CustomParameter"
          }
        },
        "finalUrlSuffix": {
          "description": "Final URL suffix to be appended to landing page URLs served with parallel tracking.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters",
      "description": "Parameters to use when applying move unused budget recommendation.",
      "type": "object",
      "properties": {
        "budgetMicrosToMove": {
          "description": "Budget amount to move from excess budget to constrained budget. This is a required field.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters",
      "description": "Parameters to use when applying a responsive search ad recommendation.",
      "type": "object",
      "properties": {
        "ad": {
          "description": "Required. New ad to add to recommended ad group.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters",
      "description": "Parameters to use when applying a use broad match keyword recommendation.",
      "type": "object",
      "properties": {
        "newBudgetAmountMicros": {
          "description": "New budget amount to set for target budget resource.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters",
      "description": "Parameters to use when applying a responsive search ad asset recommendation.",
      "type": "object",
      "properties": {
        "updatedAd": {
          "description": "Updated ad. The current ad's content will be replaced.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters",
      "description": "Parameters to use when applying a responsive search ad improve ad strength recommendation.",
      "type": "object",
      "properties": {
        "updatedAd": {
          "description": "Updated ad. The current ad's content will be replaced.",
          "$ref": "GoogleAdsGoogleadsV21Resources__Ad"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaBidTooLowParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaBidTooLowParameters",
      "description": "Parameters to use when applying a raise target CPA bid too low recommendation. The apply is asynchronous and can take minutes depending on the number of ad groups there is in the related campaign..",
      "type": "object",
      "properties": {
        "targetMultiplier": {
          "description": "Required. A number greater than 1.0 indicating the factor by which to increase the target CPA. This is a required field.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters",
      "description": "Parameters to use when applying a forecasting set target roas recommendation.",
      "type": "object",
      "properties": {
        "targetRoas": {
          "description": "New target ROAS (revenue per unit of spend) to set for a campaign resource. The value is between 0.01 and 1000.0, inclusive.",
          "type": "number",
          "format": "double"
        },
        "campaignBudgetAmountMicros": {
          "description": "New campaign budget amount to set for a campaign resource.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutAssetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CalloutAssetParameters",
      "description": "Parameters to use when applying callout asset recommendations.",
      "type": "object",
      "properties": {
        "adAssetApplyParameters": {
          "description": "Required. Callout assets to be added. This is a required field.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters",
      "description": "Common parameters used when applying ad asset recommendations.",
      "type": "object",
      "properties": {
        "newAssets": {
          "description": "The assets to create and attach to a scope. This may be combined with existing_assets in the same call.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Asset"
          }
        },
        "existingAssets": {
          "description": "The resource names of existing assets to attach to a scope. This may be combined with new_assets in the same call.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "scope": {
          "description": "Required. The scope at which to apply the assets. Assets at the campaign scope level will be applied to the campaign associated with the recommendation. Assets at the customer scope will apply to the entire account. Assets at the campaign scope will override any attached at the customer scope.",
          "type": "string",
          "enumDescriptions": [
            "The apply scope has not been specified.",
            "Unknown.",
            "Apply at the customer scope.",
            "Apply at the campaign scope."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER",
            "CAMPAIGN"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallAssetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_CallAssetParameters",
      "description": "Parameters to use when applying call asset recommendations.",
      "type": "object",
      "properties": {
        "adAssetApplyParameters": {
          "description": "Required. Call assets to be added. This is a required field.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkAssetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_SitelinkAssetParameters",
      "description": "Parameters to use when applying sitelink asset recommendations.",
      "type": "object",
      "properties": {
        "adAssetApplyParameters": {
          "description": "Required. Sitelink assets to be added. This is a required field.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_RaiseTargetCpaParameters",
      "description": "Parameters to use when applying raise Target CPA recommendations.",
      "type": "object",
      "properties": {
        "targetCpaMultiplier": {
          "description": "Required. Target to set CPA multiplier to. This is a required field.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LowerTargetRoasParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LowerTargetRoasParameters",
      "description": "Parameters to use when applying lower Target ROAS recommendations.",
      "type": "object",
      "properties": {
        "targetRoasMultiplier": {
          "description": "Required. Target to set ROAS multiplier to. This is a required field.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters",
      "description": "Parameters to use when applying a set target CPA recommendation.",
      "type": "object",
      "properties": {
        "targetCpaMicros": {
          "description": "Average CPA to use for Target CPA bidding strategy.",
          "type": "string",
          "format": "int64"
        },
        "campaignBudgetAmountMicros": {
          "description": "New campaign budget amount to set for a campaign resource.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LeadFormAssetParameters": {
      "id": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_LeadFormAssetParameters",
      "description": "Parameters to use when applying a lead form asset recommendation.",
      "type": "object",
      "properties": {
        "adAssetApplyParameters": {
          "description": "Required. Lead form assets to be added. This is a required field.",
          "$ref": "GoogleAdsGoogleadsV21Services_ApplyRecommendationOperation_AdAssetApplyParameters"
        },
        "setSubmitLeadFormAssetCampaignGoal": {
          "description": "If true, the \"Submit Lead Form\" goal will be set on the target campaign. As a result, ads will be shown as lead form creative ads. If false, the \"Submit Lead Form\" goal will not be set on the campaign and ads will contain lead form assets.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ApplyRecommendationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__ApplyRecommendationResponse",
      "description": "Response message for RecommendationService.ApplyRecommendation.",
      "type": "object",
      "properties": {
        "results": {
          "description": "Results of operations to apply recommendations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ApplyRecommendationResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors) we return the RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ApplyRecommendationResult": {
      "id": "GoogleAdsGoogleadsV21Services__ApplyRecommendationResult",
      "description": "The result of applying a recommendation.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful applies.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__DismissRecommendationRequest": {
      "id": "GoogleAdsGoogleadsV21Services__DismissRecommendationRequest",
      "description": "Request message for RecommendationService.DismissRecommendation.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to dismiss recommendations. If partial_failure=false all recommendations should be of the same type There is a limit of 100 operations per request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_DismissRecommendationRequest_DismissRecommendationOperation"
          }
        },
        "partialFailure": {
          "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, operations will be carried in a single transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_DismissRecommendationRequest_DismissRecommendationOperation": {
      "id": "GoogleAdsGoogleadsV21Services_DismissRecommendationRequest_DismissRecommendationOperation",
      "description": "Operation to dismiss a single recommendation identified by resource_name.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The resource name of the recommendation to dismiss.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__DismissRecommendationResponse": {
      "id": "GoogleAdsGoogleadsV21Services__DismissRecommendationResponse",
      "description": "Response message for RecommendationService.DismissRecommendation.",
      "type": "object",
      "properties": {
        "results": {
          "description": "Results of operations to dismiss recommendations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_DismissRecommendationResponse_DismissRecommendationResult"
          }
        },
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors) we return the RPC level error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_DismissRecommendationResponse_DismissRecommendationResult": {
      "id": "GoogleAdsGoogleadsV21Services_DismissRecommendationResponse_DismissRecommendationResult",
      "description": "The result of dismissing a recommendation.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful dismissals.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateRecommendationsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateRecommendationsRequest",
      "description": "Request message for RecommendationService.GenerateRecommendations.",
      "type": "object",
      "properties": {
        "recommendationTypes": {
          "description": "Required. List of eligible recommendation_types to generate. If the uploaded criteria isn't sufficient to make a recommendation, or the campaign is already in the recommended state, no recommendation will be returned for that type. Generally, a recommendation is returned if all required fields for that recommendation_type are uploaded, but there are cases where this is still not sufficient. The following recommendation_types are supported for recommendation generation: CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Not specified.",
              "Used for return value only. Represents value unknown in this version.",
              "Provides optimized budget recommendations for campaigns.",
              "Keyword recommendation.",
              "Recommendation to add a new text ad.",
              "Recommendation to update a campaign to use a Target CPA bidding strategy.",
              "Recommendation to update a campaign to use the Maximize Conversions bidding strategy.",
              "Recommendation to enable Enhanced Cost Per Click for a campaign.",
              "Recommendation to start showing your campaign's ads on Google Search Partners Websites.",
              "Recommendation to update a campaign to use a Maximize Clicks bidding strategy.",
              "Recommendation to start using the \"Optimize\" ad rotation setting for the given ad group.",
              "Recommendation to change an existing keyword from one match type to a broader match type.",
              "Recommendation to move unused budget from one budget to a constrained budget.",
              "Budget recommendation for campaigns that are expected to become budget-constrained in the future (as opposed to the CAMPAIGN_BUDGET recommendation, which applies to campaigns that are currently budget-constrained).",
              "Recommendation to update a campaign to use a Target ROAS bidding strategy.",
              "Recommendation to add a new responsive search ad.",
              "Budget recommendation for campaigns whose ROI is predicted to increase with a budget adjustment.",
              "Recommendation to add broad match versions of keywords for fully automated conversion-based bidding campaigns.",
              "Recommendation to add new responsive search ad assets.",
              "Recommendation to upgrade a Smart Shopping campaign to a Performance Max campaign.",
              "Recommendation to improve strength of responsive search ad.",
              "Recommendation to update a campaign to use Display Expansion.",
              "Recommendation to upgrade a Local campaign to a Performance Max campaign.",
              "Recommendation to raise target CPA when it is too low and there are very few or no conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
              "Recommendation to raise the budget in advance of a seasonal event that is forecasted to increase traffic, and change bidding strategy from maximize conversion value to target ROAS.",
              "Recommendation to add callout assets to campaign or customer level.",
              "Recommendation to add sitelink assets to campaign or customer level.",
              "Recommendation to add call assets to campaign or customer level.",
              "Recommendation to add the age group attribute to offers that are demoted because of a missing age group.",
              "Recommendation to add a color to offers that are demoted because of a missing color.",
              "Recommendation to add a gender to offers that are demoted because of a missing gender.",
              "Recommendation to add a GTIN (Global Trade Item Number) to offers that are demoted because of a missing GTIN.",
              "Recommendation to add more identifiers to offers that are demoted because of missing identifiers.",
              "Recommendation to add the size to offers that are demoted because of a missing size.",
              "Recommendation informing a customer about a campaign that cannot serve because no products are being targeted.",
              "The shopping recommendation informing a customer about campaign with a high percentage of disapproved products.",
              "Recommendation to create a catch-all campaign that targets all offers.",
              "Recommendation to fix Merchant Center account suspension issues.",
              "Recommendation to fix Merchant Center account suspension warning issues.",
              "Recommendation to migrate offers targeted by Regular Shopping Campaigns to existing Performance Max campaigns.",
              "Recommendation to enable dynamic image extensions on the account, allowing Google to find the best images from ad landing pages and complement text ads.",
              "Recommendation to raise Target CPA based on Google predictions modeled from past conversions. It is applied asynchronously and can take minutes depending on the number of ad groups there are in the related campaign.",
              "Recommendation to lower Target ROAS.",
              "Recommendation to opt into Performance Max campaigns.",
              "Recommendation to improve the asset group strength of a Performance Max campaign to an \"Excellent\" rating.",
              "Recommendation to migrate Dynamic Search Ads to Performance Max campaigns.",
              "Recommendation to set a target CPA for campaigns that do not have one specified, in advance of a seasonal event that is forecasted to increase traffic.",
              "Recommendation to set a target CPA for campaigns that do not have one specified.",
              "Recommendation to set a target ROAS for campaigns that do not have one specified.",
              "Recommendation to update a campaign to use the Maximize Conversion Value bidding strategy.",
              "Recommendation to deploy Google Tag on more pages.",
              "Recommendation to turn on Final URL expansion for your Performance Max campaigns.",
              "Recommendation to update a customer list that hasn't been updated in the last 90 days.",
              "Recommendation to create a custom audience.",
              "Recommendation to add lead form assets to campaign or customer level.",
              "Recommendation to improve the strength of ads in Demand Gen campaigns."
            ],
            "enum": [
              "UNSPECIFIED",
              "UNKNOWN",
              "CAMPAIGN_BUDGET",
              "KEYWORD",
              "TEXT_AD",
              "TARGET_CPA_OPT_IN",
              "MAXIMIZE_CONVERSIONS_OPT_IN",
              "ENHANCED_CPC_OPT_IN",
              "SEARCH_PARTNERS_OPT_IN",
              "MAXIMIZE_CLICKS_OPT_IN",
              "OPTIMIZE_AD_ROTATION",
              "KEYWORD_MATCH_TYPE",
              "MOVE_UNUSED_BUDGET",
              "FORECASTING_CAMPAIGN_BUDGET",
              "TARGET_ROAS_OPT_IN",
              "RESPONSIVE_SEARCH_AD",
              "MARGINAL_ROI_CAMPAIGN_BUDGET",
              "USE_BROAD_MATCH_KEYWORD",
              "RESPONSIVE_SEARCH_AD_ASSET",
              "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX",
              "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH",
              "DISPLAY_EXPANSION_OPT_IN",
              "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX",
              "RAISE_TARGET_CPA_BID_TOO_LOW",
              "FORECASTING_SET_TARGET_ROAS",
              "CALLOUT_ASSET",
              "SITELINK_ASSET",
              "CALL_ASSET",
              "SHOPPING_ADD_AGE_GROUP",
              "SHOPPING_ADD_COLOR",
              "SHOPPING_ADD_GENDER",
              "SHOPPING_ADD_GTIN",
              "SHOPPING_ADD_MORE_IDENTIFIERS",
              "SHOPPING_ADD_SIZE",
              "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN",
              "SHOPPING_FIX_DISAPPROVED_PRODUCTS",
              "SHOPPING_TARGET_ALL_OFFERS",
              "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT",
              "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING",
              "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX",
              "DYNAMIC_IMAGE_EXTENSION_OPT_IN",
              "RAISE_TARGET_CPA",
              "LOWER_TARGET_ROAS",
              "PERFORMANCE_MAX_OPT_IN",
              "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH",
              "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX",
              "FORECASTING_SET_TARGET_CPA",
              "SET_TARGET_CPA",
              "SET_TARGET_ROAS",
              "MAXIMIZE_CONVERSION_VALUE_OPT_IN",
              "IMPROVE_GOOGLE_TAG_COVERAGE",
              "PERFORMANCE_MAX_FINAL_URL_OPT_IN",
              "REFRESH_CUSTOMER_MATCH_LIST",
              "CUSTOM_AUDIENCE_OPT_IN",
              "LEAD_FORM_ASSET",
              "IMPROVE_DEMAND_GEN_AD_STRENGTH"
            ]
          }
        },
        "advertisingChannelType": {
          "description": "Required. Advertising channel type of the campaign. The following advertising_channel_types are supported for recommendation generation: PERFORMANCE_MAX and SEARCH",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Search Network. Includes display bundled, and Search+ campaigns.",
            "Google Display Network only.",
            "Shopping campaigns serve on the shopping property and on google.com search results.",
            "Hotel Ads campaigns.",
            "Video campaigns.",
            "App Campaigns, and App Campaigns for Engagement, that run across multiple channels.",
            "Local ads campaigns.",
            "Smart campaigns.",
            "Performance Max campaigns.",
            "Local services campaigns.",
            "Travel campaigns.",
            "Demand Gen campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH",
            "DISPLAY",
            "SHOPPING",
            "HOTEL",
            "VIDEO",
            "MULTI_CHANNEL",
            "LOCAL",
            "SMART",
            "PERFORMANCE_MAX",
            "LOCAL_SERVICES",
            "TRAVEL",
            "DEMAND_GEN"
          ]
        },
        "campaignSitelinkCount": {
          "description": "Optional. Number of sitelinks on the campaign. This field is necessary for the following recommendation_types: SITELINK_ASSET",
          "type": "integer",
          "format": "int32"
        },
        "conversionTrackingStatus": {
          "description": "Optional. Current conversion tracking status. This field is necessary for the following recommendation_types: MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Customer does not use any conversion tracking.",
            "The conversion actions are created and managed by this customer.",
            "The conversion actions are created and managed by the manager specified in the request's `login-customer-id`.",
            "The conversion actions are created and managed by a manager different from the customer or manager specified in the request's `login-customer-id`."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_CONVERSION_TRACKED",
            "CONVERSION_TRACKING_MANAGED_BY_SELF",
            "CONVERSION_TRACKING_MANAGED_BY_THIS_MANAGER",
            "CONVERSION_TRACKING_MANAGED_BY_ANOTHER_MANAGER"
          ]
        },
        "biddingInfo": {
          "description": "Optional. Current bidding information of the campaign. This field is necessary for the following recommendation_types: CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BiddingInfo"
        },
        "adGroupInfo": {
          "description": "Optional. Current AdGroup Information. Supports information from a single AdGroup. This field is optional for the following recommendation_types: KEYWORD This field is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AdGroupInfo"
          }
        },
        "seedInfo": {
          "description": "Optional. Seed information for Keywords. This field is necessary for the following recommendation_types: KEYWORD",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_SeedInfo"
        },
        "budgetInfo": {
          "description": "Optional. Current budget information. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BudgetInfo"
        },
        "campaignImageAssetCount": {
          "description": "Optional. Current campaign image asset count. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "integer",
          "format": "int32"
        },
        "campaignCallAssetCount": {
          "description": "Optional. Current campaign call asset count. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "integer",
          "format": "int32"
        },
        "countryCodes": {
          "description": "Optional. Current campaign country codes. This field is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "languageCodes": {
          "description": "Optional. Current campaign language codes. This field is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "positiveLocationsIds": {
          "description": "Optional. Current campaign positive location ids. One of this field OR negative_location_ids is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "negativeLocationsIds": {
          "description": "Optional. Current campaign negative location ids. One of this field OR positive_location_ids is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "assetGroupInfo": {
          "description": "Optional. Current AssetGroup Information. This field is required for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AssetGroupInfo"
          }
        },
        "targetPartnerSearchNetwork": {
          "description": "Optional. If true, the campaign is opted into serving ads on the Google Partner Network. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "boolean"
        },
        "targetContentNetwork": {
          "description": "Optional. If true, the campaign is opted into serving ads on specified placements in the Google Display Network. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "boolean"
        },
        "merchantCenterAccountId": {
          "description": "Optional. Merchant Center account ID. This field should only be set when advertising_channel_type is PERFORMANCE_MAX. Setting this field causes RecommendationService to generate recommendations for Performance Max for retail instead of standard Performance Max. This field is optional for the following recommendation_types: CAMPAIGN_BUDGET",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BiddingInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BiddingInfo",
      "description": "Current bidding information of the campaign. Provides a wrapper for bidding-related signals that inform recommendations.",
      "type": "object",
      "properties": {
        "biddingStrategyType": {
          "description": "Current bidding strategy. This field is necessary for the following recommendation_types: CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Commission is an automatic bidding strategy in which the advertiser pays a certain portion of the conversion value.",
            "Enhanced CPC is a bidding strategy that raises bids for clicks that seem more likely to lead to a conversion and lowers them for clicks where they seem less likely.",
            "Fixed CPM is a manual bidding strategy with a fixed CPM.",
            "Used for return value only. Indicates that a campaign does not have a bidding strategy. This prevents the campaign from serving. For example, a campaign may be attached to a manager bidding strategy and the serving account is subsequently unlinked from the manager account. In this case the campaign will automatically be detached from the now inaccessible manager bidding strategy and transition to the INVALID bidding strategy type.",
            "Manual bidding strategy that allows advertiser to set the bid per advertiser-specified action.",
            "Manual click based bidding where user pays per click.",
            "Manual impression based bidding where user pays per thousand impressions.",
            "A bidding strategy that pays a configurable amount per video view.",
            "A bidding strategy that automatically maximizes number of conversions given a daily budget.",
            "An automated bidding strategy that automatically sets bids to maximize revenue while spending your budget.",
            "Page-One Promoted bidding scheme, which sets max cpc bids to target impressions on page one or page one promoted slots on google.com. This enum value is deprecated.",
            "Percent Cpc is bidding strategy where bids are a fraction of the advertised price for some good or service.",
            "Target CPA is an automated bid strategy that sets bids to help get as many conversions as possible at the target cost-per-acquisition (CPA) you set.",
            "Target CPM is an automated bid strategy that sets bids to help get as many impressions as possible at the target cost per one thousand impressions (CPM) you set.",
            "Target CPV is an automated bidding strategy that sets bids to optimize performance given the average target cost per view.",
            "An automated bidding strategy that sets bids so that a certain percentage of search ads are shown at the top of the first page (or other targeted location).",
            "Target Outrank Share is an automated bidding strategy that sets bids based on the target fraction of auctions where the advertiser should outrank a specific competitor. This enum value is deprecated.",
            "Target ROAS is an automated bidding strategy that helps you maximize revenue while averaging a specific target Return On Average Spend (ROAS).",
            "Target Spend is an automated bid strategy that sets your bids to help get as many clicks as possible within your budget."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "COMMISSION",
            "ENHANCED_CPC",
            "FIXED_CPM",
            "INVALID",
            "MANUAL_CPA",
            "MANUAL_CPC",
            "MANUAL_CPM",
            "MANUAL_CPV",
            "MAXIMIZE_CONVERSIONS",
            "MAXIMIZE_CONVERSION_VALUE",
            "PAGE_ONE_PROMOTED",
            "PERCENT_CPC",
            "TARGET_CPA",
            "TARGET_CPM",
            "TARGET_CPV",
            "TARGET_IMPRESSION_SHARE",
            "TARGET_OUTRANK_SHARE",
            "TARGET_ROAS",
            "TARGET_SPEND"
          ]
        },
        "targetCpaMicros": {
          "description": "Current target_cpa in micros. This can be populated for campaigns with a bidding strategy type of TARGET_CPA or MAXIMIZE_CONVERSIONS.",
          "type": "string",
          "format": "int64"
        },
        "targetRoas": {
          "description": "Current target_roas. This can be populated for campaigns with a bidding strategy type of TARGET_ROAS or MAXIMIZE_CONVERSION_VALUE.",
          "type": "number",
          "format": "double"
        },
        "targetImpressionShareInfo": {
          "description": "Optional. Current Target Impression Share information of the campaign. This field is necessary for the following recommendation_types: CAMPAIGN_BUDGET",
          "$ref": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_TargetImpressionShareInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_TargetImpressionShareInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_TargetImpressionShareInfo",
      "description": "Current Target Impression Share information of the campaign.",
      "type": "object",
      "properties": {
        "location": {
          "description": "Required. The targeted location on the search results page. This is required for campaigns where the AdvertisingChannelType is SEARCH and the bidding strategy type is TARGET_IMPRESSION_SHARE.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Any location on the web page.",
            "Top box of ads.",
            "Top slot in the top box of ads."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ANYWHERE_ON_PAGE",
            "TOP_OF_PAGE",
            "ABSOLUTE_TOP_OF_PAGE"
          ]
        },
        "targetImpressionShareMicros": {
          "description": "Required. The chosen fraction of targeted impression share in micros. For example, 1% equals 10,000. It must be a value between 1 and 1,000,000. This is required for campaigns with an AdvertisingChannelType of SEARCH and a bidding strategy type of TARGET_IMPRESSION_SHARE.",
          "type": "string",
          "format": "int64"
        },
        "maxCpcBidCeiling": {
          "description": "Optional. Ceiling of max CPC bids in micros set by automated bidders. This is optional for campaigns with an AdvertisingChannelType of SEARCH and a bidding strategy type of TARGET_IMPRESSION_SHARE.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AdGroupInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AdGroupInfo",
      "description": "Current AdGroup Information of the campaign.",
      "type": "object",
      "properties": {
        "adGroupType": {
          "description": "Optional. AdGroup Type of the AdGroup. This field is necessary for the following recommendation_types if ad_group_info is set: KEYWORD",
          "type": "string",
          "enumDescriptions": [
            "The type has not been specified.",
            "The received value is not known in this version. This is a response-only value.",
            "The default ad group type for Search campaigns.",
            "The default ad group type for Display campaigns.",
            "The ad group type for Shopping campaigns serving standard product ads.",
            "The default ad group type for Hotel campaigns.",
            "The type for ad groups in Smart Shopping campaigns.",
            "Short unskippable in-stream video ads.",
            "TrueView (skippable) in-stream video ads.",
            "TrueView in-display video ads.",
            "Unskippable in-stream video ads.",
            "Ad group type for Dynamic Search Ads ad groups.",
            "The type for ad groups in Shopping Comparison Listing campaigns.",
            "The ad group type for Promoted Hotel ad groups.",
            "Video responsive ad groups.",
            "Video efficient reach ad groups.",
            "Ad group type for Smart campaigns.",
            "Ad group type for Travel campaigns.",
            "Ad group type for YouTube Audio campaigns."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SEARCH_STANDARD",
            "DISPLAY_STANDARD",
            "SHOPPING_PRODUCT_ADS",
            "HOTEL_ADS",
            "SHOPPING_SMART_ADS",
            "VIDEO_BUMPER",
            "VIDEO_TRUE_VIEW_IN_STREAM",
            "VIDEO_TRUE_VIEW_IN_DISPLAY",
            "VIDEO_NON_SKIPPABLE_IN_STREAM",
            "SEARCH_DYNAMIC_ADS",
            "SHOPPING_COMPARISON_LISTING_ADS",
            "PROMOTED_HOTEL_ADS",
            "VIDEO_RESPONSIVE",
            "VIDEO_EFFICIENT_REACH",
            "SMART_CAMPAIGN_ADS",
            "TRAVEL_ADS",
            "YOUTUBE_AUDIO"
          ]
        },
        "keywords": {
          "description": "Optional. Current keywords. This field is optional for the following recommendation_types if ad_group_info is set: KEYWORD This field is required for the following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_SeedInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_SeedInfo",
      "description": "A keyword seed and a specific url to generate keywords from.",
      "type": "object",
      "properties": {
        "urlSeed": {
          "description": "A specific url to generate ideas from, for example: www.example.com/cars.",
          "type": "string"
        },
        "keywordSeeds": {
          "description": "Optional. Keywords or phrases to generate ideas from, for example: cars or \"car dealership near me\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BudgetInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_BudgetInfo",
      "description": "Current budget information of the campaign.",
      "type": "object",
      "properties": {
        "currentBudget": {
          "description": "Required. Current budget amount in micros. This field is necessary for the following recommendation_types if budget_info is set: CAMPAIGN_BUDGET",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AssetGroupInfo": {
      "id": "GoogleAdsGoogleadsV21Services_GenerateRecommendationsRequest_AssetGroupInfo",
      "description": "Current AssetGroup information of the campaign.",
      "type": "object",
      "properties": {
        "finalUrl": {
          "description": "Required. Current url of the asset group. This field is necessary for the following recommendation_types if asset_group_info is set: CAMPAIGN_BUDGET",
          "type": "string"
        },
        "headline": {
          "description": "Optional. Current headlines of the asset group. This field is optional for the following recommendation_types if asset_group_info is set: CAMPAIGN_BUDGET",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "description": {
          "description": "Optional. Current descriptions of the asset group. This field is optional for the following recommendation_types if asset_group_info is set: CAMPAIGN_BUDGET",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateRecommendationsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateRecommendationsResponse",
      "description": "Response message for RecommendationService.GenerateRecommendations.",
      "type": "object",
      "properties": {
        "recommendations": {
          "description": "List of generated recommendations from the passed in set of requested recommendation_types. If there isn't sufficient data to generate a recommendation for the requested recommendation_types, the result set won't contain a recommendation for that type.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Resources__Recommendation"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsRequest",
      "description": "Request message for ShareablePreviewService.GenerateShareablePreviews.",
      "type": "object",
      "properties": {
        "shareablePreviews": {
          "description": "Required. The list of shareable previews to generate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ShareablePreview"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ShareablePreview": {
      "id": "GoogleAdsGoogleadsV21Services__ShareablePreview",
      "description": "A shareable preview with its identifier.",
      "type": "object",
      "properties": {
        "assetGroupIdentifier": {
          "description": "Required. Asset group of the shareable preview.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupIdentifier"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__AssetGroupIdentifier": {
      "id": "GoogleAdsGoogleadsV21Services__AssetGroupIdentifier",
      "description": "Asset group of the shareable preview.",
      "type": "object",
      "properties": {
        "assetGroupId": {
          "description": "Required. The asset group identifier.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__GenerateShareablePreviewsResponse",
      "description": "Response message for ShareablePreviewService.GenerateShareablePreviews.",
      "type": "object",
      "properties": {
        "responses": {
          "description": "List of generate shareable preview results.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__ShareablePreviewOrError"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ShareablePreviewOrError": {
      "id": "GoogleAdsGoogleadsV21Services__ShareablePreviewOrError",
      "description": "Result of the generate shareable preview.",
      "type": "object",
      "properties": {
        "assetGroupIdentifier": {
          "description": "The asset group of the shareable preview.",
          "$ref": "GoogleAdsGoogleadsV21Services__AssetGroupIdentifier"
        },
        "shareablePreviewResult": {
          "description": "The shareable preview result.",
          "$ref": "GoogleAdsGoogleadsV21Services__ShareablePreviewResult"
        },
        "partialFailureError": {
          "description": "The shareable preview partial failure error.",
          "$ref": "GoogleRpc__Status"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ShareablePreviewResult": {
      "id": "GoogleAdsGoogleadsV21Services__ShareablePreviewResult",
      "description": "Message to hold a shareable preview result.",
      "type": "object",
      "properties": {
        "shareablePreviewUrl": {
          "description": "The shareable preview URL.",
          "type": "string"
        },
        "expirationDateTime": {
          "description": "Expiration date time using the ISO-8601 format.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsRequest",
      "description": "Request message for SmartCampaignSuggestService.SuggestSmartCampaignBudgetOptions.",
      "type": "object",
      "properties": {
        "campaign": {
          "description": "Required. The resource name of the campaign to get suggestion for.",
          "type": "string"
        },
        "suggestionInfo": {
          "description": "Required. Information needed to get budget options",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignSuggestionInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SmartCampaignSuggestionInfo": {
      "id": "GoogleAdsGoogleadsV21Services__SmartCampaignSuggestionInfo",
      "description": "Information needed to get suggestion for Smart Campaign. More information provided will help the system to derive better suggestions.",
      "type": "object",
      "properties": {
        "finalUrl": {
          "description": "Optional. Landing page URL of the campaign.",
          "type": "string"
        },
        "languageCode": {
          "description": "Optional. The two letter advertising language for the Smart campaign to be constructed, default to 'en' if not set.",
          "type": "string"
        },
        "adSchedules": {
          "description": "Optional. The business ad schedule.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__AdScheduleInfo"
          }
        },
        "keywordThemes": {
          "description": "Optional. Smart campaign keyword themes. This field may greatly improve suggestion accuracy and we recommend always setting it if possible.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__KeywordThemeInfo"
          }
        },
        "businessContext": {
          "description": "Optional. Context describing the business to advertise.",
          "$ref": "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_BusinessContext"
        },
        "businessProfileLocation": {
          "description": "Optional. The resource name of a Business Profile location. Business Profile location resource names can be fetched through the Business Profile API and adhere to the following format: `locations/{locationId}`. See the [Business Profile API] (https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations) for additional details.",
          "type": "string"
        },
        "locationList": {
          "description": "Optional. The targeting geo location by locations.",
          "$ref": "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_LocationList"
        },
        "proximity": {
          "description": "Optional. The targeting geo location by proximity.",
          "$ref": "GoogleAdsGoogleadsV21Common__ProximityInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_BusinessContext": {
      "id": "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_BusinessContext",
      "description": "A context that describes a business.",
      "type": "object",
      "properties": {
        "businessName": {
          "description": "Optional. The name of the business.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_LocationList": {
      "id": "GoogleAdsGoogleadsV21Services_SmartCampaignSuggestionInfo_LocationList",
      "description": "A list of locations.",
      "type": "object",
      "properties": {
        "locations": {
          "description": "Required. Locations.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__LocationInfo"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignBudgetOptionsResponse",
      "description": "Response message for SmartCampaignSuggestService.SuggestSmartCampaignBudgetOptions. Depending on whether the system could suggest the options, either all of the options or none of them might be returned.",
      "type": "object",
      "properties": {
        "low": {
          "description": "Optional. The lowest budget option.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption"
        },
        "recommended": {
          "description": "Optional. The recommended budget option.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption"
        },
        "high": {
          "description": "Optional. The highest budget option.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption": {
      "id": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption",
      "description": "Smart Campaign budget option.",
      "type": "object",
      "properties": {
        "dailyAmountMicros": {
          "description": "The amount of the budget, in the local currency for the account. Amount is specified in micros, where one million is equivalent to one currency unit.",
          "type": "string",
          "format": "int64"
        },
        "metrics": {
          "description": "Metrics pertaining to the suggested budget, could be empty if there is not enough information to derive the estimates.",
          "$ref": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics": {
      "id": "GoogleAdsGoogleadsV21Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics",
      "description": "Performance metrics for a given budget option.",
      "type": "object",
      "properties": {
        "minDailyClicks": {
          "description": "The estimated min daily clicks.",
          "type": "string",
          "format": "int64"
        },
        "maxDailyClicks": {
          "description": "The estimated max daily clicks.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdRequest",
      "description": "Request message for SmartCampaignSuggestService.SuggestSmartCampaignAd.",
      "type": "object",
      "properties": {
        "suggestionInfo": {
          "description": "Required. Inputs used to suggest a Smart campaign ad. Required fields: final_url, language_code, keyword_themes. Optional but recommended fields to improve the quality of the suggestion: business_setting and geo_target.",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignSuggestionInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestSmartCampaignAdResponse",
      "description": "Response message for SmartCampaignSuggestService.SuggestSmartCampaignAd.",
      "type": "object",
      "properties": {
        "adInfo": {
          "description": "Optional. Ad info includes 3 creative headlines and 2 creative descriptions.",
          "$ref": "GoogleAdsGoogleadsV21Common__SmartCampaignAdInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesRequest",
      "description": "Request message for SmartCampaignSuggestService.SuggestKeywordThemes.",
      "type": "object",
      "properties": {
        "suggestionInfo": {
          "description": "Required. Information to get keyword theme suggestions. Required fields: * suggestion_info.final_url * suggestion_info.language_code * suggestion_info.geo_target Recommended fields: * suggestion_info.business_setting",
          "$ref": "GoogleAdsGoogleadsV21Services__SmartCampaignSuggestionInfo"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestKeywordThemesResponse",
      "description": "Response message for SmartCampaignSuggestService.SuggestKeywordThemes.",
      "type": "object",
      "properties": {
        "keywordThemes": {
          "description": "Smart campaign keyword theme suggestions.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services_SuggestKeywordThemesResponse_KeywordTheme"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services_SuggestKeywordThemesResponse_KeywordTheme": {
      "id": "GoogleAdsGoogleadsV21Services_SuggestKeywordThemesResponse_KeywordTheme",
      "description": "A Smart campaign keyword theme suggestion.",
      "type": "object",
      "properties": {
        "keywordThemeConstant": {
          "description": "A Smart campaign keyword theme constant.",
          "$ref": "GoogleAdsGoogleadsV21Resources__KeywordThemeConstant"
        },
        "freeFormKeywordTheme": {
          "description": "A free-form text keyword theme.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdRequest": {
      "id": "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdRequest",
      "description": "Request message for ThirdPartyAppAnalyticsLinkService.RegenerateShareableLinkId.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdResponse": {
      "id": "GoogleAdsGoogleadsV21Services__RegenerateShareableLinkIdResponse",
      "description": "Response message for ThirdPartyAppAnalyticsLinkService.RegenerateShareableLinkId.",
      "type": "object",
      "properties": {}
    },
    "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsRequest": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsRequest",
      "description": "Request message for TravelAssetSuggestionService.SuggestTravelAssets.",
      "type": "object",
      "properties": {
        "languageOption": {
          "description": "Required. The language specifications in BCP 47 format (for example, en-US, zh-CN, etc.) for the asset suggestions. Text will be in this language. Usually matches one of the campaign target languages.",
          "type": "string"
        },
        "placeIds": {
          "description": "The Google Maps Place IDs of hotels for which assets are requested. See https://developers.google.com/places/web-service/place-id for more information.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsResponse": {
      "id": "GoogleAdsGoogleadsV21Services__SuggestTravelAssetsResponse",
      "description": "Response message for TravelAssetSuggestionService.SuggestTravelAssets.",
      "type": "object",
      "properties": {
        "hotelAssetSuggestions": {
          "description": "Asset suggestions for each place ID submitted in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__HotelAssetSuggestion"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__HotelAssetSuggestion": {
      "id": "GoogleAdsGoogleadsV21Services__HotelAssetSuggestion",
      "description": "Message containing the asset suggestions for a hotel.",
      "type": "object",
      "properties": {
        "placeId": {
          "description": "Google Places ID of the hotel.",
          "type": "string"
        },
        "finalUrl": {
          "description": "Suggested final URL for an AssetGroup.",
          "type": "string"
        },
        "hotelName": {
          "description": "Hotel name in requested language.",
          "type": "string"
        },
        "callToAction": {
          "description": "Call to action type.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The call to action type is learn more.",
            "The call to action type is get quote.",
            "The call to action type is apply now.",
            "The call to action type is sign up.",
            "The call to action type is contact us.",
            "The call to action type is subscribe.",
            "The call to action type is download.",
            "The call to action type is book now.",
            "The call to action type is shop now.",
            "The call to action type is buy now.",
            "The call to action type is donate now.",
            "The call to action type is order now.",
            "The call to action type is play now.",
            "The call to action type is see more.",
            "The call to action type is start now.",
            "The call to action type is visit site.",
            "The call to action type is watch now."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LEARN_MORE",
            "GET_QUOTE",
            "APPLY_NOW",
            "SIGN_UP",
            "CONTACT_US",
            "SUBSCRIBE",
            "DOWNLOAD",
            "BOOK_NOW",
            "SHOP_NOW",
            "BUY_NOW",
            "DONATE_NOW",
            "ORDER_NOW",
            "PLAY_NOW",
            "SEE_MORE",
            "START_NOW",
            "VISIT_SITE",
            "WATCH_NOW"
          ]
        },
        "textAssets": {
          "description": "Text assets such as headline, description, etc.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__HotelTextAsset"
          }
        },
        "imageAssets": {
          "description": "Image assets such as landscape/portrait/square, etc.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__HotelImageAsset"
          }
        },
        "status": {
          "description": "The status of the hotel asset suggestion.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The hotel asset suggestion was successfully retrieved.",
            "A hotel look up returns nothing.",
            "A Google Places ID is invalid and cannot be decoded."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SUCCESS",
            "HOTEL_NOT_FOUND",
            "INVALID_PLACE_ID"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__HotelTextAsset": {
      "id": "GoogleAdsGoogleadsV21Services__HotelTextAsset",
      "description": "A single text asset suggestion for a hotel.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Asset text in requested language.",
          "type": "string"
        },
        "assetFieldType": {
          "description": "The text asset type. For example, HEADLINE, DESCRIPTION, etc.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__HotelImageAsset": {
      "id": "GoogleAdsGoogleadsV21Services__HotelImageAsset",
      "description": "A single image asset suggestion for a hotel.",
      "type": "object",
      "properties": {
        "uri": {
          "description": "URI for the image.",
          "type": "string"
        },
        "assetFieldType": {
          "description": "The Image asset type. For example, MARKETING_IMAGE, PORTRAIT_MARKETING_IMAGE, etc.",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "The asset is linked for use as a headline.",
            "The asset is linked for use as a description.",
            "The asset is linked for use as mandatory ad text.",
            "The asset is linked for use as a marketing image.",
            "The asset is linked for use as a media bundle.",
            "The asset is linked for use as a YouTube video.",
            "The asset is linked to indicate that a hotels campaign is \"Book on Google\" enabled.",
            "The asset is linked for use as a Lead Form extension.",
            "The asset is linked for use as a Promotion extension.",
            "The asset is linked for use as a Callout extension.",
            "The asset is linked for use as a Structured Snippet extension.",
            "The asset is linked for use as a Sitelink.",
            "The asset is linked for use as a Mobile App extension.",
            "The asset is linked for use as a Hotel Callout extension.",
            "The asset is linked for use as a Call extension.",
            "The asset is linked for use as a Price extension.",
            "The asset is linked for use as a long headline.",
            "The asset is linked for use as a business name.",
            "The asset is linked for use as a square marketing image.",
            "The asset is linked for use as a portrait marketing image.",
            "The asset is linked for use as a logo.",
            "The asset is linked for use as a landscape logo.",
            "The asset is linked for use as a non YouTube logo.",
            "The asset is linked for use to select a call-to-action.",
            "The asset is linked for use to select an ad image.",
            "The asset is linked for use as a business logo.",
            "The asset is linked for use as a hotel property in a Performance Max for travel goals campaign.",
            "The asset is linked for use as a Demand Gen carousel card.",
            "The asset is linked for use as a Business Message.",
            "The asset is linked for use as a tall portrait marketing image.",
            "The asset is linked for use as related YouTube videos."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "HEADLINE",
            "DESCRIPTION",
            "MANDATORY_AD_TEXT",
            "MARKETING_IMAGE",
            "MEDIA_BUNDLE",
            "YOUTUBE_VIDEO",
            "BOOK_ON_GOOGLE",
            "LEAD_FORM",
            "PROMOTION",
            "CALLOUT",
            "STRUCTURED_SNIPPET",
            "SITELINK",
            "MOBILE_APP",
            "HOTEL_CALLOUT",
            "CALL",
            "PRICE",
            "LONG_HEADLINE",
            "BUSINESS_NAME",
            "SQUARE_MARKETING_IMAGE",
            "PORTRAIT_MARKETING_IMAGE",
            "LOGO",
            "LANDSCAPE_LOGO",
            "VIDEO",
            "CALL_TO_ACTION_SELECTION",
            "AD_IMAGE",
            "BUSINESS_LOGO",
            "HOTEL_PROPERTY",
            "DEMAND_GEN_CAROUSEL_CARD",
            "BUSINESS_MESSAGE",
            "TALL_PORTRAIT_MARKETING_IMAGE",
            "RELATED_YOUTUBE_VIDEOS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadUserDataRequest": {
      "id": "GoogleAdsGoogleadsV21Services__UploadUserDataRequest",
      "description": "Request message for UserDataService.UploadUserData",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to be done.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__UserDataOperation"
          }
        },
        "customerMatchUserListMetadata": {
          "description": "Metadata for data updates to a Customer Match user list.",
          "$ref": "GoogleAdsGoogleadsV21Common__CustomerMatchUserListMetadata"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UserDataOperation": {
      "id": "GoogleAdsGoogleadsV21Services__UserDataOperation",
      "description": "Operation to be made for the UploadUserDataRequest.",
      "type": "object",
      "properties": {
        "create": {
          "description": "The list of user data to be appended to the user list.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserData"
        },
        "remove": {
          "description": "The list of user data to be removed from the user list.",
          "$ref": "GoogleAdsGoogleadsV21Common__UserData"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UploadUserDataResponse": {
      "id": "GoogleAdsGoogleadsV21Services__UploadUserDataResponse",
      "description": "Response message for UserDataService.UploadUserData Uploads made through this service will not be visible under the 'Segment members' section for the Customer Match List in the Google Ads UI.",
      "type": "object",
      "properties": {
        "uploadDateTime": {
          "description": "The date time at which the request was received by API, formatted as \"yyyy-mm-dd hh:mm:ss+|-hh:mm\", for example, \"2019-01-01 12:32:45-08:00\".",
          "type": "string"
        },
        "receivedOperationsCount": {
          "description": "Number of upload data operations received by API.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesRequest": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesRequest",
      "description": "Request message for UserListCustomerTypeService.MutateUserListCustomerTypes.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "Required. The list of operations to perform on the user list customer types.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__UserListCustomerTypeOperation"
          }
        },
        "partialFailure": {
          "description": "Optional. If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.",
          "type": "boolean"
        },
        "validateOnly": {
          "description": "Optional. If true, the request is validated but not executed. Only errors are returned, not results.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__UserListCustomerTypeOperation": {
      "id": "GoogleAdsGoogleadsV21Services__UserListCustomerTypeOperation",
      "description": "A single mutate operation on the user list customer type.",
      "type": "object",
      "properties": {
        "create": {
          "description": "Attach a user list customer type to a user list. No resource name is expected for the new user list customer type.",
          "$ref": "GoogleAdsGoogleadsV21Resources__UserListCustomerType"
        },
        "remove": {
          "description": "Remove an existing user list customer type. A resource name for the removed user list customer type is expected, in this format: `customers/{customer_id}/userListCustomerTypes/{user_list_id}~{customer_type_category}`",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesResponse": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypesResponse",
      "description": "Response message for a user list customer type mutate.",
      "type": "object",
      "properties": {
        "partialFailureError": {
          "description": "Errors that pertain to operation failures in the partial failure mode. Returned only when partial_failure = true and all errors occur inside the operations. If any errors occur outside the operations (for example, auth errors), we return an RPC level error.",
          "$ref": "GoogleRpc__Status"
        },
        "results": {
          "description": "All results for the mutate.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypeResult"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypeResult": {
      "id": "GoogleAdsGoogleadsV21Services__MutateUserListCustomerTypeResult",
      "description": "The result for the user list customer type mutate.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "Returned for successful operations.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__GoogleAdsFailure": {
      "id": "GoogleAdsGoogleadsV21Errors__GoogleAdsFailure",
      "description": "Describes how a GoogleAds API call failed. It's returned inside google.rpc.Status.details when a call fails.",
      "type": "object",
      "properties": {
        "errors": {
          "description": "The list of errors that occurred.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Errors__GoogleAdsError"
          }
        },
        "requestId": {
          "description": "The unique ID of the request that is used for debugging purposes.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__GoogleAdsError": {
      "id": "GoogleAdsGoogleadsV21Errors__GoogleAdsError",
      "description": "GoogleAds-specific error.",
      "type": "object",
      "properties": {
        "errorCode": {
          "description": "An enum value that indicates which error occurred.",
          "$ref": "GoogleAdsGoogleadsV21Errors__ErrorCode"
        },
        "message": {
          "description": "A human-readable description of the error.",
          "type": "string"
        },
        "trigger": {
          "description": "The value that triggered the error.",
          "$ref": "GoogleAdsGoogleadsV21Common__Value"
        },
        "location": {
          "description": "Describes the part of the request proto that caused the error.",
          "$ref": "GoogleAdsGoogleadsV21Errors__ErrorLocation"
        },
        "details": {
          "description": "Additional error details, which are returned by certain error codes. Most error codes do not include details.",
          "$ref": "GoogleAdsGoogleadsV21Errors__ErrorDetails"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__ErrorCode": {
      "id": "GoogleAdsGoogleadsV21Errors__ErrorCode",
      "description": "The error reason represented by type and enum.",
      "type": "object",
      "properties": {
        "requestError": {
          "description": "An error caused by the request",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Resource name is required for this request.",
            "Resource name provided is malformed.",
            "Resource name provided is malformed.",
            "Customer ID is invalid.",
            "Mutate operation should have either create, update, or remove specified.",
            "Requested resource not found.",
            "Next page token specified in user request is invalid.",
            "Next page token specified in user request has expired.",
            "Page size specified in user request is invalid.",
            "Setting the page size is not supported, and will be unavailable in a future version.",
            "Required field is missing.",
            "The field cannot be modified because it's immutable. It's also possible that the field can be modified using 'create' operation but not 'update'.",
            "Received too many entries in request.",
            "Request cannot be executed by a manager account.",
            "Mutate request was attempting to modify a readonly field. For instance, Budget fields can be requested for Ad Group, but are read-only for adGroups:mutate.",
            "Enum value is not permitted.",
            "The developer-token parameter is required for all requests.",
            "The login-customer-id parameter is required for this request.",
            "page_token is set in the validate only request",
            "return_summary_row cannot be enabled if request did not select any metrics field.",
            "return_summary_row should not be enabled for validate only requests.",
            "return_summary_row parameter value should be the same between requests with page_token field set and their original request.",
            "The total results count cannot be returned if it was not requested in the original request.",
            "Deadline specified by the client was too short.",
            "This API version has been sunset and is no longer supported.",
            "The Google Cloud project in the request was not found."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESOURCE_NAME_MISSING",
            "RESOURCE_NAME_MALFORMED",
            "BAD_RESOURCE_ID",
            "INVALID_CUSTOMER_ID",
            "OPERATION_REQUIRED",
            "RESOURCE_NOT_FOUND",
            "INVALID_PAGE_TOKEN",
            "EXPIRED_PAGE_TOKEN",
            "INVALID_PAGE_SIZE",
            "PAGE_SIZE_NOT_SUPPORTED",
            "REQUIRED_FIELD_MISSING",
            "IMMUTABLE_FIELD",
            "TOO_MANY_MUTATE_OPERATIONS",
            "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT",
            "CANNOT_MODIFY_FOREIGN_FIELD",
            "INVALID_ENUM_VALUE",
            "DEVELOPER_TOKEN_PARAMETER_MISSING",
            "LOGIN_CUSTOMER_ID_PARAMETER_MISSING",
            "VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN",
            "CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS",
            "CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS",
            "INCONSISTENT_RETURN_SUMMARY_ROW_VALUE",
            "TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED",
            "RPC_DEADLINE_TOO_SHORT",
            "UNSUPPORTED_VERSION",
            "CLOUD_PROJECT_NOT_FOUND"
          ]
        },
        "biddingStrategyError": {
          "description": "An error with a Bidding Strategy mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Each bidding strategy must have a unique name.",
            "Bidding strategy type is immutable.",
            "Only bidding strategies not linked to campaigns, adgroups or adgroup criteria can be removed.",
            "The specified bidding strategy is not supported.",
            "The bidding strategy is incompatible with the campaign's bidding strategy goal type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_NAME",
            "CANNOT_CHANGE_BIDDING_STRATEGY_TYPE",
            "CANNOT_REMOVE_ASSOCIATED_STRATEGY",
            "BIDDING_STRATEGY_NOT_SUPPORTED",
            "INCOMPATIBLE_BIDDING_STRATEGY_AND_BIDDING_STRATEGY_GOAL_TYPE"
          ]
        },
        "urlFieldError": {
          "description": "An error with a URL field mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The tracking url template is invalid.",
            "The tracking url template contains invalid tag.",
            "The tracking url template must contain at least one tag (for example, {lpurl}), This applies only to tracking url template associated with website ads or product ads.",
            "The tracking url template must start with a valid protocol (or lpurl tag).",
            "The tracking url template starts with an invalid protocol.",
            "The tracking url template contains illegal characters.",
            "The tracking url template must contain a host name (or lpurl tag).",
            "The tracking url template has an invalid or missing top level domain extension.",
            "The tracking url template contains nested occurrences of the same conditional tag (for example, {ifmobile:{ifmobile:x}}).",
            "The final url is invalid.",
            "The final url contains invalid tag.",
            "The final url contains nested occurrences of the same conditional tag (for example, {ifmobile:{ifmobile:x}}).",
            "The final url must start with a valid protocol.",
            "The final url starts with an invalid protocol.",
            "The final url contains illegal characters.",
            "The final url must contain a host name.",
            "The tracking url template has an invalid or missing top level domain extension.",
            "The final mobile url is invalid.",
            "The final mobile url contains invalid tag.",
            "The final mobile url contains nested occurrences of the same conditional tag (for example, {ifmobile:{ifmobile:x}}).",
            "The final mobile url must start with a valid protocol.",
            "The final mobile url starts with an invalid protocol.",
            "The final mobile url contains illegal characters.",
            "The final mobile url must contain a host name.",
            "The tracking url template has an invalid or missing top level domain extension.",
            "The final app url is invalid.",
            "The final app url contains invalid tag.",
            "The final app url contains nested occurrences of the same conditional tag (for example, {ifmobile:{ifmobile:x}}).",
            "More than one app url found for the same OS type.",
            "The OS type given for an app url is not valid.",
            "The protocol given for an app url is not valid. (For example, \"android-app://\")",
            "The package id (app id) given for an app url is not valid.",
            "The number of url custom parameters for an resource exceeds the maximum limit allowed.",
            "An invalid character appears in the parameter key.",
            "An invalid character appears in the parameter value.",
            "The url custom parameter value fails url tag validation.",
            "The custom parameter contains nested occurrences of the same conditional tag (for example, {ifmobile:{ifmobile:x}}).",
            "The protocol (http:// or https://) is missing.",
            "Unsupported protocol in URL. Only http and https are supported.",
            "The url is invalid.",
            "Destination Url is deprecated.",
            "The url contains invalid tag.",
            "The url must contain at least one tag (for example, {lpurl}).",
            "Duplicate url id.",
            "Invalid url id.",
            "The final url suffix cannot begin with '?' or '&' characters and must be a valid query string.",
            "The final url suffix cannot contain {lpurl} related or {ignore} tags.",
            "The top level domain is invalid, for example, not a public top level domain listed in publicsuffix.org.",
            "Malformed top level domain in URL.",
            "Malformed URL.",
            "No host found in URL.",
            "Custom parameter value cannot be null.",
            "Track parameter is not supported.",
            "The app store connected to the url is not supported."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_TRACKING_URL_TEMPLATE",
            "INVALID_TAG_IN_TRACKING_URL_TEMPLATE",
            "MISSING_TRACKING_URL_TEMPLATE_TAG",
            "MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
            "INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE",
            "MALFORMED_TRACKING_URL_TEMPLATE",
            "MISSING_HOST_IN_TRACKING_URL_TEMPLATE",
            "INVALID_TLD_IN_TRACKING_URL_TEMPLATE",
            "REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG",
            "INVALID_FINAL_URL",
            "INVALID_TAG_IN_FINAL_URL",
            "REDUNDANT_NESTED_FINAL_URL_TAG",
            "MISSING_PROTOCOL_IN_FINAL_URL",
            "INVALID_PROTOCOL_IN_FINAL_URL",
            "MALFORMED_FINAL_URL",
            "MISSING_HOST_IN_FINAL_URL",
            "INVALID_TLD_IN_FINAL_URL",
            "INVALID_FINAL_MOBILE_URL",
            "INVALID_TAG_IN_FINAL_MOBILE_URL",
            "REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG",
            "MISSING_PROTOCOL_IN_FINAL_MOBILE_URL",
            "INVALID_PROTOCOL_IN_FINAL_MOBILE_URL",
            "MALFORMED_FINAL_MOBILE_URL",
            "MISSING_HOST_IN_FINAL_MOBILE_URL",
            "INVALID_TLD_IN_FINAL_MOBILE_URL",
            "INVALID_FINAL_APP_URL",
            "INVALID_TAG_IN_FINAL_APP_URL",
            "REDUNDANT_NESTED_FINAL_APP_URL_TAG",
            "MULTIPLE_APP_URLS_FOR_OSTYPE",
            "INVALID_OSTYPE",
            "INVALID_PROTOCOL_FOR_APP_URL",
            "INVALID_PACKAGE_ID_FOR_APP_URL",
            "URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT",
            "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY",
            "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE",
            "INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE",
            "REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG",
            "MISSING_PROTOCOL",
            "INVALID_PROTOCOL",
            "INVALID_URL",
            "DESTINATION_URL_DEPRECATED",
            "INVALID_TAG_IN_URL",
            "MISSING_URL_TAG",
            "DUPLICATE_URL_ID",
            "INVALID_URL_ID",
            "FINAL_URL_SUFFIX_MALFORMED",
            "INVALID_TAG_IN_FINAL_URL_SUFFIX",
            "INVALID_TOP_LEVEL_DOMAIN",
            "MALFORMED_TOP_LEVEL_DOMAIN",
            "MALFORMED_URL",
            "MISSING_HOST",
            "NULL_CUSTOM_PARAMETER_VALUE",
            "VALUE_TRACK_PARAMETER_NOT_SUPPORTED",
            "UNSUPPORTED_APP_STORE"
          ]
        },
        "listOperationError": {
          "description": "An error with a list operation.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Field required in value is missing.",
            "Duplicate or identical value is sent in multiple list operations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUIRED_FIELD_MISSING",
            "DUPLICATE_VALUES"
          ]
        },
        "queryError": {
          "description": "An error with an AWQL query",
          "type": "string",
          "enumDescriptions": [
            "Name unspecified.",
            "The received error code is not known in this version.",
            "Returned if all other query error reasons are not applicable.",
            "A condition used in the query references an invalid enum constant.",
            "Query contains an invalid escape sequence.",
            "Field name is invalid.",
            "Limit value is invalid (for example, not a number)",
            "Encountered number can not be parsed.",
            "Invalid operator encountered.",
            "Parameter unknown or not supported.",
            "Parameter have invalid value.",
            "Invalid resource type was specified in the FROM clause.",
            "Non-ASCII symbol encountered outside of strings.",
            "Value is invalid.",
            "Date filters fail to restrict date to a range smaller than 31 days. Applicable if the query is segmented by date.",
            "Filters on date/week/month/quarter have a start date after end date.",
            "Expected AND between values with BETWEEN operator.",
            "Expecting ORDER BY to have BY.",
            "There was no dimension field selected.",
            "Missing filters on date related fields.",
            "Missing FROM clause.",
            "The operator used in the conditions requires the value to be a list.",
            "Fields used in WHERE or ORDER BY clauses are missing from the SELECT clause.",
            "SELECT is missing at the beginning of query.",
            "A list was passed as a value to a condition whose operator expects a single value.",
            "Missing one or both values with BETWEEN operator.",
            "Invalid date format. Expected 'YYYY-MM-DD'.",
            "Misaligned date value for the filter. The date should be the start of a week/month/quarter if the filtered field is segments.week/segments.month/segments.quarter.",
            "Value passed was not a string when it should have been. For example, it was a number or unquoted literal.",
            "A String value passed to the BETWEEN operator does not parse as a date.",
            "The value passed to the DURING operator is not a Date range literal",
            "An invalid value was passed to the LIKE operator.",
            "An operator was provided that is inapplicable to the field being filtered.",
            "A Condition was found with an empty list.",
            "A condition used in the query references an unsupported enum constant.",
            "Fields that are not allowed to be selected together were included in the SELECT clause.",
            "A field that is not orderable was included in the ORDER BY clause.",
            "A field that is not selectable was included in the SELECT clause.",
            "A field that is not filterable was included in the WHERE clause.",
            "Resource type specified in the FROM clause is not supported by this service.",
            "A field that comes from an incompatible resource was included in the SELECT clause.",
            "A field that comes from an incompatible resource was included in the WHERE clause.",
            "A metric incompatible with the main resource or other selected segmenting resources was included in the SELECT or WHERE clause.",
            "A segment incompatible with the main resource or other selected segmenting resources was included in the SELECT or WHERE clause.",
            "A segment in the SELECT clause is incompatible with a metric in the SELECT or WHERE clause.",
            "The value passed to the limit clause is too low.",
            "Query has a string containing a newline character.",
            "List contains values of different types.",
            "The values passed to the BETWEEN operator are not of the same type.",
            "Query contains unterminated string.",
            "Too many segments are specified in SELECT clause.",
            "Query is incomplete and cannot be parsed.",
            "FROM clause cannot be specified in this query.",
            "Query contains one or more unrecognized fields.",
            "Query has an unexpected extra part.",
            "Metrics cannot be requested for a manager account. To retrieve metrics, issue separate requests against each client account under the manager account.",
            "The number of values (right-hand-side operands) in a filter exceeds the limit."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "QUERY_ERROR",
            "BAD_ENUM_CONSTANT",
            "BAD_ESCAPE_SEQUENCE",
            "BAD_FIELD_NAME",
            "BAD_LIMIT_VALUE",
            "BAD_NUMBER",
            "BAD_OPERATOR",
            "BAD_PARAMETER_NAME",
            "BAD_PARAMETER_VALUE",
            "BAD_RESOURCE_TYPE_IN_FROM_CLAUSE",
            "BAD_SYMBOL",
            "BAD_VALUE",
            "DATE_RANGE_TOO_WIDE",
            "DATE_RANGE_TOO_NARROW",
            "EXPECTED_AND",
            "EXPECTED_BY",
            "EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE",
            "EXPECTED_FILTERS_ON_DATE_RANGE",
            "EXPECTED_FROM",
            "EXPECTED_LIST",
            "EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE",
            "EXPECTED_SELECT",
            "EXPECTED_SINGLE_VALUE",
            "EXPECTED_VALUE_WITH_BETWEEN_OPERATOR",
            "INVALID_DATE_FORMAT",
            "MISALIGNED_DATE_FOR_FILTER",
            "INVALID_STRING_VALUE",
            "INVALID_VALUE_WITH_BETWEEN_OPERATOR",
            "INVALID_VALUE_WITH_DURING_OPERATOR",
            "INVALID_VALUE_WITH_LIKE_OPERATOR",
            "OPERATOR_FIELD_MISMATCH",
            "PROHIBITED_EMPTY_LIST_IN_CONDITION",
            "PROHIBITED_ENUM_CONSTANT",
            "PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE",
            "PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE",
            "PROHIBITED_FIELD_IN_SELECT_CLAUSE",
            "PROHIBITED_FIELD_IN_WHERE_CLAUSE",
            "PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE",
            "PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE",
            "PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE",
            "PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
            "PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE",
            "PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE",
            "LIMIT_VALUE_TOO_LOW",
            "PROHIBITED_NEWLINE_IN_STRING",
            "PROHIBITED_VALUE_COMBINATION_IN_LIST",
            "PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR",
            "STRING_NOT_TERMINATED",
            "TOO_MANY_SEGMENTS",
            "UNEXPECTED_END_OF_QUERY",
            "UNEXPECTED_FROM_CLAUSE",
            "UNRECOGNIZED_FIELD",
            "UNEXPECTED_INPUT",
            "REQUESTED_METRICS_FOR_MANAGER",
            "FILTER_HAS_TOO_MANY_VALUES"
          ]
        },
        "mutateError": {
          "description": "An error with a mutate",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Requested resource was not found.",
            "Cannot mutate the same resource twice in one request.",
            "The field's contents don't match another field that represents the same data.",
            "Mutates are not allowed for the requested resource.",
            "The resource isn't in Google Ads. It belongs to another ads system.",
            "The resource being created already exists.",
            "This resource cannot be used with \"validate_only\".",
            "This operation cannot be used with \"partial_failure\".",
            "Attempt to write to read-only fields."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESOURCE_NOT_FOUND",
            "ID_EXISTS_IN_MULTIPLE_MUTATES",
            "INCONSISTENT_FIELD_VALUES",
            "MUTATE_NOT_ALLOWED",
            "RESOURCE_NOT_IN_GOOGLE_ADS",
            "RESOURCE_ALREADY_EXISTS",
            "RESOURCE_DOES_NOT_SUPPORT_VALIDATE_ONLY",
            "OPERATION_DOES_NOT_SUPPORT_PARTIAL_FAILURE",
            "RESOURCE_READ_ONLY"
          ]
        },
        "fieldMaskError": {
          "description": "An error with a field mask",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The field mask must be provided for update operations.",
            "The field mask must be empty for create and remove operations.",
            "The field mask contained an invalid field.",
            "The field mask updated a field with subfields. Fields with subfields may be cleared, but not updated. To fix this, the field mask should select all the subfields of the invalid field."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FIELD_MASK_MISSING",
            "FIELD_MASK_NOT_ALLOWED",
            "FIELD_NOT_FOUND",
            "FIELD_HAS_SUBFIELDS"
          ]
        },
        "authorizationError": {
          "description": "An error encountered when trying to authorize a user.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer ID must be set in the `login-customer-id` header. Learn more at https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid",
            "The developer token is not on the allow-list.",
            "The developer token is not allowed with the project sent in the request.",
            "The Google Cloud project sent in the request does not have permission to access the api.",
            "Authorization of the client failed.",
            "The user does not have permission to perform this action (for example, ADD, UPDATE, REMOVE) on the resource or call a method.",
            "Signup not complete.",
            "The customer account can't be accessed because it is not yet enabled or has been deactivated.",
            "The developer must sign the terms of service. They can be found here: ads.google.com/aw/apicenter",
            "The developer token is only approved for use with test accounts. To access non-test accounts, apply for Basic or Standard access.",
            "The login customer specified does not have access to the account specified, so the request is invalid.",
            "The developer specified does not have access to the service.",
            "The customer (or login customer) isn't in Google Ads. It belongs to another ads system.",
            "The developer does not have access to the metrics queried.",
            "The Google Cloud project is not under the required organization.",
            "The user does not have permission to perform this action on the resource or method because the Google Ads account is suspended."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "USER_PERMISSION_DENIED",
            "DEVELOPER_TOKEN_NOT_ON_ALLOWLIST",
            "DEVELOPER_TOKEN_PROHIBITED",
            "PROJECT_DISABLED",
            "AUTHORIZATION_ERROR",
            "ACTION_NOT_PERMITTED",
            "INCOMPLETE_SIGNUP",
            "CUSTOMER_NOT_ENABLED",
            "MISSING_TOS",
            "DEVELOPER_TOKEN_NOT_APPROVED",
            "INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION",
            "SERVICE_ACCESS_DENIED",
            "ACCESS_DENIED_FOR_ACCOUNT_TYPE",
            "METRIC_ACCESS_DENIED",
            "CLOUD_PROJECT_NOT_UNDER_ORGANIZATION",
            "ACTION_NOT_PERMITTED_FOR_SUSPENDED_ACCOUNT"
          ]
        },
        "internalError": {
          "description": "An unexpected server-side error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Google Ads API encountered unexpected internal error.",
            "The intended error code doesn't exist in specified API version. It will be released in a future API version.",
            "Google Ads API encountered an unexpected transient error. The user should retry their request in these cases.",
            "The request took longer than a deadline."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INTERNAL_ERROR",
            "ERROR_CODE_NOT_PUBLISHED",
            "TRANSIENT_ERROR",
            "DEADLINE_EXCEEDED"
          ]
        },
        "quotaError": {
          "description": "An error with the amount of quota remaining.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Too many requests.",
            "Access is prohibited.",
            "Too many requests in a short amount of time.",
            "Too many expensive requests from query pattern over a short amount of time.",
            "Too many expensive requests from query pattern over an extended duration of time."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "RESOURCE_EXHAUSTED",
            "ACCESS_PROHIBITED",
            "RESOURCE_TEMPORARILY_EXHAUSTED",
            "EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION",
            "EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION"
          ]
        },
        "adError": {
          "description": "An error with an Ad Group Ad mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Ad customizers are not supported for ad type.",
            "Estimating character sizes the string is too long.",
            "Estimating character sizes the string is too short.",
            "There is a problem with the snippet.",
            "Cannot modify an ad.",
            "business name and url cannot be set at the same time",
            "The specified field is incompatible with this ad's type or settings.",
            "Cannot set field when originAdId is set.",
            "Cannot set field when an existing ad id is set for sharing.",
            "Cannot set allowFlexibleColor false if no color is provided by user.",
            "When user select native, no color control is allowed because we will always respect publisher color for native format serving.",
            "Cannot specify a url for the ad type",
            "Cannot specify a tracking or mobile url without also setting final urls",
            "Cannot specify a legacy url and a final url simultaneously",
            "Cannot specify a urls in UrlData and in template fields simultaneously.",
            "This operator cannot be used with a subclass of Ad.",
            "Customer is not approved for mobile ads.",
            "Customer is not approved for 3PAS richmedia ads.",
            "Customer is not approved for 3PAS redirect richmedia (Ad Exchange) ads.",
            "Not an eligible customer",
            "Customer is not eligible for updating beacon url",
            "There already exists an ad with the same dimensions in the union.",
            "Ad's dimension must be set before setting union dimension.",
            "Ad's dimension must be included in the union dimensions.",
            "Display Url cannot be specified (applies to Ad Exchange Ads)",
            "Telephone number contains invalid characters or invalid format. Re-enter your number using digits (0-9), dashes (-), and parentheses only.",
            "Emergency telephone numbers are not allowed. Enter a valid domestic phone number to connect customers to your business.",
            "A required field was not specified or is an empty string.",
            "A feed attribute referenced in an ad customizer tag is not in the ad customizer mapping for the feed.",
            "The ad customizer field mapping for the feed attribute does not match the expected field type.",
            "The use of ad customizer tags in the ad text is disallowed. Details in trigger.",
            "Tags of the form {PH_x}, where x is a number, are disallowed in ad text.",
            "The dimensions of the ad are specified or derived in multiple ways and are not consistent.",
            "The status cannot differ among template ads of the same union.",
            "The length of the string is not valid.",
            "The ad is ineligible for upgrade.",
            "User cannot create mobile ad for countries targeted in specified campaign.",
            "Invalid Ad type. A specific type of Ad is required.",
            "Headline, description or phone cannot be present when creating mobile image ad.",
            "Image cannot be present when creating mobile text ad.",
            "Invalid call to action text.",
            "Invalid character in URL.",
            "Creative's country code is not valid.",
            "Invalid use of Expanded Dynamic Search Ads tags ({lpurl} etc.)",
            "An input error whose real reason was not properly mapped (should not happen).",
            "An invalid markup language was entered.",
            "An invalid mobile carrier was entered.",
            "Specified mobile carriers target a country not targeted by the campaign.",
            "Wrong number of elements for given element type",
            "The format of the telephone number is incorrect. Re-enter the number using the correct format.",
            "The certified vendor format id is incorrect.",
            "The template ad data contains validation errors.",
            "The template field doesn't have have the correct type.",
            "Invalid template id.",
            "After substituting replacement strings, the line is too wide.",
            "The feed referenced must have ad customizer mapping to be used in a customizer tag.",
            "Missing address component in template element address field.",
            "An ad name must be entered.",
            "Business name must be entered.",
            "Description (line 2) must be entered.",
            "Description (line 3) must be entered.",
            "The destination url must contain at least one tag (for example, {lpurl})",
            "The tracking url template of ExpandedDynamicSearchAd must contain at least one tag. (for example, {lpurl})",
            "A valid dimension must be specified for this ad.",
            "A display URL must be entered.",
            "Headline must be entered.",
            "A height must be entered.",
            "An image must be entered.",
            "Marketing image or product videos are required.",
            "The markup language in which your site is written must be entered.",
            "A mobile carrier must be entered.",
            "Phone number must be entered.",
            "Missing required template fields",
            "Missing a required field value",
            "The ad must have text.",
            "A visible URL must be entered.",
            "A width must be entered.",
            "Only 1 feed can be used as the source of ad customizer substitutions in a single ad.",
            "TempAdUnionId must be use when adding template ads.",
            "The string has too many characters.",
            "The string has too few characters.",
            "Ad union dimensions cannot change for saved ads.",
            "Address component is not {country, lat, lng}.",
            "Unknown unique field name",
            "Unknown unique name (template element type specifier)",
            "Unsupported ad dimension",
            "URL starts with an invalid scheme.",
            "URL ends with an invalid top-level domain name.",
            "URL contains illegal characters.",
            "URL must contain a host name.",
            "URL not equivalent during upgrade.",
            "URL host name too long to be stored as visible URL (applies to Ad Exchange ads)",
            "URL must start with a scheme.",
            "URL should end in a valid domain extension, such as .com or .net.",
            "URL must not end with a path.",
            "URL must not specify a port.",
            "URL must not contain a query.",
            "A url scheme is not allowed in front of tag in tracking url template (for example, http://{lpurl})",
            "The user does not have permissions to create a template ad for the given template.",
            "Expandable setting is inconsistent/wrong. For example, an AdX ad is invalid if it has a expandable vendor format but no expanding directions specified, or expanding directions is specified, but the vendor format is not expandable.",
            "Format is invalid",
            "The text of this field did not match a pattern of allowed values.",
            "Template element is mising",
            "Error occurred during image processing",
            "The value is not within the valid range",
            "Template element field is not present",
            "Address is incomplete",
            "Invalid address",
            "Error retrieving specified video",
            "Error processing audio",
            "Display URL is incorrect for YouTube PYV ads",
            "Too many product Images in GmailAd",
            "Too many product Videos in GmailAd",
            "The device preference is not compatible with the ad type",
            "Call tracking is not supported for specified country.",
            "Carrier specific short number is not allowed.",
            "Specified phone number type is disallowed.",
            "Phone number not supported for country.",
            "Phone number not supported with call tracking enabled for country.",
            "Premium rate phone number is not allowed.",
            "Vanity phone number is not allowed.",
            "Invalid call conversion type id.",
            "Cannot disable call conversion and set conversion type id.",
            "Cannot set path2 without path1.",
            "Missing domain name in campaign setting when adding expanded dynamic search ad.",
            "The associated ad is not compatible with restriction type.",
            "Consent for call recording is required for creating/updating call only ads. See https://support.google.com/google-ads/answer/7412639.",
            "Either an image or a media bundle is required in a display upload ad.",
            "The display upload product type is not supported in this campaign.",
            "The default value of an ad placeholder can not be the empty string.",
            "Ad placeholders with countdown functions must not have a default value.",
            "A previous ad placeholder that had a default value was found which means that all (non-countdown) placeholders must have a default value. This ad placeholder does not have a default value.",
            "A previous ad placeholder that did not have a default value was found which means that no placeholders may have a default value. This ad placeholder does have a default value.",
            "Two ad customizers may not be directly adjacent in an ad text. They must be separated by at least one character.",
            "The ad is not associated with any enabled AdGroupAd, and cannot be updated.",
            "Call Ad verification url and final url don't have same domain.",
            "Final url and verification url cannot both be empty for call ads.",
            "Too many ad customizers in one asset.",
            "The ad customizer tag is recognized, but the format is invalid.",
            "Customizer tags cannot be nested.",
            "The ad customizer syntax used in the ad is not supported.",
            "There exists unpaired brace in the ad customizer tag.",
            "More than one type of countdown tag exists among all text lines.",
            "Date time in the countdown tag is invalid.",
            "Date time in the countdown tag is in the past.",
            "Cannot recognize the ad customizer tag.",
            "Customizer type forbidden for this field.",
            "Customizer attribute name is invalid.",
            "App store value does not match the value of the app store in the app specified in the campaign.",
            "Missing required image aspect ratio.",
            "Aspect ratios mismatch between different assets.",
            "Images must be unique between different carousel card assets.",
            "For video ads sequencing, YouTube video asset ID has to be defined in `campaign.video_campaign_settings.video_ad_sequence.steps.asset_id`."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE",
            "APPROXIMATELY_TOO_LONG",
            "APPROXIMATELY_TOO_SHORT",
            "BAD_SNIPPET",
            "CANNOT_MODIFY_AD",
            "CANNOT_SET_BUSINESS_NAME_IF_URL_SET",
            "CANNOT_SET_FIELD",
            "CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET",
            "CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING",
            "CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE",
            "CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING",
            "CANNOT_SET_URL",
            "CANNOT_SET_WITHOUT_FINAL_URLS",
            "CANNOT_SET_WITH_FINAL_URLS",
            "CANNOT_SET_WITH_URL_DATA",
            "CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR",
            "CUSTOMER_NOT_APPROVED_MOBILEADS",
            "CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS",
            "CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS",
            "CUSTOMER_NOT_ELIGIBLE",
            "CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL",
            "DIMENSION_ALREADY_IN_UNION",
            "DIMENSION_MUST_BE_SET",
            "DIMENSION_NOT_IN_UNION",
            "DISPLAY_URL_CANNOT_BE_SPECIFIED",
            "DOMESTIC_PHONE_NUMBER_FORMAT",
            "EMERGENCY_PHONE_NUMBER",
            "EMPTY_FIELD",
            "FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID",
            "FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH",
            "ILLEGAL_AD_CUSTOMIZER_TAG_USE",
            "ILLEGAL_TAG_USE",
            "INCONSISTENT_DIMENSIONS",
            "INCONSISTENT_STATUS_IN_TEMPLATE_UNION",
            "INCORRECT_LENGTH",
            "INELIGIBLE_FOR_UPGRADE",
            "INVALID_AD_ADDRESS_CAMPAIGN_TARGET",
            "INVALID_AD_TYPE",
            "INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE",
            "INVALID_ATTRIBUTES_FOR_MOBILE_TEXT",
            "INVALID_CALL_TO_ACTION_TEXT",
            "INVALID_CHARACTER_FOR_URL",
            "INVALID_COUNTRY_CODE",
            "INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
            "INVALID_INPUT",
            "INVALID_MARKUP_LANGUAGE",
            "INVALID_MOBILE_CARRIER",
            "INVALID_MOBILE_CARRIER_TARGET",
            "INVALID_NUMBER_OF_ELEMENTS",
            "INVALID_PHONE_NUMBER_FORMAT",
            "INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID",
            "INVALID_TEMPLATE_DATA",
            "INVALID_TEMPLATE_ELEMENT_FIELD_TYPE",
            "INVALID_TEMPLATE_ID",
            "LINE_TOO_WIDE",
            "MISSING_AD_CUSTOMIZER_MAPPING",
            "MISSING_ADDRESS_COMPONENT",
            "MISSING_ADVERTISEMENT_NAME",
            "MISSING_BUSINESS_NAME",
            "MISSING_DESCRIPTION1",
            "MISSING_DESCRIPTION2",
            "MISSING_DESTINATION_URL_TAG",
            "MISSING_LANDING_PAGE_URL_TAG",
            "MISSING_DIMENSION",
            "MISSING_DISPLAY_URL",
            "MISSING_HEADLINE",
            "MISSING_HEIGHT",
            "MISSING_IMAGE",
            "MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS",
            "MISSING_MARKUP_LANGUAGES",
            "MISSING_MOBILE_CARRIER",
            "MISSING_PHONE",
            "MISSING_REQUIRED_TEMPLATE_FIELDS",
            "MISSING_TEMPLATE_FIELD_VALUE",
            "MISSING_TEXT",
            "MISSING_VISIBLE_URL",
            "MISSING_WIDTH",
            "MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED",
            "MUST_USE_TEMP_AD_UNION_ID_ON_ADD",
            "TOO_LONG",
            "TOO_SHORT",
            "UNION_DIMENSIONS_CANNOT_CHANGE",
            "UNKNOWN_ADDRESS_COMPONENT",
            "UNKNOWN_FIELD_NAME",
            "UNKNOWN_UNIQUE_NAME",
            "UNSUPPORTED_DIMENSIONS",
            "URL_INVALID_SCHEME",
            "URL_INVALID_TOP_LEVEL_DOMAIN",
            "URL_MALFORMED",
            "URL_NO_HOST",
            "URL_NOT_EQUIVALENT",
            "URL_HOST_NAME_TOO_LONG",
            "URL_NO_SCHEME",
            "URL_NO_TOP_LEVEL_DOMAIN",
            "URL_PATH_NOT_ALLOWED",
            "URL_PORT_NOT_ALLOWED",
            "URL_QUERY_NOT_ALLOWED",
            "URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG",
            "USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE",
            "INCONSISTENT_EXPANDABLE_SETTINGS",
            "INVALID_FORMAT",
            "INVALID_FIELD_TEXT",
            "ELEMENT_NOT_PRESENT",
            "IMAGE_ERROR",
            "VALUE_NOT_IN_RANGE",
            "FIELD_NOT_PRESENT",
            "ADDRESS_NOT_COMPLETE",
            "ADDRESS_INVALID",
            "VIDEO_RETRIEVAL_ERROR",
            "AUDIO_ERROR",
            "INVALID_YOUTUBE_DISPLAY_URL",
            "TOO_MANY_PRODUCT_IMAGES",
            "TOO_MANY_PRODUCT_VIDEOS",
            "INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE",
            "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
            "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
            "DISALLOWED_NUMBER_TYPE",
            "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
            "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
            "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
            "VANITY_PHONE_NUMBER_NOT_ALLOWED",
            "INVALID_CALL_CONVERSION_TYPE_ID",
            "CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID",
            "CANNOT_SET_PATH2_WITHOUT_PATH1",
            "MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME",
            "INCOMPATIBLE_WITH_RESTRICTION_TYPE",
            "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
            "MISSING_IMAGE_OR_MEDIA_BUNDLE",
            "PRODUCT_TYPE_NOT_SUPPORTED_IN_THIS_CAMPAIGN",
            "PLACEHOLDER_CANNOT_HAVE_EMPTY_DEFAULT_VALUE",
            "PLACEHOLDER_COUNTDOWN_FUNCTION_CANNOT_HAVE_DEFAULT_VALUE",
            "PLACEHOLDER_DEFAULT_VALUE_MISSING",
            "UNEXPECTED_PLACEHOLDER_DEFAULT_VALUE",
            "AD_CUSTOMIZERS_MAY_NOT_BE_ADJACENT",
            "UPDATING_AD_WITH_NO_ENABLED_ASSOCIATION",
            "CALL_AD_VERIFICATION_URL_FINAL_URL_DOES_NOT_HAVE_SAME_DOMAIN",
            "CALL_AD_FINAL_URL_AND_VERIFICATION_URL_CANNOT_BOTH_BE_EMPTY",
            "TOO_MANY_AD_CUSTOMIZERS",
            "INVALID_AD_CUSTOMIZER_FORMAT",
            "NESTED_AD_CUSTOMIZER_SYNTAX",
            "UNSUPPORTED_AD_CUSTOMIZER_SYNTAX",
            "UNPAIRED_BRACE_IN_AD_CUSTOMIZER_TAG",
            "MORE_THAN_ONE_COUNTDOWN_TAG_TYPE_EXISTS",
            "DATE_TIME_IN_COUNTDOWN_TAG_IS_INVALID",
            "DATE_TIME_IN_COUNTDOWN_TAG_IS_PAST",
            "UNRECOGNIZED_AD_CUSTOMIZER_TAG_FOUND",
            "CUSTOMIZER_TYPE_FORBIDDEN_FOR_FIELD",
            "INVALID_CUSTOMIZER_ATTRIBUTE_NAME",
            "STORE_MISMATCH",
            "MISSING_REQUIRED_IMAGE_ASPECT_RATIO",
            "MISMATCHED_ASPECT_RATIOS",
            "DUPLICATE_IMAGE_ACROSS_CAROUSEL_CARDS",
            "INVALID_YOUTUBE_VIDEO_ASSET_ID_FOR_VIDEO_ADS_SEQUENCING"
          ]
        },
        "adGroupError": {
          "description": "An error with an Ad Group mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "AdGroup with the same name already exists for the campaign.",
            "AdGroup name is not valid.",
            "Advertiser is not allowed to target sites or set site bids that are not on the Google Search Network.",
            "Bid amount is too big.",
            "AdGroup bid does not match the campaign's bidding strategy.",
            "AdGroup name is required for Add.",
            "No link found between the ad group and the label.",
            "The label has already been attached to the ad group.",
            "The CriterionTypeGroup is not supported for the content bid dimension.",
            "The ad group type is not compatible with the campaign channel type.",
            "The ad group type is not supported in the country of sale of the campaign.",
            "Ad groups of AdGroupType.SEARCH_DYNAMIC_ADS can only be added to campaigns that have DynamicSearchAdsSetting attached.",
            "Promoted hotels ad groups are only available to customers on the allow-list.",
            "The field type cannot be excluded because an active ad group-asset link of this type exists.",
            "The asset set type is invalid for setting the excluded_parent_asset_set_types field.",
            "Cannot add ad groups for the campaign type.",
            "Invalid status for the ad group.",
            "For video ads sequencing, AdGroup `step_id` has to use a `step_id` defined in `campaign.video_campaign_settings.video_ad_sequence`.",
            "For video ads sequencing, AdGroup type has to use a type defined in `campaign.video_campaign_settings.video_ad_sequence`.",
            "Only one AdGroup is allowed for each step ID in video ads sequencing."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_ADGROUP_NAME",
            "INVALID_ADGROUP_NAME",
            "ADVERTISER_NOT_ON_CONTENT_NETWORK",
            "BID_TOO_BIG",
            "BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH",
            "MISSING_ADGROUP_NAME",
            "ADGROUP_LABEL_DOES_NOT_EXIST",
            "ADGROUP_LABEL_ALREADY_EXISTS",
            "INVALID_CONTENT_BID_CRITERION_TYPE_GROUP",
            "AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE",
            "ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY",
            "CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING",
            "PROMOTED_HOTEL_AD_GROUPS_NOT_AVAILABLE_FOR_CUSTOMER",
            "INVALID_EXCLUDED_PARENT_ASSET_FIELD_TYPE",
            "INVALID_EXCLUDED_PARENT_ASSET_SET_TYPE",
            "CANNOT_ADD_AD_GROUP_FOR_CAMPAIGN_TYPE",
            "INVALID_STATUS",
            "INVALID_STEP_ID_FOR_VIDEO_ADS_SEQUENCING",
            "INVALID_AD_GROUP_TYPE_FOR_VIDEO_ADS_SEQUENCING",
            "DUPLICATE_STEP_ID"
          ]
        },
        "campaignBudgetError": {
          "description": "An error with a Campaign Budget mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The campaign budget cannot be shared.",
            "The requested campaign budget no longer exists.",
            "The campaign budget is associated with at least one campaign, and so the campaign budget cannot be removed.",
            "Customer is not on the allow-list for this campaign budget period.",
            "This field is not mutable on implicitly shared campaign budgets",
            "Cannot change explicitly shared campaign budgets back to implicitly shared ones.",
            "An implicit campaign budget without a name cannot be changed to explicitly shared campaign budget.",
            "Cannot change an implicitly shared campaign budget to an explicitly shared one.",
            "Only explicitly shared campaign budgets can be used with multiple campaigns.",
            "A campaign budget with this name already exists.",
            "A money amount was not in the expected currency.",
            "A money amount was less than the minimum CPC for currency.",
            "A money amount was greater than the maximum allowed.",
            "A money amount was negative.",
            "A money amount was not a multiple of a minimum unit.",
            "Total budget amount must be unset when BudgetPeriod is DAILY.",
            "The period of the budget is not allowed.",
            "Cannot use accelerated delivery method on this budget.",
            "Budget amount must be unset when BudgetPeriod is CUSTOM.",
            "Budget amount or total amount must be above this campaign's per-day minimum. See the error's details.budget_per_day_minimum_error_details field for more information."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_BUDGET_CANNOT_BE_SHARED",
            "CAMPAIGN_BUDGET_REMOVED",
            "CAMPAIGN_BUDGET_IN_USE",
            "CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE",
            "CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET",
            "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED",
            "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME",
            "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED",
            "CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS",
            "DUPLICATE_NAME",
            "MONEY_AMOUNT_IN_WRONG_CURRENCY",
            "MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC",
            "MONEY_AMOUNT_TOO_LARGE",
            "NEGATIVE_MONEY_AMOUNT",
            "NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT",
            "TOTAL_BUDGET_AMOUNT_MUST_BE_UNSET_FOR_BUDGET_PERIOD_DAILY",
            "INVALID_PERIOD",
            "CANNOT_USE_ACCELERATED_DELIVERY_MODE",
            "BUDGET_AMOUNT_MUST_BE_UNSET_FOR_CUSTOM_BUDGET_PERIOD",
            "BUDGET_BELOW_PER_DAY_MINIMUM"
          ]
        },
        "campaignError": {
          "description": "An error with a Campaign mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot target content network.",
            "Cannot target search network.",
            "Cannot cover search network without google search network.",
            "Cannot target Google Search network for a CPM campaign.",
            "Must target at least one network.",
            "Only some Google partners are allowed to target partner search network.",
            "Cannot target content network only as campaign has criteria-level bidding strategy.",
            "Cannot modify the start or end date such that the campaign duration would not contain the durations of all runnable trials.",
            "Cannot modify dates, budget or status of a trial campaign.",
            "Trying to modify the name of an active or paused campaign, where the name is already assigned to another active or paused campaign.",
            "Two fields are in conflicting modes.",
            "Campaign name cannot be used.",
            "Given status is invalid.",
            "Error in the campaign level tracking URL.",
            "Cannot set both tracking URL template and tracking setting. A user has to clear legacy tracking setting in order to add tracking URL template.",
            "The maximum number of impressions for Frequency Cap should be an integer greater than 0.",
            "Only the Day, Week and Month time units are supported.",
            "Operation not allowed on a campaign whose serving status has ended",
            "This budget is exclusively linked to a Campaign that is using experiments so it cannot be shared.",
            "Campaigns using experiments cannot use a shared budget.",
            "A different budget cannot be assigned to a campaign when there are running or scheduled trials.",
            "No link found between the campaign and the label.",
            "The label has already been attached to the campaign.",
            "A ShoppingSetting was not found when creating a shopping campaign.",
            "The country in shopping setting is not an allowed country.",
            "The requested channel type is not available according to the customer's account setting.",
            "The AdvertisingChannelSubType is not a valid subtype of the primary channel type.",
            "At least one conversion must be selected.",
            "Setting ad rotation mode for a campaign is not allowed. Ad rotation mode at campaign is deprecated.",
            "Trying to change start date on a campaign that has started.",
            "Trying to modify a date into the past.",
            "Hotel center id in the hotel setting does not match any customer links.",
            "Hotel center id in the hotel setting must match an active customer link.",
            "Hotel setting was not found when creating a hotel ads campaign.",
            "A Campaign cannot use shared campaign budgets and be part of a campaign group.",
            "The app ID was not found.",
            "Campaign.shopping_setting.enable_local is not supported for the specified campaign type.",
            "The merchant does not support the creation of campaigns for Shopping Comparison Listing Ads.",
            "The App campaign for engagement cannot be created because there aren't enough installs.",
            "The App campaign for engagement cannot be created because the app is sensitive.",
            "Customers with Housing, Employment, or Credit ads must accept updated personalized ads policy to continue creating campaigns.",
            "The field is not compatible with view through conversion optimization.",
            "The field type cannot be excluded because an active campaign-asset link of this type exists.",
            "The app pre-registration campaign cannot be created for non-Android applications.",
            "The campaign cannot be created since the app is not available for pre-registration in any country.",
            "The type of the Budget is not compatible with this Campaign.",
            "Category bid list in the local services campaign setting contains multiple bids for the same category ID.",
            "Category bid list in the local services campaign setting contains a bid for an invalid category ID.",
            "Category bid list in the local services campaign setting is missing a bid for a category ID that must be present.",
            "The requested change in status is not supported.",
            "Travel Campaign's travel_account_id does not match any customer links.",
            "Travel Campaign's travel_account_id matches an existing customer link but the customer link is not active.",
            "The asset set type is invalid to be set in excluded_parent_asset_set_types field.",
            "Campaign.hotel_property_asset_set must point to an asset set of type HOTEL_PROPERTY.",
            "The hotel property asset set can only be set on Performance Max for travel goals campaigns.",
            "Customer's average daily spend is too high to enable this feature.",
            "Cannot attach the campaign to a deleted campaign group.",
            "Cannot attach the campaign to this bidding strategy.",
            "A budget with a different period cannot be assigned to the campaign.",
            "Customer does not have enough conversions to enable this feature.",
            "This campaign type can only have one conversion action.",
            "The field is not compatible with the budget type.",
            "The feature is incompatible with ConversionActionType.UPLOAD_CLICKS.",
            "App campaign setting app ID must match selective optimization conversion action app ID.",
            "Selective optimization conversion action with Download category is not allowed.",
            "One software download for selective optimization conversion action is required for this campaign conversion action.",
            "Conversion tracking is not enabled and is required for this feature.",
            "The field is not compatible with the bidding strategy type.",
            "Campaign is not compatible with a conversion tracker that has Google attribution enabled.",
            "Customer level conversion lag is too high.",
            "The advertiser set as an advertising partner is not an actively linked advertiser to this customer.",
            "Invalid number of advertising partner IDs.",
            "Cannot target the display network without also targeting YouTube.",
            "This campaign type cannot be linked to a Comparison Shopping Service account.",
            "Standard Shopping campaigns that are linked to a Comparison Shopping Service account cannot target this network.",
            "Text asset automation settings can not be modified when there is an active Performance Max optimization automatically created assets experiment. End the experiment to modify these settings.",
            "Dynamic text asset cannot be opted out when final URL expansion is opted in.",
            "Can not set a campaign level match type.",
            "The campaign level keyword match type cannot be switched to non-broad when keyword conversion to broad match is in process.",
            "The campaign level keyword match type cannot be switched to non-broad when the campaign has any attached brand list or when a brand hint shared set is attached to the campaign.",
            "Cannot set campaign level keyword match type to BROAD if the campaign is a base campaign with an associated trial that is currently promoting.",
            "Cannot set campaign level keyword match type to BROAD if the campaign is a trial currently promoting.",
            "Performance Max campaigns with Brand Guidelines enabled require at least one business name to be linked as a CampaignAsset. Performance Max campaigns for online sales with a product feed must meet this requirement only when there are assets that are linked to the campaign's asset groups.",
            "Performance Max campaigns with Brand Guidelines enabled require at least one square logo to be linked as a CampaignAsset. Performance Max campaigns for online sales with a product feed must meet this requirement only when there are assets that are linked to the campaign's asset groups.",
            "This campaign does not support brand targeting overrides. Brand targeting overrides are only supported for Performance Max campaigns that have a product feed.",
            "Brand Guideline fields can only be set for campaigns that have Brand Guidelines enabled.",
            "When a Brand Guidelines color field is set, both main color and accent color are required.",
            "Brand Guidelines colors must be hex colors matching the regular expression '#[0-9a-fA-F]{6}', for example '#abc123'",
            "Brand Guidelines font family must be one of the supported Google Fonts. See Campaign.brand_guidelines.predefined_font_family for the list of supported fonts.",
            "Brand Guidelines cannot be set for this channel type. Brand Guidelines supports Performance Max campaigns.",
            "Brand Guidelines cannot be enabled for Performance Max for travel goals campaigns.",
            "This customer is not allowlisted for enabling Brand Guidelines.",
            "Using campaign third-party integration partners that are not set at the customer level is not allowed.",
            "Campaign third-party integration partners are not allowed to share cost if it is not enabled at the customer level.",
            "Each `previous_step_interaction_type` can be used at most once for the same `previous_step_id`",
            "Previous step interaction type cannot happen for previous step AdGroup type. For example, `SKIP` interaction type is not valid for non-skippable formats.",
            "Campaign video ads sequence is required for `VIDEO_SEQUENCE` advertising channel sub type.",
            "This feature is only available for campaigns with AI Max enabled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_TARGET_CONTENT_NETWORK",
            "CANNOT_TARGET_SEARCH_NETWORK",
            "CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH",
            "CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN",
            "CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK",
            "CANNOT_TARGET_PARTNER_SEARCH_NETWORK",
            "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY",
            "CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS",
            "CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN",
            "DUPLICATE_CAMPAIGN_NAME",
            "INCOMPATIBLE_CAMPAIGN_FIELD",
            "INVALID_CAMPAIGN_NAME",
            "INVALID_AD_SERVING_OPTIMIZATION_STATUS",
            "INVALID_TRACKING_URL",
            "CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING",
            "MAX_IMPRESSIONS_NOT_IN_RANGE",
            "TIME_UNIT_NOT_SUPPORTED",
            "INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED",
            "BUDGET_CANNOT_BE_SHARED",
            "CAMPAIGN_CANNOT_USE_SHARED_BUDGET",
            "CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS",
            "CAMPAIGN_LABEL_DOES_NOT_EXIST",
            "CAMPAIGN_LABEL_ALREADY_EXISTS",
            "MISSING_SHOPPING_SETTING",
            "INVALID_SHOPPING_SALES_COUNTRY",
            "ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
            "INVALID_ADVERTISING_CHANNEL_SUB_TYPE",
            "AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED",
            "CANNOT_SET_AD_ROTATION_MODE",
            "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED",
            "CANNOT_SET_DATE_TO_PAST",
            "MISSING_HOTEL_CUSTOMER_LINK",
            "INVALID_HOTEL_CUSTOMER_LINK",
            "MISSING_HOTEL_SETTING",
            "CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP",
            "APP_NOT_FOUND",
            "SHOPPING_ENABLE_LOCAL_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE",
            "MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS",
            "INSUFFICIENT_APP_INSTALLS_COUNT",
            "SENSITIVE_CATEGORY_APP",
            "HEC_AGREEMENT_REQUIRED",
            "NOT_COMPATIBLE_WITH_VIEW_THROUGH_CONVERSION_OPTIMIZATION",
            "INVALID_EXCLUDED_PARENT_ASSET_FIELD_TYPE",
            "CANNOT_CREATE_APP_PRE_REGISTRATION_FOR_NON_ANDROID_APP",
            "APP_NOT_AVAILABLE_TO_CREATE_APP_PRE_REGISTRATION_CAMPAIGN",
            "INCOMPATIBLE_BUDGET_TYPE",
            "LOCAL_SERVICES_DUPLICATE_CATEGORY_BID",
            "LOCAL_SERVICES_INVALID_CATEGORY_BID",
            "LOCAL_SERVICES_MISSING_CATEGORY_BID",
            "INVALID_STATUS_CHANGE",
            "MISSING_TRAVEL_CUSTOMER_LINK",
            "INVALID_TRAVEL_CUSTOMER_LINK",
            "INVALID_EXCLUDED_PARENT_ASSET_SET_TYPE",
            "ASSET_SET_NOT_A_HOTEL_PROPERTY_ASSET_SET",
            "HOTEL_PROPERTY_ASSET_SET_ONLY_FOR_PERFORMANCE_MAX_FOR_TRAVEL_GOALS",
            "AVERAGE_DAILY_SPEND_TOO_HIGH",
            "CANNOT_ATTACH_TO_REMOVED_CAMPAIGN_GROUP",
            "CANNOT_ATTACH_TO_BIDDING_STRATEGY",
            "CANNOT_CHANGE_BUDGET_PERIOD",
            "NOT_ENOUGH_CONVERSIONS",
            "CANNOT_SET_MORE_THAN_ONE_CONVERSION_ACTION",
            "NOT_COMPATIBLE_WITH_BUDGET_TYPE",
            "NOT_COMPATIBLE_WITH_UPLOAD_CLICKS_CONVERSION",
            "APP_ID_MUST_MATCH_CONVERSION_ACTION_APP_ID",
            "CONVERSION_ACTION_WITH_DOWNLOAD_CATEGORY_NOT_ALLOWED",
            "CONVERSION_ACTION_WITH_DOWNLOAD_CATEGORY_REQUIRED",
            "CONVERSION_TRACKING_NOT_ENABLED",
            "NOT_COMPATIBLE_WITH_BIDDING_STRATEGY_TYPE",
            "NOT_COMPATIBLE_WITH_GOOGLE_ATTRIBUTION_CONVERSIONS",
            "CONVERSION_LAG_TOO_HIGH",
            "NOT_LINKED_ADVERTISING_PARTNER",
            "INVALID_NUMBER_OF_ADVERTISING_PARTNER_IDS",
            "CANNOT_TARGET_DISPLAY_NETWORK_WITHOUT_YOUTUBE",
            "CANNOT_LINK_TO_COMPARISON_SHOPPING_SERVICE_ACCOUNT",
            "CANNOT_TARGET_NETWORK_FOR_COMPARISON_SHOPPING_SERVICE_LINKED_ACCOUNTS",
            "CANNOT_MODIFY_TEXT_ASSET_AUTOMATION_WITH_ENABLED_TRIAL",
            "DYNAMIC_TEXT_ASSET_CANNOT_OPT_OUT_WITH_FINAL_URL_EXPANSION_OPT_IN",
            "CANNOT_SET_CAMPAIGN_KEYWORD_MATCH_TYPE",
            "CANNOT_DISABLE_BROAD_MATCH_WHEN_KEYWORD_CONVERSION_IN_PROCESS",
            "CANNOT_DISABLE_BROAD_MATCH_WHEN_TARGETING_BRANDS",
            "CANNOT_ENABLE_BROAD_MATCH_FOR_BASE_CAMPAIGN_WITH_PROMOTING_TRIAL",
            "CANNOT_ENABLE_BROAD_MATCH_FOR_PROMOTING_TRIAL_CAMPAIGN",
            "REQUIRED_BUSINESS_NAME_ASSET_NOT_LINKED",
            "REQUIRED_LOGO_ASSET_NOT_LINKED",
            "BRAND_TARGETING_OVERRIDES_NOT_SUPPORTED",
            "BRAND_GUIDELINES_NOT_ENABLED_FOR_CAMPAIGN",
            "BRAND_GUIDELINES_MAIN_AND_ACCENT_COLORS_REQUIRED",
            "BRAND_GUIDELINES_COLOR_INVALID_FORMAT",
            "BRAND_GUIDELINES_UNSUPPORTED_FONT_FAMILY",
            "BRAND_GUIDELINES_UNSUPPORTED_CHANNEL",
            "CANNOT_ENABLE_BRAND_GUIDELINES_FOR_TRAVEL_GOALS",
            "CUSTOMER_NOT_ALLOWLISTED_FOR_BRAND_GUIDELINES",
            "THIRD_PARTY_INTEGRATION_PARTNER_NOT_ALLOWED",
            "THIRD_PARTY_INTEGRATION_PARTNER_SHARE_COST_NOT_ALLOWED",
            "DUPLICATE_INTERACTION_TYPE",
            "INVALID_INTERACTION_TYPE",
            "VIDEO_SEQUENCE_ERROR_SEQUENCE_DEFINITION_REQUIRED",
            "AI_MAX_MUST_BE_ENABLED"
          ]
        },
        "videoCampaignError": {
          "description": "An error with a Video Campaign mutate.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot modify the video campaign without reservation. See https://support.google.com/google-ads/answer/9547606."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MUTATE_REQUIRES_RESERVATION"
          ]
        },
        "authenticationError": {
          "description": "Indicates failure to properly authenticate user.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Authentication of the request failed.",
            "Client customer ID is not a number.",
            "No customer found for the provided customer ID.",
            "Client's Google account is deleted.",
            "Google account login token in the cookie is invalid.",
            "A problem occurred during Google account authentication.",
            "The user in the Google account login token does not match the user ID in the cookie.",
            "Login cookie is required for authentication.",
            "The Google account that generated the OAuth access token is not associated with a Google Ads account. Create a new account, or add the Google account to an existing Google Ads account.",
            "OAuth token in the header is not valid.",
            "OAuth token in the header has expired.",
            "OAuth token in the header has been disabled.",
            "OAuth token in the header has been revoked.",
            "OAuth token HTTP header is malformed.",
            "Login cookie is not valid.",
            "User ID in the header is not a valid ID.",
            "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.",
            "An account administrator changed this account's authentication settings. To access this Google Ads account, enable Advanced Protection in your Google account at https://landing.google.com/advancedprotection.",
            "The Cloud organization associated with the project is not recognized.",
            "The Cloud organization associated with the project is not approved for prod access.",
            "The Cloud organization associated with the project is not associated with the developer token.",
            "The developer token is not valid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AUTHENTICATION_ERROR",
            "CLIENT_CUSTOMER_ID_INVALID",
            "CUSTOMER_NOT_FOUND",
            "GOOGLE_ACCOUNT_DELETED",
            "GOOGLE_ACCOUNT_COOKIE_INVALID",
            "GOOGLE_ACCOUNT_AUTHENTICATION_FAILED",
            "GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH",
            "LOGIN_COOKIE_REQUIRED",
            "NOT_ADS_USER",
            "OAUTH_TOKEN_INVALID",
            "OAUTH_TOKEN_EXPIRED",
            "OAUTH_TOKEN_DISABLED",
            "OAUTH_TOKEN_REVOKED",
            "OAUTH_TOKEN_HEADER_INVALID",
            "LOGIN_COOKIE_INVALID",
            "USER_ID_INVALID",
            "TWO_STEP_VERIFICATION_NOT_ENROLLED",
            "ADVANCED_PROTECTION_NOT_ENROLLED",
            "ORGANIZATION_NOT_RECOGNIZED",
            "ORGANIZATION_NOT_APPROVED",
            "ORGANIZATION_NOT_ASSOCIATED_WITH_DEVELOPER_TOKEN",
            "DEVELOPER_TOKEN_INVALID"
          ]
        },
        "adGroupCriterionCustomizerError": {
          "description": "The reasons for the ad group criterion customizer error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Only keyword type criterion is allowed to link customizer attribute."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CRITERION_IS_NOT_KEYWORD"
          ]
        },
        "adGroupCriterionError": {
          "description": "Indicates failure to properly authenticate user.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "No link found between the AdGroupCriterion and the label.",
            "The label has already been attached to the AdGroupCriterion.",
            "Negative AdGroupCriterion cannot have labels.",
            "Too many operations for a single call.",
            "Negative ad group criteria are not updateable.",
            "Concrete type of criterion (keyword v.s. placement) is required for ADD and SET operations.",
            "Bid is incompatible with ad group's bidding settings.",
            "Cannot target and exclude the same criterion at once.",
            "The URL of a placement is invalid.",
            "Keyword text was invalid.",
            "Destination URL was invalid.",
            "The destination url must contain at least one tag (for example, {lpurl})",
            "Keyword-level cpm bid is not supported",
            "For example, cannot add a biddable ad group criterion that had been removed.",
            "Criteria type cannot be targeted for the ad group. Either the account is restricted to keywords only, the criteria type is incompatible with the campaign's bidding strategy, or the criteria type can only be applied to campaigns.",
            "Criteria type cannot be excluded for the ad group. Refer to the documentation for a specific criterion to check if it is excludable.",
            "Partial failure is not supported for shopping campaign mutate operations.",
            "Operations in the mutate request changes too many shopping ad groups. Split requests for multiple shopping ad groups across multiple requests.",
            "Not allowed to modify url fields of an ad group criterion if there are duplicate elements for that ad group criterion in the request.",
            "Cannot set url fields without also setting final urls.",
            "Cannot clear final urls if final mobile urls exist.",
            "Cannot clear final urls if final app urls exist.",
            "Cannot clear final urls if tracking url template exists.",
            "Cannot clear final urls if url custom parameters exist.",
            "Cannot set both destination url and final urls.",
            "Cannot set both destination url and tracking url template.",
            "Final urls are not supported for this criterion type.",
            "Final mobile urls are not supported for this criterion type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST",
            "AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS",
            "CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION",
            "TOO_MANY_OPERATIONS",
            "CANT_UPDATE_NEGATIVE",
            "CONCRETE_TYPE_REQUIRED",
            "BID_INCOMPATIBLE_WITH_ADGROUP",
            "CANNOT_TARGET_AND_EXCLUDE",
            "ILLEGAL_URL",
            "INVALID_KEYWORD_TEXT",
            "INVALID_DESTINATION_URL",
            "MISSING_DESTINATION_URL_TAG",
            "KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM",
            "INVALID_USER_STATUS",
            "CANNOT_ADD_CRITERIA_TYPE",
            "CANNOT_EXCLUDE_CRITERIA_TYPE",
            "CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE",
            "OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS",
            "CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS",
            "CANNOT_SET_WITHOUT_FINAL_URLS",
            "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST",
            "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST",
            "CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS",
            "CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST",
            "CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS",
            "CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE",
            "FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE",
            "FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE"
          ]
        },
        "adGroupCustomizerError": {
          "description": "The reasons for the ad group customizer error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN"
          ]
        },
        "adCustomizerError": {
          "description": "The reasons for the ad customizer error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Invalid date argument in countdown function.",
            "Countdown end date is in the past.",
            "Invalid locale string in countdown function.",
            "Days-before argument to countdown function is not positive.",
            "A user list referenced in an IF function does not exist."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "COUNTDOWN_INVALID_DATE_FORMAT",
            "COUNTDOWN_DATE_IN_PAST",
            "COUNTDOWN_INVALID_LOCALE",
            "COUNTDOWN_INVALID_START_DAYS_BEFORE",
            "UNKNOWN_USER_LIST"
          ]
        },
        "adGroupAdError": {
          "description": "The reasons for the ad group ad error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "No link found between the adgroup ad and the label.",
            "The label has already been attached to the adgroup ad.",
            "The specified ad was not found in the adgroup",
            "Removed ads may not be modified",
            "An ad of this type is deprecated and cannot be created. Only deletions are permitted.",
            "Text ads are deprecated and cannot be created. Use expanded text ads instead.",
            "A required field was not specified or is an empty string.",
            "An ad may only be modified once per call",
            "AdGroupAds with the given ad type cannot be paused.",
            "AdGroupAds with the given ad type cannot be removed.",
            "An ad of this type is deprecated and cannot be updated. Only removals are permitted."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP_AD_LABEL_DOES_NOT_EXIST",
            "AD_GROUP_AD_LABEL_ALREADY_EXISTS",
            "AD_NOT_UNDER_ADGROUP",
            "CANNOT_OPERATE_ON_REMOVED_ADGROUPAD",
            "CANNOT_CREATE_DEPRECATED_ADS",
            "CANNOT_CREATE_TEXT_ADS",
            "EMPTY_FIELD",
            "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
            "AD_TYPE_CANNOT_BE_PAUSED",
            "AD_TYPE_CANNOT_BE_REMOVED",
            "CANNOT_UPDATE_DEPRECATED_ADS"
          ]
        },
        "adSharingError": {
          "description": "The reasons for the ad sharing error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Error resulting in attempting to add an Ad to an AdGroup that already contains the Ad.",
            "Ad is not compatible with the AdGroup it is being shared with.",
            "Cannot add AdGroupAd on inactive Ad."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP_ALREADY_CONTAINS_AD",
            "INCOMPATIBLE_AD_UNDER_AD_GROUP",
            "CANNOT_SHARE_INACTIVE_AD"
          ]
        },
        "adxError": {
          "description": "The reasons for the adx error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Attempt to use non-AdX feature by AdX customer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNSUPPORTED_FEATURE"
          ]
        },
        "assetError": {
          "description": "The reasons for the asset error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The customer is not is not on the allow-list for this asset type.",
            "Assets are duplicated across operations.",
            "The asset name is duplicated, either across operations or with an existing asset.",
            "The Asset.asset_data oneof is empty.",
            "The asset has a name which is different from an existing duplicate that represents the same content.",
            "The field cannot be set for this asset type.",
            "Call to action must come from the list of supported values.",
            "A lead form asset is created with an invalid combination of input fields.",
            "Lead forms require that the Terms of Service have been agreed to before mutates can be executed.",
            "Asset status is invalid in this operation.",
            "The field cannot be modified by this asset type.",
            "Ad schedules for the same asset cannot overlap.",
            "Cannot set both percent off and money amount off fields of promotion asset.",
            "Cannot set both promotion code and orders over amount fields of promotion asset.",
            "The field has too many decimal places specified.",
            "Duplicate assets across operations, which have identical Asset.asset_data oneof, cannot have different asset level fields for asset types which are deduped.",
            "Carrier specific short number is not allowed.",
            "Customer consent required for call recording Terms of Service.",
            "The type of the specified phone number is not allowed.",
            "If the default call_conversion_action is not used, the customer must have a ConversionAction with the same id and the ConversionAction must be call conversion type.",
            "The country code of the phone number is invalid.",
            "The format of the phone number is incorrect.",
            "The input phone number is not a valid phone number.",
            "The phone number is not supported for country.",
            "Premium rate phone number is not allowed.",
            "Vanity phone number is not allowed.",
            "PriceOffering cannot have the same value for header and description.",
            "AppId is invalid.",
            "Invalid App download URL in final URLs.",
            "Asset name is required for the asset type.",
            "Legacy qualifying questions cannot be in the same Lead Form as custom questions.",
            "Unique name is required for this asset type.",
            "Cannot modify asset source.",
            "User can not modify the automatically created asset.",
            "Lead Form is disallowed to use \"LOCATION\" answer type.",
            "Page Feed label text contains invalid characters.",
            "The customer is not in the allow-list for whatsapp message asset type.",
            "Only customers on the allowlist can create AppDeepLinkAsset.",
            "Promotion barcode cannot contain links.",
            "Failed to encode promotion barcode: Invalid format.",
            "Barcode type is not supported.",
            "Promotion QR code cannot contain links.",
            "Failed to encode promotion QR code: Invalid format."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_NOT_ON_ALLOWLIST_FOR_ASSET_TYPE",
            "DUPLICATE_ASSET",
            "DUPLICATE_ASSET_NAME",
            "ASSET_DATA_IS_MISSING",
            "CANNOT_MODIFY_ASSET_NAME",
            "FIELD_INCOMPATIBLE_WITH_ASSET_TYPE",
            "INVALID_CALL_TO_ACTION_TEXT",
            "LEAD_FORM_INVALID_FIELDS_COMBINATION",
            "LEAD_FORM_MISSING_AGREEMENT",
            "INVALID_ASSET_STATUS",
            "FIELD_CANNOT_BE_MODIFIED_FOR_ASSET_TYPE",
            "SCHEDULES_CANNOT_OVERLAP",
            "PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF",
            "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT",
            "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
            "DUPLICATE_ASSETS_WITH_DIFFERENT_FIELD_VALUE",
            "CALL_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
            "CALL_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
            "CALL_DISALLOWED_NUMBER_TYPE",
            "CALL_INVALID_CONVERSION_ACTION",
            "CALL_INVALID_COUNTRY_CODE",
            "CALL_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
            "CALL_INVALID_PHONE_NUMBER",
            "CALL_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
            "CALL_PREMIUM_RATE_NUMBER_NOT_ALLOWED",
            "CALL_VANITY_PHONE_NUMBER_NOT_ALLOWED",
            "PRICE_HEADER_SAME_AS_DESCRIPTION",
            "MOBILE_APP_INVALID_APP_ID",
            "MOBILE_APP_INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL",
            "NAME_REQUIRED_FOR_ASSET_TYPE",
            "LEAD_FORM_LEGACY_QUALIFYING_QUESTIONS_DISALLOWED",
            "NAME_CONFLICT_FOR_ASSET_TYPE",
            "CANNOT_MODIFY_ASSET_SOURCE",
            "CANNOT_MODIFY_AUTOMATICALLY_CREATED_ASSET",
            "LEAD_FORM_LOCATION_ANSWER_TYPE_DISALLOWED",
            "PAGE_FEED_INVALID_LABEL_TEXT",
            "CUSTOMER_NOT_ON_ALLOWLIST_FOR_WHATSAPP_MESSAGE_ASSETS",
            "CUSTOMER_NOT_ON_ALLOWLIST_FOR_APP_DEEP_LINK_ASSETS",
            "PROMOTION_BARCODE_CANNOT_CONTAIN_LINKS",
            "PROMOTION_BARCODE_INVALID_FORMAT",
            "UNSUPPORTED_BARCODE_TYPE",
            "PROMOTION_QR_CODE_CANNOT_CONTAIN_LINKS",
            "PROMOTION_QR_CODE_INVALID_FORMAT"
          ]
        },
        "assetGroupAssetError": {
          "description": "The reasons for the asset group asset error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot add duplicated asset group asset.",
            "Expandable tags are not allowed in description assets.",
            "Ad customizers are not supported in assetgroup's text assets.",
            "Cannot add a HotelPropertyAsset to an AssetGroup that isn't linked to the parent campaign's hotel_property_asset_set field."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_RESOURCE",
            "EXPANDABLE_TAGS_NOT_ALLOWED_IN_DESCRIPTION",
            "AD_CUSTOMIZER_NOT_SUPPORTED",
            "HOTEL_PROPERTY_ASSET_NOT_LINKED_TO_CAMPAIGN"
          ]
        },
        "assetGroupListingGroupFilterError": {
          "description": "The reasons for the asset group listing group filter error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Listing group tree is too deep.",
            "Listing Group UNIT node cannot have children.",
            "Listing Group SUBDIVISION node must have everything else child.",
            "Dimension type of Listing Group must be the same as that of its siblings.",
            "The sibling Listing Groups target exactly the same dimension value.",
            "The dimension type is the same as one of the ancestor Listing Groups.",
            "Each Listing Group tree must have a single root.",
            "Invalid Listing Group dimension value.",
            "Hierarchical dimension must refine a dimension of the same type.",
            "Invalid Product Bidding Category.",
            "Modifying case value is allowed only while updating the entire subtree at the same time.",
            "Subdivision node has children which must be removed first.",
            "Dimension can't subdivide everything-else node in its own hierarchy.",
            "This dimension type is not allowed in this context.",
            "All the webpage filters under an AssetGroup should be distinct.",
            "Filter of the listing source type is not allowed in the context.",
            "Exclusion filters are not allowed in the context.",
            "All the filters under an AssetGroup should have the same listing source.",
            "All the conditions in a webpage needs to be of same type.",
            "All the webpage types of the filters under an AssetGroup should be of same type. Example: All the webpage types can be of type custom_label or url_contains but not both.",
            "All page feed filter nodes are root nodes and they can't have a parent.",
            "There cannot be more than one mutate operation per request that targets a single asset group listing group filter.",
            "The tree is in an invalid state in the database. Any changes that don't fix its issues will fail validation."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TREE_TOO_DEEP",
            "UNIT_CANNOT_HAVE_CHILDREN",
            "SUBDIVISION_MUST_HAVE_EVERYTHING_ELSE_CHILD",
            "DIFFERENT_DIMENSION_TYPE_BETWEEN_SIBLINGS",
            "SAME_DIMENSION_VALUE_BETWEEN_SIBLINGS",
            "SAME_DIMENSION_TYPE_BETWEEN_ANCESTORS",
            "MULTIPLE_ROOTS",
            "INVALID_DIMENSION_VALUE",
            "MUST_REFINE_HIERARCHICAL_PARENT_TYPE",
            "INVALID_PRODUCT_BIDDING_CATEGORY",
            "CHANGING_CASE_VALUE_WITH_CHILDREN",
            "SUBDIVISION_HAS_CHILDREN",
            "CANNOT_REFINE_HIERARCHICAL_EVERYTHING_ELSE",
            "DIMENSION_TYPE_NOT_ALLOWED",
            "DUPLICATE_WEBPAGE_FILTER_UNDER_ASSET_GROUP",
            "LISTING_SOURCE_NOT_ALLOWED",
            "FILTER_EXCLUSION_NOT_ALLOWED",
            "MULTIPLE_LISTING_SOURCES",
            "MULTIPLE_WEBPAGE_CONDITION_TYPES_NOT_ALLOWED",
            "MULTIPLE_WEBPAGE_TYPES_PER_ASSET_GROUP",
            "PAGE_FEED_FILTER_HAS_PARENT",
            "MULTIPLE_OPERATIONS_ON_ONE_NODE",
            "TREE_WAS_INVALID_BEFORE_MUTATION"
          ]
        },
        "assetGroupError": {
          "description": "The reasons for the asset group error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Each asset group in a single campaign must have a unique name.",
            "Cannot add asset group for the campaign type.",
            "Not enough headline asset for a valid asset group.",
            "Not enough long headline asset for a valid asset group.",
            "Not enough description headline asset for a valid asset group.",
            "Not enough business name asset for a valid asset group.",
            "Not enough marketing image asset for a valid asset group.",
            "Not enough square marketing image asset for a valid asset group.",
            "Not enough logo asset for a valid asset group.",
            "Final url and shopping merchant url does not have the same domain.",
            "Path1 required when path2 is set.",
            "At least one short description asset is required for a valid asset group.",
            "Final url field is required for asset group.",
            "Final url contains invalid domain name.",
            "Ad customizers are not supported in asset group's text field.",
            "Cannot mutate asset group for campaign with removed status."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_NAME",
            "CANNOT_ADD_ASSET_GROUP_FOR_CAMPAIGN_TYPE",
            "NOT_ENOUGH_HEADLINE_ASSET",
            "NOT_ENOUGH_LONG_HEADLINE_ASSET",
            "NOT_ENOUGH_DESCRIPTION_ASSET",
            "NOT_ENOUGH_BUSINESS_NAME_ASSET",
            "NOT_ENOUGH_MARKETING_IMAGE_ASSET",
            "NOT_ENOUGH_SQUARE_MARKETING_IMAGE_ASSET",
            "NOT_ENOUGH_LOGO_ASSET",
            "FINAL_URL_SHOPPING_MERCHANT_HOME_PAGE_URL_DOMAINS_DIFFER",
            "PATH1_REQUIRED_WHEN_PATH2_IS_SET",
            "SHORT_DESCRIPTION_REQUIRED",
            "FINAL_URL_REQUIRED",
            "FINAL_URL_CONTAINS_INVALID_DOMAIN_NAME",
            "AD_CUSTOMIZER_NOT_SUPPORTED",
            "CANNOT_MUTATE_ASSET_GROUP_FOR_REMOVED_CAMPAIGN"
          ]
        },
        "assetSetAssetError": {
          "description": "The reasons for the asset set asset error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The asset type is not eligible to be linked to the specific type of asset set.",
            "The asset set type is not eligible to contain the specified type of assets.",
            "The asset contains duplicate external key with another asset in the asset set.",
            "When attaching a Location typed Asset to a LocationGroup typed AssetSet, the AssetSetAsset linkage between the parent LocationSync AssetSet and the Asset doesn't exist."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_ASSET_TYPE",
            "INVALID_ASSET_SET_TYPE",
            "DUPLICATE_EXTERNAL_KEY",
            "PARENT_LINKAGE_DOES_NOT_EXIST"
          ]
        },
        "assetSetLinkError": {
          "description": "The reasons for the asset set link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Advertising channel type cannot be attached to the asset set due to channel-based restrictions.",
            "For this asset set type, only one campaign to feed linkage is allowed.",
            "The asset set type and campaign type are incompatible.",
            "Cannot link duplicate asset sets to the same campaign.",
            "Cannot remove the asset set link. If a campaign is linked with only one asset set and you attempt to unlink them, this error will be triggered."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INCOMPATIBLE_ADVERTISING_CHANNEL_TYPE",
            "DUPLICATE_FEED_LINK",
            "INCOMPATIBLE_ASSET_SET_TYPE_WITH_CAMPAIGN_TYPE",
            "DUPLICATE_ASSET_SET_LINK",
            "ASSET_SET_LINK_CANNOT_BE_REMOVED"
          ]
        },
        "assetSetError": {
          "description": "The reasons for the asset set error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The asset set name matches that of another enabled asset set.",
            "The type of AssetSet.asset_set_source does not match the type of AssetSet.location_set.source in its parent AssetSet.",
            "The asset set source doesn't match its parent AssetSet's data.",
            "This AssetSet type cannot be linked to CustomerAssetSet.",
            "The chain id(s) in ChainSet of a LOCATION_SYNC typed AssetSet is invalid.",
            "The relationship type in ChainSet of a LOCATION_SYNC typed AssetSet is not supported.",
            "There is more than one enabled LocationSync typed AssetSet under one customer.",
            "The place id(s) in a LocationSync typed AssetSet is invalid and can't be decoded.",
            "The Google Business Profile OAuth info is invalid.",
            "The Google Business Profile OAuth info is missing.",
            "Can't delete an AssetSet if it has any enabled linkages (e.g. CustomerAssetSet), or AssetSet is a parent AssetSet and has enabled child AssetSet associated."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_ASSET_SET_NAME",
            "INVALID_PARENT_ASSET_SET_TYPE",
            "ASSET_SET_SOURCE_INCOMPATIBLE_WITH_PARENT_ASSET_SET",
            "ASSET_SET_TYPE_CANNOT_BE_LINKED_TO_CUSTOMER",
            "INVALID_CHAIN_IDS",
            "LOCATION_SYNC_ASSET_SET_DOES_NOT_SUPPORT_RELATIONSHIP_TYPE",
            "NOT_UNIQUE_ENABLED_LOCATION_SYNC_TYPED_ASSET_SET",
            "INVALID_PLACE_IDS",
            "OAUTH_INFO_INVALID",
            "OAUTH_INFO_MISSING",
            "CANNOT_DELETE_AS_ENABLED_LINKAGES_EXIST"
          ]
        },
        "biddingError": {
          "description": "The reasons for the bidding errors",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot transition to new bidding strategy.",
            "Cannot attach bidding strategy to campaign.",
            "Bidding strategy is not supported or cannot be used as anonymous.",
            "The type does not match the named strategy's type.",
            "The bid is invalid.",
            "Bidding strategy is not available for the account type.",
            "Campaign can not be created with given bidding strategy. It can be transitioned to the strategy, once eligible.",
            "Cannot target content network only as campaign uses Page One Promoted bidding strategy.",
            "Budget Optimizer and Target Spend bidding strategies are not supported for campaigns with AdSchedule targeting.",
            "Pay per conversion is not available to all the customer, only few customers on the allow-list can use this.",
            "Pay per conversion is not allowed with Target CPA.",
            "Cannot set bidding strategy to Manual CPM for search network only campaigns.",
            "The bidding strategy is not supported for use in drafts or experiments.",
            "Bidding strategy type does not support product type ad group criterion.",
            "Bid amount is too small.",
            "Bid amount is too big.",
            "Bid has too many fractional digit precision.",
            "Invalid domain name specified.",
            "The field is not compatible with the payment mode.",
            "Bidding strategy type is incompatible with shared budget.",
            "The attached bidding strategy and budget must be aligned with each other if alignment is specified on either entity.",
            "The attached bidding strategy and budget must be attached to the same campaigns to become aligned.",
            "The aligned bidding strategy and budget must be removed at the same time.",
            "cpc_bid_floor_micros is greater than cpc_bid_ceiling_micros.",
            "target_roas_tolerance_percent_millis must be integer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED",
            "CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN",
            "INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE",
            "INVALID_BIDDING_STRATEGY_TYPE",
            "INVALID_BID",
            "BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE",
            "CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY",
            "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY",
            "BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE",
            "PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER",
            "PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA",
            "BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS",
            "BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS",
            "BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION",
            "BID_TOO_SMALL",
            "BID_TOO_BIG",
            "BID_TOO_MANY_FRACTIONAL_DIGITS",
            "INVALID_DOMAIN_NAME",
            "NOT_COMPATIBLE_WITH_PAYMENT_MODE",
            "BIDDING_STRATEGY_TYPE_INCOMPATIBLE_WITH_SHARED_BUDGET",
            "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ALIGNED",
            "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ATTACHED_TO_THE_SAME_CAMPAIGNS_TO_ALIGN",
            "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_REMOVED_TOGETHER",
            "CPC_BID_FLOOR_MICROS_GREATER_THAN_CPC_BID_CEILING_MICROS",
            "TARGET_ROAS_TOLERANCE_PERCENT_MILLIS_MUST_BE_INTEGER"
          ]
        },
        "campaignCriterionError": {
          "description": "The reasons for the campaign criterion error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Concrete type of criterion (keyword v.s. placement) is required for CREATE and UPDATE operations.",
            "Invalid placement URL.",
            "Criteria type can not be excluded for the campaign by the customer. like AOL account type cannot target site type criteria",
            "Cannot set the campaign criterion status for this criteria type.",
            "Cannot set the campaign criterion status for an excluded criteria.",
            "Cannot target and exclude the same criterion.",
            "The mutate contained too many operations.",
            "This operator cannot be applied to a criterion of this type.",
            "The Shopping campaign sales country is not supported for ProductSalesChannel targeting.",
            "The existing field can't be updated with CREATE operation. It can be updated with UPDATE operation only.",
            "Negative criteria are immutable, so updates are not allowed.",
            "Only free form names are allowed for negative Smart campaign keyword theme.",
            "Invalid Smart campaign keyword theme constant criterion.",
            "A Smart campaign keyword theme constant or free-form Smart campaign keyword theme is required.",
            "A Smart campaign may not target proximity and location criteria simultaneously.",
            "A Smart campaign may not target multiple proximity criteria.",
            "Location is not launched for Local Services Campaigns.",
            "A Local Services campaign may not target certain criteria types.",
            "Country locations are not supported for Local Services campaign.",
            "Location is not within the home country of Local Services campaign.",
            "Local Services profile does not exist for a particular Local Services campaign.",
            "Local Services campaign must have at least one target location.",
            "At least one positive local service ID criterion is required for a Local Services campaign.",
            "Local service ID is not found under selected categories in local services campaign setting.",
            "For search advertising channel, brand lists can only be applied to exclusive targeting, broad match campaigns for inclusive targeting or PMax generated campaigns.",
            "Campaigns that target all countries and territories are limited to a certain number of top-level location exclusions. If removing a criterion causes the campaign to target all countries and territories and the campaign has more top-level location exclusions than the limit allows, then this error is returned."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONCRETE_TYPE_REQUIRED",
            "INVALID_PLACEMENT_URL",
            "CANNOT_EXCLUDE_CRITERIA_TYPE",
            "CANNOT_SET_STATUS_FOR_CRITERIA_TYPE",
            "CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA",
            "CANNOT_TARGET_AND_EXCLUDE",
            "TOO_MANY_OPERATIONS",
            "OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE",
            "SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL",
            "CANNOT_ADD_EXISTING_FIELD",
            "CANNOT_UPDATE_NEGATIVE_CRITERION",
            "CANNOT_SET_NEGATIVE_KEYWORD_THEME_CONSTANT_CRITERION",
            "INVALID_KEYWORD_THEME_CONSTANT",
            "MISSING_KEYWORD_THEME_CONSTANT_OR_FREE_FORM_KEYWORD_THEME",
            "CANNOT_TARGET_BOTH_PROXIMITY_AND_LOCATION_CRITERIA_FOR_SMART_CAMPAIGN",
            "CANNOT_TARGET_MULTIPLE_PROXIMITY_CRITERIA_FOR_SMART_CAMPAIGN",
            "LOCATION_NOT_LAUNCHED_FOR_LOCAL_SERVICES_CAMPAIGN",
            "LOCATION_INVALID_FOR_LOCAL_SERVICES_CAMPAIGN",
            "CANNOT_TARGET_COUNTRY_FOR_LOCAL_SERVICES_CAMPAIGN",
            "LOCATION_NOT_IN_HOME_COUNTRY_FOR_LOCAL_SERVICES_CAMPAIGN",
            "CANNOT_ADD_OR_REMOVE_LOCATION_FOR_LOCAL_SERVICES_CAMPAIGN",
            "AT_LEAST_ONE_POSITIVE_LOCATION_REQUIRED_FOR_LOCAL_SERVICES_CAMPAIGN",
            "AT_LEAST_ONE_LOCAL_SERVICE_ID_CRITERION_REQUIRED_FOR_LOCAL_SERVICES_CAMPAIGN",
            "LOCAL_SERVICE_ID_NOT_FOUND_FOR_CATEGORY",
            "CANNOT_ATTACH_BRAND_LIST_TO_NON_QUALIFIED_SEARCH_CAMPAIGN",
            "CANNOT_REMOVE_ALL_LOCATIONS_DUE_TO_TOO_MANY_COUNTRY_EXCLUSIONS"
          ]
        },
        "campaignConversionGoalError": {
          "description": "The reasons for the campaign conversion goal error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Campaign is managed by Search Ads 360 but uses Unified Goal.",
            "Performance Max campaign cannot use an included store sale campaign goal."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_USE_CAMPAIGN_GOAL_FOR_SEARCH_ADS_360_MANAGED_CAMPAIGN",
            "CANNOT_USE_STORE_SALE_GOAL_FOR_PERFORMANCE_MAX_CAMPAIGN"
          ]
        },
        "campaignCustomizerError": {
          "description": "The reasons for the campaign customizer error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN"
          ]
        },
        "collectionSizeError": {
          "description": "The reasons for the collection size error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Too few.",
            "Too many."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_FEW",
            "TOO_MANY"
          ]
        },
        "conversionGoalCampaignConfigError": {
          "description": "The reasons for the conversion goal campaign config error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Campaign is managed by Search Ads 360 but uses Unified Goal.",
            "The campaign is using a custom goal that does not belong to its Google Ads conversion customer (conversion tracking customer).",
            "The campaign is not allowed to use unified goals.",
            "The campaign is using campaign override goals but has no goals configured.",
            "STORE_SALE and STORE_VISIT conversion types cannot be both included in campaign level goal.",
            "Performance Max campaign is not allowed to use custom goal with store sales conversion type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_USE_CAMPAIGN_GOAL_FOR_SEARCH_ADS_360_MANAGED_CAMPAIGN",
            "CUSTOM_GOAL_DOES_NOT_BELONG_TO_GOOGLE_ADS_CONVERSION_CUSTOMER",
            "CAMPAIGN_CANNOT_USE_UNIFIED_GOALS",
            "EMPTY_CONVERSION_GOALS",
            "STORE_SALE_STORE_VISIT_CANNOT_BE_BOTH_INCLUDED",
            "PERFORMANCE_MAX_CAMPAIGN_CANNOT_USE_CUSTOM_GOAL_WITH_STORE_SALES"
          ]
        },
        "countryCodeError": {
          "description": "The reasons for the country code error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The country code is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_COUNTRY_CODE"
          ]
        },
        "criterionError": {
          "description": "The reasons for the criterion error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Concrete type of criterion is required for CREATE and UPDATE operations.",
            "The category requested for exclusion is invalid.",
            "Invalid keyword criteria text.",
            "Keyword text should be less than 80 chars.",
            "Keyword text has too many words.",
            "Keyword text has invalid characters or symbols.",
            "Invalid placement URL.",
            "Invalid user list criterion.",
            "Invalid user interest criterion.",
            "Placement URL has wrong format.",
            "Placement URL is too long.",
            "Indicates the URL contains an illegal character.",
            "Indicates the URL contains multiple comma separated URLs.",
            "Indicates the domain is blocked.",
            "Invalid topic path.",
            "The YouTube Channel Id is invalid.",
            "The YouTube Video Id is invalid.",
            "Indicates the placement is a YouTube vertical channel, which is no longer supported.",
            "Indicates the placement is a YouTube demographic channel, which is no longer supported.",
            "YouTube urls are not supported in Placement criterion. Use YouTubeChannel and YouTubeVideo criterion instead.",
            "Criteria type can not be excluded by the customer, like AOL account type cannot target site type criteria.",
            "Criteria type can not be targeted.",
            "Not allowed to exclude similar user list.",
            "Not allowed to target a closed user list.",
            "Not allowed to add display only UserLists to search only campaigns.",
            "Not allowed to add display only UserLists to search plus campaigns.",
            "Not allowed to add display only UserLists to shopping campaigns.",
            "Not allowed to add User interests to search only campaigns.",
            "Not allowed to set bids for this criterion type in search campaigns",
            "Final URLs, URL Templates and CustomParameters cannot be set for the criterion types of Gender, AgeRange, UserList, Placement, MobileApp, and MobileAppCategory in search campaigns and shopping campaigns.",
            "Invalid combined audience criterion.",
            "Invalid custom affinity criterion.",
            "Invalid custom intent criterion.",
            "Invalid custom audience criterion.",
            "IP address is not valid.",
            "IP format is not valid.",
            "Mobile application is not valid.",
            "Mobile application category is not valid.",
            "The CriterionId does not exist or is of the incorrect type.",
            "The Criterion is not allowed to be targeted.",
            "The criterion is not allowed to be targeted as it is deprecated.",
            "The CriterionId is not valid for the type.",
            "Distance for the radius for the proximity criterion is invalid.",
            "Units for the distance for the radius for the proximity criterion is invalid.",
            "Street address in the address is not valid.",
            "City name in the address is not valid.",
            "Region code in the address is not valid.",
            "Region name in the address is not valid.",
            "Postal code in the address is not valid.",
            "Country code in the address is not valid.",
            "Latitude for the GeoPoint is not valid.",
            "Longitude for the GeoPoint is not valid.",
            "The Proximity input is not valid. Both address and geoPoint cannot be null.",
            "The Proximity address cannot be geocoded to a valid lat/long.",
            "User domain name is not valid.",
            "Length of serialized criterion parameter exceeded size limit.",
            "Time interval in the AdSchedule overlaps with another AdSchedule.",
            "AdSchedule time interval cannot span multiple days.",
            "AdSchedule time interval specified is invalid, endTime cannot be earlier than startTime.",
            "The number of AdSchedule entries in a day exceeds the limit.",
            "CriteriaId does not match the interval of the AdSchedule specified.",
            "Cannot set bid modifier for this criterion type.",
            "Cannot bid modify criterion, since it is opted out of the campaign.",
            "Cannot set bid modifier for a negative criterion.",
            "Bid Modifier already exists. Use SET operation to update.",
            "Feed Id is not allowed in these Location Groups.",
            "The account may not use the requested criteria type. For example, some accounts are restricted to keywords only.",
            "The requested criteria type cannot be used with campaign or ad group bidding strategy.",
            "The Criterion is not allowed to be excluded.",
            "The criterion is not allowed to be removed. For example, we cannot remove any of the device criterion.",
            "Bidding categories do not form a valid path in the Shopping bidding category taxonomy.",
            "ShoppingSetting must be added to the campaign before ProductScope criteria can be added.",
            "Matching function is invalid.",
            "Filter parameters not allowed for location groups targeting.",
            "Feed not found, or the feed is not an enabled location feed.",
            "Given location filter parameter is invalid for location groups targeting.",
            "Cannot set geo target constants and feed item sets at the same time.",
            "Cannot set both assetset and feed at the same time.",
            "Cannot set feed or feed item sets for Customer.",
            "Cannot set AssetSet criteria for customer.",
            "Cannot set geo target constants and asset sets at the same time.",
            "Cannot set asset sets and feed item sets at the same time.",
            "The location group asset set id is invalid",
            "The location group radius is in the range but not at the valid increment.",
            "The location group radius unit is invalid.",
            "Criteria type cannot be associated with a campaign and its ad group(s) simultaneously.",
            "Range represented by hotel length of stay's min nights and max nights overlaps with an existing criterion.",
            "Range represented by hotel advance booking window's min days and max days overlaps with an existing criterion.",
            "The field is not allowed to be set when the negative field is set to true, for example, we don't allow bids in negative ad group or campaign criteria.",
            "The combination of operand and operator in webpage condition is invalid.",
            "The URL of webpage condition is invalid.",
            "The URL of webpage condition cannot be empty or contain white space.",
            "The URL of webpage condition contains an unsupported protocol.",
            "The URL of webpage condition cannot be an IP address.",
            "The domain of the URL is not consistent with the domain in campaign setting.",
            "The URL of webpage condition cannot be a public suffix itself.",
            "The URL of webpage condition has an invalid public suffix.",
            "Value track parameter is not supported in webpage condition URL.",
            "Only one URL-EQUALS webpage condition is allowed in a webpage criterion and it cannot be combined with other conditions.",
            "A webpage criterion cannot be added to a non-DSA ad group.",
            "Cannot add positive user list criteria in Smart Display campaigns.",
            "Cannot add positive placement criterion types in search campaigns.",
            "Listing scope contains too many dimension types.",
            "Listing scope has too many IN operators.",
            "Listing scope contains IN operator on an unsupported dimension type.",
            "There are dimensions with duplicate dimension type.",
            "There are dimensions with duplicate dimension value.",
            "Listing group SUBDIVISION nodes cannot have bids.",
            "Product group operation is invalid because another operation targeting the same AdGroupId is failing.",
            "Ad group is invalid due to the listing groups it contains.",
            "Tree was invalid before the mutation.",
            "Listing group unit cannot have children.",
            "Subdivided listing groups must have an \"others\" case.",
            "Dimension type of listing group must be the same as that of its siblings.",
            "Listing group cannot be added to the ad group because it already exists.",
            "Listing group referenced in the operation was not found in the ad group.",
            "Recursive removal failed because listing group subdivision is being created or modified in this request.",
            "Listing group type is not allowed for specified ad group criterion type.",
            "Listing group in an ADD operation specifies a non temporary criterion id.",
            "The combined length of dimension values of the Listing scope criterion is too long.",
            "Listing scope contains too many dimensions.",
            "The combined length of dimension values of the Listing group criterion is too long.",
            "Listing group tree is too deep.",
            "Listing dimension is invalid (for example, dimension contains illegal value, dimension type is represented with wrong class, etc). Listing dimension value can not contain \"==\" or \"&+\".",
            "Listing dimension type is either invalid for campaigns of this type or cannot be used in the current context. BIDDING_CATEGORY_Lx and PRODUCT_TYPE_Lx dimensions must be used in ascending order of their levels: L1, L2, L3, L4, L5... The levels must be specified sequentially and start from L1. Furthermore, an \"others\" Listing group cannot be subdivided with a dimension of the same type but of a higher level (\"others\" BIDDING_CATEGORY_L3 can be subdivided with BRAND but not with BIDDING_CATEGORY_L4).",
            "Customer is not on allowlist for composite audience in display campaigns.",
            "Cannot target on a removed combined audience.",
            "Combined audience ID is invalid.",
            "Can not target removed combined audience.",
            "Range represented by hotel check-in date's start date and end date overlaps with an existing criterion.",
            "Start date is earlier than earliest allowed value of yesterday UTC.",
            "End date later is than latest allowed day of 330 days in the future UTC.",
            "Start date is after end date.",
            "Broad match modifier (BMM) keywords can no longer be created. See https://ads-developers.googleblog.com/2021/06/broad-match-modifier-upcoming-changes.html.",
            "Only one audience is allowed in an asset group.",
            "Audience is not supported for the specified campaign type.",
            "Audience is not allowed to attach when use_audience_grouped bit is set to false.",
            "Targeting is not allowed for Customer Match lists as per Customer Match policy. See https://support.google.com/google-ads/answer/6299717.",
            "Cannot create a negative keyword list criterion with a shared set that does not exist.",
            "Cannot create a negative keyword list with deleted shared set.",
            "Can only have one Negative Keyword List per account.",
            "Only allowlisted customers can add criteria of this type.",
            "Targeting for Similar audiences is not supported, since this feature has been deprecated. See https://support.google.com/google-ads/answer/12463119 to learn more.",
            "Audience segment criteria cannot be added when use_audience_grouped bit is set.",
            "Only one audience is allowed in an ad group.",
            "Invalid detailed demographics criterion.",
            "The brand criteria has a brand input that is not recognized as a valid brand.",
            "The brand_list.shared_set_id references a shared set that does not exist.",
            "Cannot create a brand list with deleted shared set.",
            "Brand list can only be negatively targeted for the campaign type.",
            "Cannot positively target locations outside of restricted area for campaign.",
            "Ad group level brand list criteria only support inclusionary targeting. Negative targeting at this level is not supported.",
            "Cannot create a placement list with deleted shared set.",
            "The placement_list.shared_set_id references a shared set that does not exist.",
            "This feature is only available for AI Max campaigns.",
            "This feature is not available for AI Max campaigns.",
            "The operation failed because the campaign is missing the self-declaration on political advertising status in the EU."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONCRETE_TYPE_REQUIRED",
            "INVALID_EXCLUDED_CATEGORY",
            "INVALID_KEYWORD_TEXT",
            "KEYWORD_TEXT_TOO_LONG",
            "KEYWORD_HAS_TOO_MANY_WORDS",
            "KEYWORD_HAS_INVALID_CHARS",
            "INVALID_PLACEMENT_URL",
            "INVALID_USER_LIST",
            "INVALID_USER_INTEREST",
            "INVALID_FORMAT_FOR_PLACEMENT_URL",
            "PLACEMENT_URL_IS_TOO_LONG",
            "PLACEMENT_URL_HAS_ILLEGAL_CHAR",
            "PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE",
            "PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION",
            "INVALID_TOPIC_PATH",
            "INVALID_YOUTUBE_CHANNEL_ID",
            "INVALID_YOUTUBE_VIDEO_ID",
            "YOUTUBE_VERTICAL_CHANNEL_DEPRECATED",
            "YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED",
            "YOUTUBE_URL_UNSUPPORTED",
            "CANNOT_EXCLUDE_CRITERIA_TYPE",
            "CANNOT_ADD_CRITERIA_TYPE",
            "CANNOT_EXCLUDE_SIMILAR_USER_LIST",
            "CANNOT_ADD_CLOSED_USER_LIST",
            "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS",
            "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS",
            "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS",
            "CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS",
            "CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS",
            "CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE",
            "INVALID_COMBINED_AUDIENCE",
            "INVALID_CUSTOM_AFFINITY",
            "INVALID_CUSTOM_INTENT",
            "INVALID_CUSTOM_AUDIENCE",
            "INVALID_IP_ADDRESS",
            "INVALID_IP_FORMAT",
            "INVALID_MOBILE_APP",
            "INVALID_MOBILE_APP_CATEGORY",
            "INVALID_CRITERION_ID",
            "CANNOT_TARGET_CRITERION",
            "CANNOT_TARGET_OBSOLETE_CRITERION",
            "CRITERION_ID_AND_TYPE_MISMATCH",
            "INVALID_PROXIMITY_RADIUS",
            "INVALID_PROXIMITY_RADIUS_UNITS",
            "INVALID_STREETADDRESS_LENGTH",
            "INVALID_CITYNAME_LENGTH",
            "INVALID_REGIONCODE_LENGTH",
            "INVALID_REGIONNAME_LENGTH",
            "INVALID_POSTALCODE_LENGTH",
            "INVALID_COUNTRY_CODE",
            "INVALID_LATITUDE",
            "INVALID_LONGITUDE",
            "PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL",
            "INVALID_PROXIMITY_ADDRESS",
            "INVALID_USER_DOMAIN_NAME",
            "CRITERION_PARAMETER_TOO_LONG",
            "AD_SCHEDULE_TIME_INTERVALS_OVERLAP",
            "AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS",
            "AD_SCHEDULE_INVALID_TIME_INTERVAL",
            "AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT",
            "AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS",
            "CANNOT_BID_MODIFY_CRITERION_TYPE",
            "CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT",
            "CANNOT_BID_MODIFY_NEGATIVE_CRITERION",
            "BID_MODIFIER_ALREADY_EXISTS",
            "FEED_ID_NOT_ALLOWED",
            "ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE",
            "CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY",
            "CANNOT_EXCLUDE_CRITERION",
            "CANNOT_REMOVE_CRITERION",
            "INVALID_PRODUCT_BIDDING_CATEGORY",
            "MISSING_SHOPPING_SETTING",
            "INVALID_MATCHING_FUNCTION",
            "LOCATION_FILTER_NOT_ALLOWED",
            "INVALID_FEED_FOR_LOCATION_FILTER",
            "LOCATION_FILTER_INVALID",
            "CANNOT_SET_GEO_TARGET_CONSTANTS_WITH_FEED_ITEM_SETS",
            "CANNOT_SET_BOTH_ASSET_SET_AND_FEED",
            "CANNOT_SET_FEED_OR_FEED_ITEM_SETS_FOR_CUSTOMER",
            "CANNOT_SET_ASSET_SET_FIELD_FOR_CUSTOMER",
            "CANNOT_SET_GEO_TARGET_CONSTANTS_WITH_ASSET_SETS",
            "CANNOT_SET_ASSET_SETS_WITH_FEED_ITEM_SETS",
            "INVALID_LOCATION_GROUP_ASSET_SET",
            "INVALID_LOCATION_GROUP_RADIUS",
            "INVALID_LOCATION_GROUP_RADIUS_UNIT",
            "CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP",
            "HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION",
            "HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION",
            "FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING",
            "INVALID_WEBPAGE_CONDITION",
            "INVALID_WEBPAGE_CONDITION_URL",
            "WEBPAGE_CONDITION_URL_CANNOT_BE_EMPTY",
            "WEBPAGE_CONDITION_URL_UNSUPPORTED_PROTOCOL",
            "WEBPAGE_CONDITION_URL_CANNOT_BE_IP_ADDRESS",
            "WEBPAGE_CONDITION_URL_DOMAIN_NOT_CONSISTENT_WITH_CAMPAIGN_SETTING",
            "WEBPAGE_CONDITION_URL_CANNOT_BE_PUBLIC_SUFFIX",
            "WEBPAGE_CONDITION_URL_INVALID_PUBLIC_SUFFIX",
            "WEBPAGE_CONDITION_URL_VALUE_TRACK_VALUE_NOT_SUPPORTED",
            "WEBPAGE_CRITERION_URL_EQUALS_CAN_HAVE_ONLY_ONE_CONDITION",
            "WEBPAGE_CRITERION_NOT_SUPPORTED_ON_NON_DSA_AD_GROUP",
            "CANNOT_TARGET_USER_LIST_FOR_SMART_DISPLAY_CAMPAIGNS",
            "CANNOT_TARGET_PLACEMENTS_FOR_SEARCH_CAMPAIGNS",
            "LISTING_SCOPE_TOO_MANY_DIMENSION_TYPES",
            "LISTING_SCOPE_TOO_MANY_IN_OPERATORS",
            "LISTING_SCOPE_IN_OPERATOR_NOT_SUPPORTED",
            "DUPLICATE_LISTING_DIMENSION_TYPE",
            "DUPLICATE_LISTING_DIMENSION_VALUE",
            "CANNOT_SET_BIDS_ON_LISTING_GROUP_SUBDIVISION",
            "LISTING_GROUP_ERROR_IN_ANOTHER_OPERATION",
            "INVALID_LISTING_GROUP_HIERARCHY",
            "LISTING_GROUP_TREE_WAS_INVALID_BEFORE_MUTATION",
            "LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN",
            "LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE",
            "LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS",
            "LISTING_GROUP_ALREADY_EXISTS",
            "LISTING_GROUP_DOES_NOT_EXIST",
            "LISTING_GROUP_CANNOT_BE_REMOVED",
            "INVALID_LISTING_GROUP_TYPE",
            "LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID",
            "LISTING_SCOPE_TOO_LONG",
            "LISTING_SCOPE_TOO_MANY_DIMENSIONS",
            "LISTING_GROUP_TOO_LONG",
            "LISTING_GROUP_TREE_TOO_DEEP",
            "INVALID_LISTING_DIMENSION",
            "INVALID_LISTING_DIMENSION_TYPE",
            "ADVERTISER_NOT_ON_ALLOWLIST_FOR_COMBINED_AUDIENCE_ON_DISPLAY",
            "CANNOT_TARGET_REMOVED_COMBINED_AUDIENCE",
            "INVALID_COMBINED_AUDIENCE_ID",
            "CANNOT_TARGET_REMOVED_CUSTOM_AUDIENCE",
            "HOTEL_CHECK_IN_DATE_RANGE_OVERLAPS_WITH_EXISTING_CRITERION",
            "HOTEL_CHECK_IN_DATE_RANGE_START_DATE_TOO_EARLY",
            "HOTEL_CHECK_IN_DATE_RANGE_END_DATE_TOO_LATE",
            "HOTEL_CHECK_IN_DATE_RANGE_REVERSED",
            "BROAD_MATCH_MODIFIER_KEYWORD_NOT_ALLOWED",
            "ONE_AUDIENCE_ALLOWED_PER_ASSET_GROUP",
            "AUDIENCE_NOT_ELIGIBLE_FOR_CAMPAIGN_TYPE",
            "AUDIENCE_NOT_ALLOWED_TO_ATTACH_WHEN_AUDIENCE_GROUPED_SET_TO_FALSE",
            "CANNOT_TARGET_CUSTOMER_MATCH_USER_LIST",
            "NEGATIVE_KEYWORD_SHARED_SET_DOES_NOT_EXIST",
            "CANNOT_ADD_REMOVED_NEGATIVE_KEYWORD_SHARED_SET",
            "CANNOT_HAVE_MULTIPLE_NEGATIVE_KEYWORD_LIST_PER_ACCOUNT",
            "CUSTOMER_CANNOT_ADD_CRITERION_OF_THIS_TYPE",
            "CANNOT_TARGET_SIMILAR_USER_LIST",
            "CANNOT_ADD_AUDIENCE_SEGMENT_CRITERION_WHEN_AUDIENCE_GROUPED_IS_SET",
            "ONE_AUDIENCE_ALLOWED_PER_AD_GROUP",
            "INVALID_DETAILED_DEMOGRAPHIC",
            "CANNOT_RECOGNIZE_BRAND",
            "BRAND_SHARED_SET_DOES_NOT_EXIST",
            "CANNOT_ADD_REMOVED_BRAND_SHARED_SET",
            "ONLY_EXCLUSION_BRAND_LIST_ALLOWED_FOR_CAMPAIGN_TYPE",
            "LOCATION_TARGETING_NOT_ELIGIBLE_FOR_RESTRICTED_CAMPAIGN",
            "ONLY_INCLUSION_BRAND_LIST_ALLOWED_FOR_AD_GROUPS",
            "CANNOT_ADD_REMOVED_PLACEMENT_LIST_SHARED_SET",
            "PLACEMENT_LIST_SHARED_SET_DOES_NOT_EXIST",
            "AI_MAX_MUST_BE_ENABLED",
            "NOT_AVAILABLE_FOR_AI_MAX_CAMPAIGNS",
            "MISSING_EU_POLITICAL_ADVERTISING_SELF_DECLARATION"
          ]
        },
        "customConversionGoalError": {
          "description": "The reasons for the custom conversion goal error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot find a conversion action with the specified id.",
            "The conversion action is not enabled so it cannot be included in a custom conversion goal.",
            "The custom conversion goal cannot be removed because it's linked to a campaign.",
            "Custom goal with the same name already exists.",
            "Custom goal with the same conversion action list already exists.",
            "Conversion types that cannot be biddable should not be included in custom goal."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_CONVERSION_ACTION",
            "CONVERSION_ACTION_NOT_ENABLED",
            "CANNOT_REMOVE_LINKED_CUSTOM_CONVERSION_GOAL",
            "CUSTOM_GOAL_DUPLICATE_NAME",
            "DUPLICATE_CONVERSION_ACTION_LIST",
            "NON_BIDDABLE_CONVERSION_ACTION_NOT_ELIGIBLE_FOR_CUSTOM_GOAL"
          ]
        },
        "customerCustomizerError": {
          "description": "The reasons for the customer customizer error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN"
          ]
        },
        "customerError": {
          "description": "The reasons for the customer error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Customer status is not allowed to be changed from DRAFT and CLOSED. Currency code and at least one of country code and time zone needs to be set when status is changed to ENABLED.",
            "CustomerService cannot get a customer that has not been fully set up.",
            "Customer creation is denied for policy violation.",
            "Manager account is ineligible to create new accounts."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "STATUS_CHANGE_DISALLOWED",
            "ACCOUNT_NOT_SET_UP",
            "CREATION_DENIED_FOR_POLICY_VIOLATION",
            "CREATION_DENIED_INELIGIBLE_MCC"
          ]
        },
        "customizerAttributeError": {
          "description": "The reasons for the customizer attribute error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "CustomizerAttribute name matches that of another active CustomizerAttribute."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_CUSTOMIZER_ATTRIBUTE_NAME"
          ]
        },
        "dateError": {
          "description": "The reasons for the date error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Given field values do not correspond to a valid date.",
            "Given field values do not correspond to a valid date time.",
            "The string date's format should be yyyy-mm-dd.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss.ssssss.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss.",
            "The string date time's format should be yyyy-mm-dd hh:mm:ss+|-hh:mm.",
            "Date is before allowed minimum.",
            "Date is after allowed maximum.",
            "Date range bounds are not in order.",
            "Both dates in range are null."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_FIELD_VALUES_IN_DATE",
            "INVALID_FIELD_VALUES_IN_DATE_TIME",
            "INVALID_STRING_DATE",
            "INVALID_STRING_DATE_TIME_MICROS",
            "INVALID_STRING_DATE_TIME_SECONDS",
            "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET",
            "EARLIER_THAN_MINIMUM_DATE",
            "LATER_THAN_MAXIMUM_DATE",
            "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE",
            "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL"
          ]
        },
        "dateRangeError": {
          "description": "The reasons for the date range error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Invalid date.",
            "The start date was after the end date.",
            "Cannot set date to past time",
            "A date was used that is past the system \"last\" date.",
            "Trying to change start date on a resource that has started."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_DATE",
            "START_DATE_AFTER_END_DATE",
            "CANNOT_SET_DATE_TO_PAST",
            "AFTER_MAXIMUM_ALLOWABLE_DATE",
            "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED"
          ]
        },
        "distinctError": {
          "description": "The reasons for the distinct error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Duplicate element.",
            "Duplicate type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_ELEMENT",
            "DUPLICATE_TYPE"
          ]
        },
        "feedAttributeReferenceError": {
          "description": "The reasons for the feed attribute reference error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A feed referenced by ID has been removed.",
            "There is no enabled feed with the given name.",
            "There is no feed attribute in an enabled feed with the given name."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_REFERENCE_REMOVED_FEED",
            "INVALID_FEED_NAME",
            "INVALID_FEED_ATTRIBUTE_NAME"
          ]
        },
        "finalUrlExpansionAssetViewError": {
          "description": "The reasons for the final url expansion asset view error",
          "type": "string",
          "enumDescriptions": [
            "Name unspecified.",
            "The received error code is not known in this version.",
            "At least one required filter has to be applied in the query.",
            "Advertising channel type filter is required.",
            "Advertising channel type filter has an invalid value.",
            "Asset group cannot be selected in the query.",
            "Ad group cannot be selected in the query.",
            "A selected field/resource requires filtering by a single resource.",
            "Both ad group and asset group cannot be selected in the query.",
            "Both ad group and asset group cannot be filtered in the query."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MISSING_REQUIRED_FILTER",
            "REQUIRES_ADVERTISING_CHANNEL_TYPE_FILTER",
            "INVALID_ADVERTISING_CHANNEL_TYPE_IN_FILTER",
            "CANNOT_SELECT_ASSET_GROUP",
            "CANNOT_SELECT_AD_GROUP",
            "REQUIRES_FILTER_BY_SINGLE_RESOURCE",
            "CANNOT_SELECT_BOTH_AD_GROUP_AND_ASSET_GROUP",
            "CANNOT_FILTER_BY_BOTH_AD_GROUP_AND_ASSET_GROUP"
          ]
        },
        "functionError": {
          "description": "The reasons for the function error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The format of the function is not recognized as a supported function format.",
            "Operand data types do not match.",
            "The operands cannot be used together in a conjunction.",
            "Invalid numer of Operands.",
            "Operand Type not supported.",
            "Operator not supported.",
            "Request context type not supported.",
            "The matching function is not allowed for call placeholders",
            "The matching function is not allowed for the specified placeholder",
            "Invalid operand.",
            "Missing value for the constant operand.",
            "The value of the constant operand is invalid.",
            "Invalid function nesting.",
            "The Feed ID was different from another Feed ID in the same function.",
            "The matching function is invalid for use with a feed with a fixed schema.",
            "Invalid attribute name."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_FUNCTION_FORMAT",
            "DATA_TYPE_MISMATCH",
            "INVALID_CONJUNCTION_OPERANDS",
            "INVALID_NUMBER_OF_OPERANDS",
            "INVALID_OPERAND_TYPE",
            "INVALID_OPERATOR",
            "INVALID_REQUEST_CONTEXT_TYPE",
            "INVALID_FUNCTION_FOR_CALL_PLACEHOLDER",
            "INVALID_FUNCTION_FOR_PLACEHOLDER",
            "INVALID_OPERAND",
            "MISSING_CONSTANT_OPERAND_VALUE",
            "INVALID_CONSTANT_OPERAND_VALUE",
            "INVALID_NESTING",
            "MULTIPLE_FEED_IDS_NOT_SUPPORTED",
            "INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA",
            "INVALID_ATTRIBUTE_NAME"
          ]
        },
        "functionParsingError": {
          "description": "The reasons for the function parsing error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Unexpected end of function string.",
            "Could not find an expected character.",
            "Unexpected separator character.",
            "Unmatched left bracket or parenthesis.",
            "Unmatched right bracket or parenthesis.",
            "Functions are nested too deeply.",
            "Missing right-hand-side operand.",
            "Invalid operator/function name.",
            "Feed attribute operand's argument is not an integer.",
            "Missing function operands.",
            "Function had too many operands."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_MORE_INPUT",
            "EXPECTED_CHARACTER",
            "UNEXPECTED_SEPARATOR",
            "UNMATCHED_LEFT_BRACKET",
            "UNMATCHED_RIGHT_BRACKET",
            "TOO_MANY_NESTED_FUNCTIONS",
            "MISSING_RIGHT_HAND_OPERAND",
            "INVALID_OPERATOR_NAME",
            "FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER",
            "NO_OPERANDS",
            "TOO_MANY_OPERANDS"
          ]
        },
        "idError": {
          "description": "The reasons for the id error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "ID not found"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_FOUND"
          ]
        },
        "imageError": {
          "description": "The reasons for the image error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The image is not valid.",
            "The image could not be stored.",
            "There was a problem with the request.",
            "The image is not of legal dimensions.",
            "Animated image are not permitted.",
            "Animation is too long.",
            "There was an error on the server.",
            "Image cannot be in CMYK color format.",
            "Flash images are not permitted.",
            "Flash images must support clickTag.",
            "A flash error has occurred after fixing the click tag.",
            "Unacceptable visual effects.",
            "There was a problem with the flash image.",
            "Incorrect image layout.",
            "There was a problem reading the image file.",
            "There was an error storing the image.",
            "The aspect ratio of the image is not allowed.",
            "Flash cannot have network objects.",
            "Flash cannot have network methods.",
            "Flash cannot have a Url.",
            "Flash cannot use mouse tracking.",
            "Flash cannot have a random number.",
            "Ad click target cannot be '_self'.",
            "GetUrl method should only use '_blank'.",
            "Flash version is not supported.",
            "Flash movies need to have hard coded click URL or clickTAG",
            "Uploaded flash file is corrupted.",
            "Uploaded flash file can be parsed, but the click tag can not be fixed properly.",
            "Flash movie accesses network resources",
            "Flash movie attempts to call external javascript code",
            "Flash movie attempts to call flash system commands",
            "Image file is too large.",
            "Image data is too large.",
            "Error while processing the image.",
            "Image is too small.",
            "Input was invalid.",
            "There was a problem reading the image file.",
            "Image constraints are violated, but details like ASPECT_RATIO_NOT_ALLOWED can't be provided. This happens when asset spec contains more than one constraint and different criteria of different constraints are violated.",
            "Image format is not allowed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_IMAGE",
            "STORAGE_ERROR",
            "BAD_REQUEST",
            "UNEXPECTED_SIZE",
            "ANIMATED_NOT_ALLOWED",
            "ANIMATION_TOO_LONG",
            "SERVER_ERROR",
            "CMYK_JPEG_NOT_ALLOWED",
            "FLASH_NOT_ALLOWED",
            "FLASH_WITHOUT_CLICKTAG",
            "FLASH_ERROR_AFTER_FIXING_CLICK_TAG",
            "ANIMATED_VISUAL_EFFECT",
            "FLASH_ERROR",
            "LAYOUT_PROBLEM",
            "PROBLEM_READING_IMAGE_FILE",
            "ERROR_STORING_IMAGE",
            "ASPECT_RATIO_NOT_ALLOWED",
            "FLASH_HAS_NETWORK_OBJECTS",
            "FLASH_HAS_NETWORK_METHODS",
            "FLASH_HAS_URL",
            "FLASH_HAS_MOUSE_TRACKING",
            "FLASH_HAS_RANDOM_NUM",
            "FLASH_SELF_TARGETS",
            "FLASH_BAD_GETURL_TARGET",
            "FLASH_VERSION_NOT_SUPPORTED",
            "FLASH_WITHOUT_HARD_CODED_CLICK_URL",
            "INVALID_FLASH_FILE",
            "FAILED_TO_FIX_CLICK_TAG_IN_FLASH",
            "FLASH_ACCESSES_NETWORK_RESOURCES",
            "FLASH_EXTERNAL_JS_CALL",
            "FLASH_EXTERNAL_FS_CALL",
            "FILE_TOO_LARGE",
            "IMAGE_DATA_TOO_LARGE",
            "IMAGE_PROCESSING_ERROR",
            "IMAGE_TOO_SMALL",
            "INVALID_INPUT",
            "PROBLEM_READING_FILE",
            "IMAGE_CONSTRAINTS_VIOLATED",
            "FORMAT_NOT_ALLOWED"
          ]
        },
        "languageCodeError": {
          "description": "The reasons for the language code error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The input language code is not recognized.",
            "The language code is not supported."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LANGUAGE_CODE_NOT_FOUND",
            "INVALID_LANGUAGE_CODE"
          ]
        },
        "mediaBundleError": {
          "description": "The reasons for the media bundle error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "There was a problem with the request.",
            "HTML5 ads using DoubleClick Studio created ZIP files are not supported.",
            "Cannot reference URL external to the media bundle.",
            "Media bundle file is too large.",
            "ZIP file from Google Web Designer is not published.",
            "Input was invalid.",
            "There was a problem with the media bundle.",
            "There was a problem with one or more of the media bundle entries.",
            "The media bundle contains a file with an unknown mime type",
            "The media bundle contain an invalid asset path.",
            "HTML5 ad is trying to reference an asset not in .ZIP file",
            "Media data is too large.",
            "The media bundle contains no primary entry.",
            "There was an error on the server.",
            "The image could not be stored.",
            "Media bundle created with the Swiffy tool is not allowed.",
            "The media bundle contains too many files.",
            "The media bundle is not of legal dimensions.",
            "Google Web Designer not created for \"Google Ads\" environment.",
            "Unsupported HTML5 feature in HTML5 asset.",
            "URL in HTML5 entry is not ssl compliant.",
            "Custom exits not allowed in HTML5 entry."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BAD_REQUEST",
            "DOUBLECLICK_BUNDLE_NOT_ALLOWED",
            "EXTERNAL_URL_NOT_ALLOWED",
            "FILE_TOO_LARGE",
            "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED",
            "INVALID_INPUT",
            "INVALID_MEDIA_BUNDLE",
            "INVALID_MEDIA_BUNDLE_ENTRY",
            "INVALID_MIME_TYPE",
            "INVALID_PATH",
            "INVALID_URL_REFERENCE",
            "MEDIA_DATA_TOO_LARGE",
            "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY",
            "SERVER_ERROR",
            "STORAGE_ERROR",
            "SWIFFY_BUNDLE_NOT_ALLOWED",
            "TOO_MANY_FILES",
            "UNEXPECTED_SIZE",
            "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT",
            "UNSUPPORTED_HTML5_FEATURE",
            "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT",
            "CUSTOM_EXIT_NOT_ALLOWED"
          ]
        },
        "mediaUploadError": {
          "description": "The reasons for media uploading errors.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The uploaded file is too big.",
            "Image data is unparseable.",
            "Animated images are not allowed.",
            "The image or media bundle format is not allowed.",
            "Cannot reference URL external to the media bundle.",
            "HTML5 ad is trying to reference an asset not in .ZIP file.",
            "The media bundle contains no primary entry.",
            "Animation has disallowed visual effects.",
            "Animation longer than the allowed 30 second limit.",
            "The aspect ratio of the image does not match the expected aspect ratios provided in the asset spec.",
            "Audio files are not allowed in bundle.",
            "CMYK jpegs are not supported.",
            "Flash movies are not allowed.",
            "The frame rate of the video is higher than the allowed 5fps.",
            "ZIP file from Google Web Designer is not published.",
            "Image constraints are violated, but more details (like DIMENSIONS_NOT_ALLOWED or ASPECT_RATIO_NOT_ALLOWED) can not be provided. This happens when asset spec contains more than one constraint and criteria of different constraints are violated.",
            "Media bundle data is unrecognizable.",
            "There was a problem with one or more of the media bundle entries.",
            "The asset has an invalid mime type.",
            "The media bundle contains an invalid asset path.",
            "Image has layout problem.",
            "An asset had a URL reference that is malformed per RFC 1738 convention.",
            "The uploaded media bundle format is not allowed.",
            "The media bundle is not compatible with the asset spec product type. (For example, Gmail, dynamic remarketing, etc.)",
            "A bundle being uploaded that is incompatible with multiple assets for different reasons.",
            "The media bundle contains too many files.",
            "Google Web Designer not created for \"Google Ads\" environment.",
            "Unsupported HTML5 feature in HTML5 asset.",
            "URL in HTML5 entry is not SSL compliant.",
            "Video file name is longer than the 50 allowed characters.",
            "Multiple videos with same name in a bundle.",
            "Videos are not allowed in media bundle.",
            "This type of media cannot be uploaded through the Google Ads API.",
            "The dimensions of the image are not allowed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FILE_TOO_BIG",
            "UNPARSEABLE_IMAGE",
            "ANIMATED_IMAGE_NOT_ALLOWED",
            "FORMAT_NOT_ALLOWED",
            "EXTERNAL_URL_NOT_ALLOWED",
            "INVALID_URL_REFERENCE",
            "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY",
            "ANIMATED_VISUAL_EFFECT",
            "ANIMATION_TOO_LONG",
            "ASPECT_RATIO_NOT_ALLOWED",
            "AUDIO_NOT_ALLOWED_IN_MEDIA_BUNDLE",
            "CMYK_JPEG_NOT_ALLOWED",
            "FLASH_NOT_ALLOWED",
            "FRAME_RATE_TOO_HIGH",
            "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED",
            "IMAGE_CONSTRAINTS_VIOLATED",
            "INVALID_MEDIA_BUNDLE",
            "INVALID_MEDIA_BUNDLE_ENTRY",
            "INVALID_MIME_TYPE",
            "INVALID_PATH",
            "LAYOUT_PROBLEM",
            "MALFORMED_URL",
            "MEDIA_BUNDLE_NOT_ALLOWED",
            "MEDIA_BUNDLE_NOT_COMPATIBLE_TO_PRODUCT_TYPE",
            "MEDIA_BUNDLE_REJECTED_BY_MULTIPLE_ASSET_SPECS",
            "TOO_MANY_FILES_IN_MEDIA_BUNDLE",
            "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT",
            "UNSUPPORTED_HTML5_FEATURE",
            "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT",
            "VIDEO_FILE_NAME_TOO_LONG",
            "VIDEO_MULTIPLE_FILES_WITH_SAME_NAME",
            "VIDEO_NOT_ALLOWED_IN_MEDIA_BUNDLE",
            "CANNOT_UPLOAD_MEDIA_TYPE_THROUGH_API",
            "DIMENSIONS_NOT_ALLOWED"
          ]
        },
        "mediaFileError": {
          "description": "The reasons for the media file error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot create a standard icon type.",
            "May only select Standard Icons alone.",
            "Image contains both a media file ID and data.",
            "A media file with given type and reference ID already exists.",
            "A required field was not specified or is an empty string.",
            "A media file may only be modified once per call.",
            "Field is not supported for the media sub type.",
            "The media file ID is invalid.",
            "The media subtype is invalid.",
            "The media file type is invalid.",
            "The mimetype is invalid.",
            "The media reference ID is invalid.",
            "The YouTube video ID is invalid.",
            "Media file has failed transcoding",
            "Media file has not been transcoded.",
            "The media type does not match the actual media file's type.",
            "None of the fields have been specified.",
            "One of reference ID or media file ID must be specified.",
            "The string has too many characters.",
            "The specified type is not supported.",
            "YouTube is unavailable for requesting video data.",
            "The YouTube video has a non positive duration.",
            "The YouTube video ID is syntactically valid but the video was not found."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_CREATE_STANDARD_ICON",
            "CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES",
            "CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA",
            "DUPLICATE_MEDIA",
            "EMPTY_FIELD",
            "RESOURCE_REFERENCED_IN_MULTIPLE_OPS",
            "FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE",
            "INVALID_MEDIA_FILE_ID",
            "INVALID_MEDIA_SUB_TYPE",
            "INVALID_MEDIA_FILE_TYPE",
            "INVALID_MIME_TYPE",
            "INVALID_REFERENCE_ID",
            "INVALID_YOU_TUBE_ID",
            "MEDIA_FILE_FAILED_TRANSCODING",
            "MEDIA_NOT_TRANSCODED",
            "MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE",
            "NO_FIELDS_SPECIFIED",
            "NULL_REFERENCE_ID_AND_MEDIA_ID",
            "TOO_LONG",
            "UNSUPPORTED_TYPE",
            "YOU_TUBE_SERVICE_UNAVAILABLE",
            "YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION",
            "YOU_TUBE_VIDEO_NOT_FOUND"
          ]
        },
        "merchantCenterError": {
          "description": "Container for enum describing possible merchant center errors.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Merchant ID is either not found or not linked to the Google Ads customer.",
            "Customer not allowlisted for Shopping in Performance Max Campaign."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MERCHANT_ID_CANNOT_BE_ACCESSED",
            "CUSTOMER_NOT_ALLOWED_FOR_SHOPPING_PERFORMANCE_MAX"
          ]
        },
        "multiplierError": {
          "description": "The reasons for the multiplier error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Multiplier value is too high",
            "Multiplier value is too low",
            "Too many fractional digits",
            "A multiplier cannot be set for this bidding strategy",
            "A multiplier cannot be set when there is no base bid (for example, content max cpc)",
            "A bid multiplier must be specified",
            "Multiplier causes bid to exceed daily budget",
            "Multiplier causes bid to exceed monthly budget",
            "Multiplier causes bid to exceed custom budget",
            "Multiplier causes bid to exceed maximum allowed bid",
            "Multiplier causes bid to become less than the minimum bid allowed",
            "Multiplier type (cpc versus cpm) needs to match campaign's bidding strategy"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MULTIPLIER_TOO_HIGH",
            "MULTIPLIER_TOO_LOW",
            "TOO_MANY_FRACTIONAL_DIGITS",
            "MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY",
            "MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING",
            "NO_MULTIPLIER_SPECIFIED",
            "MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET",
            "MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET",
            "MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET",
            "MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID",
            "BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER",
            "MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH"
          ]
        },
        "newResourceCreationError": {
          "description": "The reasons for the new resource creation error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Do not set the id field while creating new resources.",
            "Creating more than one resource with the same temp ID is not allowed.",
            "Parent resource with specified temp ID failed validation, so no validation will be done for this child resource."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_SET_ID_FOR_CREATE",
            "DUPLICATE_TEMP_IDS",
            "TEMP_ID_RESOURCE_HAD_ERRORS"
          ]
        },
        "notEmptyError": {
          "description": "The reasons for the not empty error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Empty list."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EMPTY_LIST"
          ]
        },
        "nullError": {
          "description": "The reasons for the null error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Specified list/container must not contain any null elements"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NULL_CONTENT"
          ]
        },
        "operatorError": {
          "description": "The reasons for the operator error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Operator not supported."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPERATOR_NOT_SUPPORTED"
          ]
        },
        "rangeError": {
          "description": "The reasons for the range error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Too low.",
            "Too high."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_LOW",
            "TOO_HIGH"
          ]
        },
        "recommendationError": {
          "description": "The reasons for error in applying a recommendation",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The specified budget amount is too low for example, lower than minimum currency unit or lower than ad group minimum cost-per-click.",
            "The specified budget amount is too large.",
            "The specified budget amount is not a valid amount, for example, not a multiple of minimum currency unit.",
            "The specified keyword or ad violates ad policy.",
            "The specified bid amount is not valid, for example, too many fractional digits, or negative amount.",
            "The number of keywords in ad group have reached the maximum allowed.",
            "The recommendation requested to apply has already been applied.",
            "The recommendation requested to apply has been invalidated.",
            "The number of operations in a single request exceeds the maximum allowed.",
            "There are no operations in the request.",
            "Operations with multiple recommendation types are not supported when partial failure mode is not enabled.",
            "Request contains multiple operations with the same resource_name.",
            "The recommendation requested to dismiss has already been dismissed.",
            "The recommendation apply request was malformed and invalid.",
            "The type of recommendation requested to apply is not supported.",
            "The target multiplier specified is invalid.",
            "The passed in advertising_channel_type is not supported.",
            "The passed in recommendation_type is not supported.",
            "One or more recommendation_types need to be passed into the generate recommendations request.",
            "Bidding info is required for the CAMPAIGN_BUDGET recommendation type.",
            "Bidding strategy type is required for the CAMPAIGN_BUDGET recommendation type.",
            "Asset group info is required for the campaign budget recommendation type.",
            "Asset group info with final url is required for the CAMPAIGN_BUDGET recommendation type.",
            "Country codes are required for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Country code is invalid for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Language codes are required for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Either positive or negative location ids are required for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Ad group info is required for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Keywords are required for the CAMPAIGN_BUDGET recommendation type for SEARCH channel.",
            "Location is required for the CAMPAIGN_BUDGET recommendation type for bidding strategy type TARGET_IMPRESSION_SHARE.",
            "Target impression share micros are required for the CAMPAIGN_BUDGET recommendation type for bidding strategy type TARGET_IMPRESSION_SHARE.",
            "Target impression share micros are required to be between 1 and 1000000 for the CAMPAIGN_BUDGET recommendation type for bidding strategy type TARGET_IMPRESSION_SHARE.",
            "Target impression share info is required for the CAMPAIGN_BUDGET recommendation type for bidding strategy type TARGET_IMPRESSION_SHARE.",
            "Merchant Center Account ID is only supported for advertising_channel_type PERFORMANCE_MAX."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BUDGET_AMOUNT_TOO_SMALL",
            "BUDGET_AMOUNT_TOO_LARGE",
            "INVALID_BUDGET_AMOUNT",
            "POLICY_ERROR",
            "INVALID_BID_AMOUNT",
            "ADGROUP_KEYWORD_LIMIT",
            "RECOMMENDATION_ALREADY_APPLIED",
            "RECOMMENDATION_INVALIDATED",
            "TOO_MANY_OPERATIONS",
            "NO_OPERATIONS",
            "DIFFERENT_TYPES_NOT_SUPPORTED",
            "DUPLICATE_RESOURCE_NAME",
            "RECOMMENDATION_ALREADY_DISMISSED",
            "INVALID_APPLY_REQUEST",
            "RECOMMENDATION_TYPE_APPLY_NOT_SUPPORTED",
            "INVALID_MULTIPLIER",
            "ADVERTISING_CHANNEL_TYPE_GENERATE_NOT_SUPPORTED",
            "RECOMMENDATION_TYPE_GENERATE_NOT_SUPPORTED",
            "RECOMMENDATION_TYPES_CANNOT_BE_EMPTY",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_BIDDING_INFO",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_BIDDING_STRATEGY_TYPE",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_ASSET_GROUP_INFO",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_ASSET_GROUP_INFO_WITH_FINAL_URL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_COUNTRY_CODES_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_INVALID_COUNTRY_CODE_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_LANGUAGE_CODES_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_EITHER_POSITIVE_OR_NEGATIVE_LOCATION_IDS_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_AD_GROUP_INFO_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_KEYWORDS_FOR_SEARCH_CHANNEL",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_LOCATION",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_TARGET_IMPRESSION_SHARE_MICROS",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_TARGET_IMPRESSION_SHARE_MICROS_BETWEEN_1_AND_1000000",
            "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_TARGET_IMPRESSION_SHARE_INFO",
            "MERCHANT_CENTER_ACCOUNT_ID_NOT_SUPPORTED_ADVERTISING_CHANNEL_TYPE"
          ]
        },
        "recommendationSubscriptionError": {
          "description": "The reasons for the recommendation subscription error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN"
          ]
        },
        "regionCodeError": {
          "description": "The reasons for the region code error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Invalid region code."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_REGION_CODE"
          ]
        },
        "settingError": {
          "description": "The reasons for the setting error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The campaign setting is not available for this Google Ads account.",
            "The setting is not compatible with the campaign.",
            "The supplied TargetingSetting contains an invalid CriterionTypeGroup. See CriterionTypeGroup documentation for CriterionTypeGroups allowed in Campaign or AdGroup TargetingSettings.",
            "TargetingSetting must not explicitly set any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT, INCOME_RANGE) to false (it's okay to not set them at all, in which case the system will set them to true automatically).",
            "TargetingSetting cannot change any of the Demographic CriterionTypeGroups (AGE_RANGE, GENDER, PARENT, INCOME_RANGE) from true to false.",
            "At least one feed id should be present.",
            "The supplied DynamicSearchAdsSetting contains an invalid domain name.",
            "The supplied DynamicSearchAdsSetting contains a subdomain name.",
            "The supplied DynamicSearchAdsSetting contains an invalid language code.",
            "TargetingSettings in search campaigns should not have CriterionTypeGroup.PLACEMENT set to targetAll.",
            "The setting value is not compatible with the campaign type.",
            "Switching from observation setting to targeting setting is not allowed for Customer Match lists. See https://support.google.com/google-ads/answer/6299717."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SETTING_TYPE_IS_NOT_AVAILABLE",
            "SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN",
            "TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP",
            "TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL",
            "TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP",
            "DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT",
            "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME",
            "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME",
            "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE",
            "TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN",
            "SETTING_VALUE_NOT_COMPATIBLE_WITH_CAMPAIGN",
            "BID_ONLY_IS_NOT_ALLOWED_TO_BE_MODIFIED_WITH_CUSTOMER_MATCH_TARGETING"
          ]
        },
        "stringFormatError": {
          "description": "The reasons for the string format error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The input string value contains disallowed characters.",
            "The input string value is invalid for the associated field."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ILLEGAL_CHARS",
            "INVALID_FORMAT"
          ]
        },
        "stringLengthError": {
          "description": "The reasons for the string length error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The specified field should have a least one non-whitespace character in it.",
            "Too short.",
            "Too long."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EMPTY",
            "TOO_SHORT",
            "TOO_LONG"
          ]
        },
        "operationAccessDeniedError": {
          "description": "The reasons for the operation access denied error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Unauthorized invocation of a service's method (get, mutate, etc.)",
            "Unauthorized CREATE operation in invoking a service's mutate method.",
            "Unauthorized REMOVE operation in invoking a service's mutate method.",
            "Unauthorized UPDATE operation in invoking a service's mutate method.",
            "A mutate action is not allowed on this resource, from this client.",
            "This operation is not permitted on this campaign type",
            "A CREATE operation may not set status to REMOVED.",
            "This operation is not allowed because the resource is removed.",
            "This operation is not permitted on this ad group type.",
            "The mutate is not allowed for this customer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACTION_NOT_PERMITTED",
            "CREATE_OPERATION_NOT_PERMITTED",
            "REMOVE_OPERATION_NOT_PERMITTED",
            "UPDATE_OPERATION_NOT_PERMITTED",
            "MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT",
            "OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE",
            "CREATE_AS_REMOVED_NOT_PERMITTED",
            "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE",
            "OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE",
            "MUTATE_NOT_PERMITTED_FOR_CUSTOMER"
          ]
        },
        "resourceAccessDeniedError": {
          "description": "The reasons for the resource access denied error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "User did not have write access."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "WRITE_ACCESS_DENIED"
          ]
        },
        "resourceCountLimitExceededError": {
          "description": "The reasons for the resource count limit exceeded error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Indicates that this request would exceed the number of allowed resources for the Google Ads account. The exact resource type and limit being checked can be inferred from accountLimitType.",
            "Indicates that this request would exceed the number of allowed resources in a Campaign. The exact resource type and limit being checked can be inferred from accountLimitType, and the numeric id of the Campaign involved is given by enclosingId.",
            "Indicates that this request would exceed the number of allowed resources in an ad group. The exact resource type and limit being checked can be inferred from accountLimitType, and the numeric id of the ad group involved is given by enclosingId.",
            "Indicates that this request would exceed the number of allowed resources in an ad group ad. The exact resource type and limit being checked can be inferred from accountLimitType, and the enclosingId contains the ad group id followed by the ad id, separated by a single comma (,).",
            "Indicates that this request would exceed the number of allowed resources in an ad group criterion. The exact resource type and limit being checked can be inferred from accountLimitType, and the enclosingId contains the ad group id followed by the criterion id, separated by a single comma (,).",
            "Indicates that this request would exceed the number of allowed resources in this shared set. The exact resource type and limit being checked can be inferred from accountLimitType, and the numeric id of the shared set involved is given by enclosingId.",
            "Exceeds a limit related to a matching function.",
            "The response for this request would exceed the maximum number of rows that can be returned.",
            "This request would exceed a limit on the number of allowed resources. The details of which type of limit was exceeded will eventually be returned in ErrorDetails."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCOUNT_LIMIT",
            "CAMPAIGN_LIMIT",
            "ADGROUP_LIMIT",
            "AD_GROUP_AD_LIMIT",
            "AD_GROUP_CRITERION_LIMIT",
            "SHARED_SET_LIMIT",
            "MATCHING_FUNCTION_LIMIT",
            "RESPONSE_ROW_LIMIT_EXCEEDED",
            "RESOURCE_LIMIT"
          ]
        },
        "youtubeVideoRegistrationError": {
          "description": "The reasons for YouTube video registration errors.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Video to be registered wasn't found.",
            "Video to be registered is not accessible (for example, private).",
            "Video to be registered is not eligible (for example, mature content)."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VIDEO_NOT_FOUND",
            "VIDEO_NOT_ACCESSIBLE",
            "VIDEO_NOT_ELIGIBLE"
          ]
        },
        "adGroupBidModifierError": {
          "description": "The reasons for the ad group bid modifier error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The criterion ID does not support bid modification.",
            "Cannot override the bid modifier for the given criterion ID if the parent campaign is opted out of the same criterion."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CRITERION_ID_NOT_SUPPORTED",
            "CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER"
          ]
        },
        "contextError": {
          "description": "The reasons for the context error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The operation is not allowed for the given context.",
            "The operation is not allowed for removed resources."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPERATION_NOT_PERMITTED_FOR_CONTEXT",
            "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE"
          ]
        },
        "fieldError": {
          "description": "The reasons for the field error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The required field was not present.",
            "The field attempted to be mutated is immutable.",
            "The field's value is invalid.",
            "The field cannot be set.",
            "The required repeated field was empty.",
            "The field cannot be cleared.",
            "The field's value is on a deny-list for this field.",
            "The field's value cannot be modified, except for clearing."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUIRED",
            "IMMUTABLE_FIELD",
            "INVALID_VALUE",
            "VALUE_MUST_BE_UNSET",
            "REQUIRED_NONEMPTY_LIST",
            "FIELD_CANNOT_BE_CLEARED",
            "BLOCKED_VALUE",
            "FIELD_CAN_ONLY_BE_CLEARED"
          ]
        },
        "sharedSetError": {
          "description": "The reasons for the shared set error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The customer cannot create this type of shared set.",
            "A shared set with this name already exists.",
            "Removed shared sets cannot be mutated.",
            "The shared set cannot be removed because it is in use."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE",
            "DUPLICATE_NAME",
            "SHARED_SET_REMOVED",
            "SHARED_SET_IN_USE"
          ]
        },
        "sharedCriterionError": {
          "description": "The reasons for the shared criterion error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The criterion is not appropriate for the shared set type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE"
          ]
        },
        "campaignSharedSetError": {
          "description": "The reasons for the campaign shared set error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The shared set belongs to another customer and permission isn't granted."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "SHARED_SET_ACCESS_DENIED"
          ]
        },
        "conversionActionError": {
          "description": "The reasons for the conversion action error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The specified conversion action name already exists.",
            "Another conversion action with the specified app id already exists.",
            "Android first open action conflicts with Google play codeless download action tracking the same app.",
            "Android first open action conflicts with Google play codeless download action tracking the same app.",
            "The attribution model cannot be set to DATA_DRIVEN because a data-driven model has never been generated.",
            "The attribution model cannot be set to DATA_DRIVEN because the data-driven model is expired.",
            "The attribution model cannot be set to DATA_DRIVEN because the data-driven model is stale.",
            "The attribution model cannot be set to DATA_DRIVEN because the data-driven model is unavailable or the conversion action was newly added.",
            "Creation of this conversion action type isn't supported by Google Ads API.",
            "Update of this conversion action isn't supported by Google Ads API.",
            "Rule-based attribution models are deprecated and not allowed to be set by conversion action."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_NAME",
            "DUPLICATE_APP_ID",
            "TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD",
            "BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION",
            "DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED",
            "DATA_DRIVEN_MODEL_EXPIRED",
            "DATA_DRIVEN_MODEL_STALE",
            "DATA_DRIVEN_MODEL_UNKNOWN",
            "CREATION_NOT_SUPPORTED",
            "UPDATE_NOT_SUPPORTED",
            "CANNOT_SET_RULE_BASED_ATTRIBUTION_MODELS"
          ]
        },
        "conversionAdjustmentUploadError": {
          "description": "The reasons for the conversion adjustment upload error",
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Used for return value only. Represents value unknown in this version.",
            "Can't import events to a conversion action that was just created. Try importing again in 6 hours.",
            "The conversion was already retracted. This adjustment was not processed.",
            "The conversion for this conversion action and conversion identifier can't be found. Make sure your conversion identifiers are associated with the correct conversion action and try again.",
            "Adjustment can't be made to a conversion that occurred more than 54 days ago.",
            "Adjustment has an `adjustment_date_time` that occurred before the associated conversion. Make sure your `adjustment_date_time` is correct and try again.",
            "More recent adjustment `adjustment_date_time` has already been reported for the associated conversion. Make sure your adjustment `adjustment_date_time` is correct and try again.",
            "Adjustment can't be recorded because the conversion occurred too recently. Try adjusting a conversion that occurred at least 24 hours ago.",
            "Can't make an adjustment to a conversion that is set up to use the default value. Check your conversion action value setting and try again.",
            "Try uploading fewer than 2001 adjustments in a single API request.",
            "The conversion has already been adjusted the maximum number of times. Make sure you're only making necessary adjustment to existing conversion.",
            "The conversion has prior a restatement with the same `adjustment_date_time`. Make sure your adjustment has the correct and unique `adjustment_date_time` and try again.",
            "Imported adjustment has a duplicate conversion adjustment with same `adjustment_date_time`. Make sure your adjustment has the correct `adjustment_date_time` and try again.",
            "Make sure you agree to the customer data processing terms in conversion settings and try again.",
            "Can't use enhanced conversions with the specified conversion action.",
            "Make sure you hash user provided data using SHA-256 and ensure you are normalizing according to the guidelines.",
            "Use user provided data such as emails or phone numbers hashed using SHA-256 and try again.",
            "Cannot set both gclid_date_time_pair and order_id. Use only 1 type and try again.",
            "Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.",
            "Multiple enhancements have the same conversion action and Order ID. Make sure your data is correctly configured and try again.",
            "Enhanced conversions can't be used for this account because of Google customer data policies. Contact your Google representative.",
            "Adjustment for website conversion requires Order ID (ie, transaction ID). Make sure your website tags capture Order IDs and you send the same Order IDs with your adjustment.",
            "Can't use adjustment with Order IDs containing personally-identifiable information (PII).",
            "The provided job id in the request is not within the allowed range. A job ID must be a positive integer in the range [1, 2^31).",
            "The conversion action specified in the adjustment request cannot be found. Make sure it's available in this account.",
            "The type of the conversion action specified in the adjustment request isn't supported for uploading adjustments. A conversion adjustment of type `RETRACTION` or `RESTATEMENT` is only permitted for conversion actions of type `SALESFORCE`, `UPLOAD_CLICK` or `WEBPAGE`. A conversion adjustment of type `ENHANCEMENT` is only permitted for conversion actions of type `WEBPAGE`."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_RECENT_CONVERSION_ACTION",
            "CONVERSION_ALREADY_RETRACTED",
            "CONVERSION_NOT_FOUND",
            "CONVERSION_EXPIRED",
            "ADJUSTMENT_PRECEDES_CONVERSION",
            "MORE_RECENT_RESTATEMENT_FOUND",
            "TOO_RECENT_CONVERSION",
            "CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE",
            "TOO_MANY_ADJUSTMENTS_IN_REQUEST",
            "TOO_MANY_ADJUSTMENTS",
            "RESTATEMENT_ALREADY_EXISTS",
            "DUPLICATE_ADJUSTMENT_IN_REQUEST",
            "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS",
            "CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT",
            "INVALID_USER_IDENTIFIER",
            "UNSUPPORTED_USER_IDENTIFIER",
            "GCLID_DATE_TIME_PAIR_AND_ORDER_ID_BOTH_SET",
            "CONVERSION_ALREADY_ENHANCED",
            "DUPLICATE_ENHANCEMENT_IN_REQUEST",
            "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCEMENT",
            "MISSING_ORDER_ID_FOR_WEBPAGE",
            "ORDER_ID_CONTAINS_PII",
            "INVALID_JOB_ID",
            "NO_CONVERSION_ACTION_FOUND",
            "INVALID_CONVERSION_ACTION_TYPE"
          ]
        },
        "conversionCustomVariableError": {
          "description": "The reasons for the conversion custom variable error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A conversion custom variable with the specified name already exists.",
            "A conversion custom variable with the specified tag already exists.",
            "A conversion custom variable with the specified tag is reserved for other uses."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_NAME",
            "DUPLICATE_TAG",
            "RESERVED_TAG"
          ]
        },
        "conversionUploadError": {
          "description": "The reasons for the conversion upload error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "Used for return value only. Represents value unknown in this version.",
            "Upload fewer than 2001 events in a single request.",
            "The imported gclid could not be decoded.",
            "The imported event has a `conversion_date_time` that precedes the click. Make sure your `conversion_date_time` is correct and try again.",
            "The imported event can't be recorded because its click occurred before this conversion's click-through window. Make sure you import the most recent data.",
            "The click associated with the given identifier or iOS URL parameter occurred less than 6 hours ago. Retry after 6 hours have passed.",
            "The imported event could not be attributed to a click. This may be because the event did not come from a Google Ads campaign.",
            "The click ID or call is associated with an Ads account you don't have access to. Make sure you import conversions for accounts managed by your manager account.",
            "Can't import events to a conversion action that was just created. Try importing again in 6 hours.",
            "At the time of the click, conversion tracking was not enabled in the effective conversion account of the click's Google Ads account.",
            "The imported event includes external attribution data, but the conversion action isn't set up to use an external attribution model. Make sure the conversion action is correctly configured and try again.",
            "The conversion action is set up to use an external attribution model, but the imported event is missing data. Make sure imported events include the external attribution credit and all necessary fields.",
            "Order IDs can't be used for a conversion measured with an external attribution model. Make sure the conversion is correctly configured and imported events include only necessary data and try again.",
            "The imported event includes an order ID that was previously recorded, so the event was not processed.",
            "Imported events include multiple conversions with the same order ID and were not processed. Make sure order IDs are unique and try again.",
            "Can't import calls that occurred less than 6 hours ago. Try uploading again in 6 hours.",
            "The call can't be recorded because it occurred before this conversion action's lookback window. Make sure your import is configured to get the most recent data.",
            "The call or click leading to the imported event can't be found. Make sure your data source is set up to include correct identifiers.",
            "The call has a `conversion_date_time` that precedes the associated click. Make sure your `conversion_date_time` is correct.",
            "At the time of the imported call, conversion tracking was not enabled in the effective conversion account of the click's Google Ads account.",
            "Make sure phone numbers are formatted as E.164 (+16502531234), International (+64 3-331 6005), or US national number (6502531234).",
            "The imported event has the same click and `conversion_date_time` as an existing conversion. Use a unique `conversion_date_time` or order ID for each unique event and try again.",
            "The imported call has the same `conversion_date_time` as an existing conversion. Make sure your `conversion_date_time` correctly configured and try again.",
            "Multiple events have the same click and `conversion_date_time`. Make sure your `conversion_date_time` is correctly configured and try again.",
            "Multiple events have the same call and `conversion_date_time`. Make sure your `conversion_date_time` is correctly configured and try again.",
            "Enable the custom variable in your conversion settings and try again.",
            "Can't import events with custom variables containing personally-identifiable information (PII). Remove these variables and try again.",
            "The click from the imported event is associated with a different Google Ads account. Make sure you're importing to the correct account.",
            "The click from the call is associated with a different Google Ads account. Make sure you're importing to the correct account. Query conversion_tracking_setting.google_ads_conversion_customer on Customer to identify the correct account.",
            "The connversion can't be imported because the conversion source didn't comply with Apple App Transparency Tracking (ATT) policies or because the customer didn't consent to tracking.",
            "The email address or phone number for this event can't be matched to a click. This may be because it didn't come from a Google Ads campaign, and you can safely ignore this warning. If this includes more imported events than is expected, you may need to check your setup.",
            "Make sure you hash user provided data using SHA-256 and ensure you are normalizing according to the guidelines.",
            "User provided data can't be used with external attribution models. Use a different attribution model or omit user identifiers and try again.",
            "The provided user identifiers are not supported. Use only hashed email or phone number and try again.",
            "Can't use both gbraid and wbraid parameters. Use only 1 and try again.",
            "Can't parse event import data. Check if your wbraid parameter was not modified and try again.",
            "Can't parse event import data. Check if your gbraid parameter was not modified and try again.",
            "Conversion actions that use one-per-click counting can't be used with gbraid or wbraid parameters.",
            "Enhanced conversions can't be used for this account because of Google customer data policies. Contact your Google representative.",
            "Make sure you agree to the customer data processing terms in conversion settings and try again. You can check your setting by querying conversion_tracking_setting.accepted_customer_data_terms on Customer.",
            "Can't import events with order IDs containing personally-identifiable information (PII).",
            "Make sure you've turned on enhanced conversions for leads in conversion settings and try again. You can check your setting by querying conversion_tracking_setting.enhanced_conversions_for_leads_enabled on Customer.",
            "The provided job id in the request is not within the allowed range. A job ID must be a positive integer in the range [1, 2^31).",
            "The conversion action specified in the upload request cannot be found. Make sure it's available in this account.",
            "The conversion action specified in the upload request isn't set up for uploading conversions."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_MANY_CONVERSIONS_IN_REQUEST",
            "UNPARSEABLE_GCLID",
            "CONVERSION_PRECEDES_EVENT",
            "EXPIRED_EVENT",
            "TOO_RECENT_EVENT",
            "EVENT_NOT_FOUND",
            "UNAUTHORIZED_CUSTOMER",
            "TOO_RECENT_CONVERSION_ACTION",
            "CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME",
            "EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION",
            "ORDER_ID_ALREADY_IN_USE",
            "DUPLICATE_ORDER_ID",
            "TOO_RECENT_CALL",
            "EXPIRED_CALL",
            "CALL_NOT_FOUND",
            "CONVERSION_PRECEDES_CALL",
            "CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME",
            "UNPARSEABLE_CALLERS_PHONE_NUMBER",
            "CLICK_CONVERSION_ALREADY_EXISTS",
            "CALL_CONVERSION_ALREADY_EXISTS",
            "DUPLICATE_CLICK_CONVERSION_IN_REQUEST",
            "DUPLICATE_CALL_CONVERSION_IN_REQUEST",
            "CUSTOM_VARIABLE_NOT_ENABLED",
            "CUSTOM_VARIABLE_VALUE_CONTAINS_PII",
            "INVALID_CUSTOMER_FOR_CLICK",
            "INVALID_CUSTOMER_FOR_CALL",
            "CONVERSION_NOT_COMPLIANT_WITH_ATT_POLICY",
            "CLICK_NOT_FOUND",
            "INVALID_USER_IDENTIFIER",
            "EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION_NOT_PERMITTED_WITH_USER_IDENTIFIER",
            "UNSUPPORTED_USER_IDENTIFIER",
            "GBRAID_WBRAID_BOTH_SET",
            "UNPARSEABLE_WBRAID",
            "UNPARSEABLE_GBRAID",
            "ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID",
            "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCED_CONVERSIONS",
            "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS",
            "ORDER_ID_CONTAINS_PII",
            "CUSTOMER_NOT_ENABLED_ENHANCED_CONVERSIONS_FOR_LEADS",
            "INVALID_JOB_ID",
            "NO_CONVERSION_ACTION_FOUND",
            "INVALID_CONVERSION_ACTION_TYPE"
          ]
        },
        "conversionValueRuleError": {
          "description": "The reasons for the conversion value rule error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The value rule's geo location condition contains invalid geo target constant(s), for example, there's no matching geo target.",
            "The value rule's geo location condition contains conflicting included and excluded geo targets. Specifically, some of the excluded geo target(s) are the same as or contain some of the included geo target(s). For example, the geo location condition includes California but excludes U.S.",
            "User specified conflicting conditions for two value rules in the same value rule set.",
            "The value rule cannot be removed because it's still included in some value rule set.",
            "The value rule contains a condition that's not allowed by the value rule set including this value rule.",
            "The value rule contains a field that should be unset.",
            "Pausing the value rule requires pausing the value rule set because the value rule is (one of) the last enabled in the value rule set.",
            "The value rule's geo location condition contains untargetable geo target constant(s).",
            "The value rule's audience condition contains invalid user list(s). In another word, there's no matching user list.",
            "The value rule's audience condition contains inaccessible user list(s).",
            "The value rule's audience condition contains invalid user_interest(s). This might be because there is no matching user interest, or the user interest is not visible.",
            "When a value rule is created, it shouldn't have REMOVED status.",
            "The value rule's itinerary condition contains invalid travel start day, it contains no day of week."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_GEO_TARGET_CONSTANT",
            "CONFLICTING_INCLUDED_AND_EXCLUDED_GEO_TARGET",
            "CONFLICTING_CONDITIONS",
            "CANNOT_REMOVE_IF_INCLUDED_IN_VALUE_RULE_SET",
            "CONDITION_NOT_ALLOWED",
            "FIELD_MUST_BE_UNSET",
            "CANNOT_PAUSE_UNLESS_VALUE_RULE_SET_IS_PAUSED",
            "UNTARGETABLE_GEO_TARGET",
            "INVALID_AUDIENCE_USER_LIST",
            "INACCESSIBLE_USER_LIST",
            "INVALID_AUDIENCE_USER_INTEREST",
            "CANNOT_ADD_RULE_WITH_STATUS_REMOVED",
            "NO_DAY_OF_WEEK_SELECTED"
          ]
        },
        "conversionValueRuleSetError": {
          "description": "The reasons for the conversion value rule set error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Two value rules in this value rule set contain conflicting conditions.",
            "This value rule set includes a value rule that cannot be found, has been permanently removed or belongs to a different customer.",
            "An error that's thrown when a mutate operation is trying to replace/remove some existing elements in the dimensions field. In other words, ADD op is always fine and UPDATE op is fine if it's only appending new elements into dimensions list.",
            "An error that's thrown when a mutate is adding new value rule(s) into a value rule set and the added value rule(s) include conditions that are not specified in the dimensions of the value rule set.",
            "The dimensions field contains duplicate elements.",
            "This value rule set is attached to an invalid campaign id. Either a campaign with this campaign id doesn't exist or it belongs to a different customer.",
            "When a mutate request tries to pause a value rule set, the enabled value rules in this set must be paused in the same command, or this error will be thrown.",
            "When a mutate request tries to pause all the value rules in a value rule set, the value rule set must be paused, or this error will be thrown.",
            "This value rule set is attached to a campaign that does not support value rules. Currently, campaign level value rule sets can only be created on Search, or Display campaigns.",
            "To add a value rule set that applies on Store Visits/Store Sales conversion action categories, the customer must have valid Store Visits/ Store Sales conversion actions.",
            "If NO_CONDITION is used as a dimension of a value rule set, it must be the only dimension.",
            "Dimension NO_CONDITION can only be used by Store Visits/Store Sales value rule set.",
            "Value rule sets defined on the specified conversion action categories are not supported. The list of conversion action categories must be an empty list, only STORE_VISIT, or only STORE_SALE.",
            "Dimension ITINERARY can only be used on campaigns with an advertising channel type of PERFORMANCE_MAX or HOTEL."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONFLICTING_VALUE_RULE_CONDITIONS",
            "INVALID_VALUE_RULE",
            "DIMENSIONS_UPDATE_ONLY_ALLOW_APPEND",
            "CONDITION_TYPE_NOT_ALLOWED",
            "DUPLICATE_DIMENSIONS",
            "INVALID_CAMPAIGN_ID",
            "CANNOT_PAUSE_UNLESS_ALL_VALUE_RULES_ARE_PAUSED",
            "SHOULD_PAUSE_WHEN_ALL_VALUE_RULES_ARE_PAUSED",
            "VALUE_RULES_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE",
            "INELIGIBLE_CONVERSION_ACTION_CATEGORIES",
            "DIMENSION_NO_CONDITION_USED_WITH_OTHER_DIMENSIONS",
            "DIMENSION_NO_CONDITION_NOT_ALLOWED",
            "UNSUPPORTED_CONVERSION_ACTION_CATEGORIES",
            "DIMENSION_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE"
          ]
        },
        "headerError": {
          "description": "The reasons for the header error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The login customer ID could not be validated.",
            "The linked customer ID could not be validated."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_LOGIN_CUSTOMER_ID",
            "INVALID_LINKED_CUSTOMER_ID"
          ]
        },
        "databaseError": {
          "description": "The reasons for the database error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Multiple requests were attempting to modify the same resource at once. Retry the request.",
            "The request conflicted with existing data. This error will usually be replaced with a more specific error if the request is retried.",
            "The data written is too large. Split the request into smaller requests."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONCURRENT_MODIFICATION",
            "DATA_CONSTRAINT_VIOLATION",
            "REQUEST_TOO_LARGE"
          ]
        },
        "policyFindingError": {
          "description": "The reasons for the policy finding error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The resource has been disapproved since the policy summary includes policy topics of type PROHIBITED.",
            "The given policy topic does not exist."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "POLICY_FINDING",
            "POLICY_TOPIC_NOT_FOUND"
          ]
        },
        "enumError": {
          "description": "The reason for enum error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The enum value is not permitted."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ENUM_VALUE_NOT_PERMITTED"
          ]
        },
        "keywordPlanError": {
          "description": "The reason for keyword plan error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The plan's bid multiplier value is outside the valid range.",
            "The plan's bid value is too high.",
            "The plan's bid value is too low.",
            "The plan's cpc bid is not a multiple of the minimum billable unit.",
            "The plan's daily budget value is too low.",
            "The plan's daily budget is not a multiple of the minimum billable unit.",
            "The input has an invalid value.",
            "The plan has no keyword.",
            "The plan is not enabled and API cannot provide mutation, forecast or stats.",
            "The requested plan cannot be found for providing forecast or stats.",
            "The plan is missing a cpc bid.",
            "The plan is missing required forecast_period field.",
            "The plan's forecast_period has invalid forecast date range.",
            "The plan's name is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BID_MULTIPLIER_OUT_OF_RANGE",
            "BID_TOO_HIGH",
            "BID_TOO_LOW",
            "BID_TOO_MANY_FRACTIONAL_DIGITS",
            "DAILY_BUDGET_TOO_LOW",
            "DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS",
            "INVALID_VALUE",
            "KEYWORD_PLAN_HAS_NO_KEYWORDS",
            "KEYWORD_PLAN_NOT_ENABLED",
            "KEYWORD_PLAN_NOT_FOUND",
            "MISSING_BID",
            "MISSING_FORECAST_PERIOD",
            "INVALID_FORECAST_DATE_RANGE",
            "INVALID_NAME"
          ]
        },
        "keywordPlanCampaignError": {
          "description": "The reason for keyword plan campaign error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A keyword plan campaign name is missing, empty, longer than allowed limit or contains invalid chars.",
            "A keyword plan campaign contains one or more untargetable languages.",
            "A keyword plan campaign contains one or more invalid geo targets.",
            "The keyword plan campaign name is duplicate to an existing keyword plan campaign name or other keyword plan campaign name in the request.",
            "The number of geo targets in the keyword plan campaign exceeds limits.",
            "The number of languages in the keyword plan campaign exceeds limits."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_NAME",
            "INVALID_LANGUAGES",
            "INVALID_GEOS",
            "DUPLICATE_NAME",
            "MAX_GEOS_EXCEEDED",
            "MAX_LANGUAGES_EXCEEDED"
          ]
        },
        "keywordPlanCampaignKeywordError": {
          "description": "The reason for keyword plan campaign keyword error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Keyword plan campaign keyword is positive."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_KEYWORD_IS_POSITIVE"
          ]
        },
        "keywordPlanAdGroupError": {
          "description": "The reason for keyword plan ad group error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The keyword plan ad group name is missing, empty, longer than allowed limit or contains invalid chars.",
            "The keyword plan ad group name is duplicate to an existing keyword plan AdGroup name or other keyword plan AdGroup name in the request."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_NAME",
            "DUPLICATE_NAME"
          ]
        },
        "keywordPlanAdGroupKeywordError": {
          "description": "The reason for keyword plan ad group keyword error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A keyword or negative keyword has invalid match type.",
            "A keyword or negative keyword with same text and match type already exists.",
            "Keyword or negative keyword text exceeds the allowed limit.",
            "Keyword or negative keyword text has invalid characters or symbols.",
            "Keyword or negative keyword text has too many words.",
            "Keyword or negative keyword has invalid text.",
            "Cpc Bid set for negative keyword.",
            "New broad match modifier (BMM) KpAdGroupKeywords are not allowed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_KEYWORD_MATCH_TYPE",
            "DUPLICATE_KEYWORD",
            "KEYWORD_TEXT_TOO_LONG",
            "KEYWORD_HAS_INVALID_CHARS",
            "KEYWORD_HAS_TOO_MANY_WORDS",
            "INVALID_KEYWORD_TEXT",
            "NEGATIVE_KEYWORD_HAS_CPC_BID",
            "NEW_BMM_KEYWORDS_NOT_ALLOWED"
          ]
        },
        "keywordPlanIdeaError": {
          "description": "The reason for keyword idea error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Error when crawling the input URL.",
            "The input has an invalid value."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "URL_CRAWL_ERROR",
            "INVALID_VALUE"
          ]
        },
        "accountBudgetProposalError": {
          "description": "The reasons for account budget proposal errors.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The field mask must be empty for create/end/remove proposals.",
            "The field cannot be set because of the proposal type.",
            "The field is required because of the proposal type.",
            "Proposals that have been approved cannot be cancelled.",
            "Budgets that haven't been approved cannot be removed.",
            "Budgets that are currently running cannot be removed.",
            "Budgets that haven't been approved cannot be truncated.",
            "Only budgets that are currently running can be truncated.",
            "All budgets must have names.",
            "Expired budgets cannot be edited after a sufficient amount of time has passed.",
            "It is not permissible a propose a new budget that ends in the past.",
            "An expired budget cannot be extended to overlap with the running budget.",
            "A purchase order number is required.",
            "Budgets that have a pending update cannot be updated.",
            "Cannot propose more than one budget when the corresponding billing setup hasn't been approved.",
            "Cannot update the start time of a budget that has already started.",
            "Cannot update the spending limit of a budget with an amount lower than what has already been spent.",
            "Cannot propose a budget update without actually changing any fields.",
            "The end time must come after the start time.",
            "The budget's date range must fall within the date range of its billing setup.",
            "The user is not authorized to mutate budgets for the given billing setup.",
            "Mutates are not allowed for the given billing setup.",
            "Budget creation failed as it overlaps with a pending budget proposal or an approved budget.",
            "The control setting in user's payments profile doesn't allow budget creation through API. Log in to Google Ads to create budget.",
            "Master service agreement has not been signed yet for the Payments Profile.",
            "Budget mutates are not allowed because the given billing setup is canceled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FIELD_MASK_NOT_ALLOWED",
            "IMMUTABLE_FIELD",
            "REQUIRED_FIELD_MISSING",
            "CANNOT_CANCEL_APPROVED_PROPOSAL",
            "CANNOT_REMOVE_UNAPPROVED_BUDGET",
            "CANNOT_REMOVE_RUNNING_BUDGET",
            "CANNOT_END_UNAPPROVED_BUDGET",
            "CANNOT_END_INACTIVE_BUDGET",
            "BUDGET_NAME_REQUIRED",
            "CANNOT_UPDATE_OLD_BUDGET",
            "CANNOT_END_IN_PAST",
            "CANNOT_EXTEND_END_TIME",
            "PURCHASE_ORDER_NUMBER_REQUIRED",
            "PENDING_UPDATE_PROPOSAL_EXISTS",
            "MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP",
            "CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET",
            "SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED",
            "UPDATE_IS_NO_OP",
            "END_TIME_MUST_FOLLOW_START_TIME",
            "BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP",
            "NOT_AUTHORIZED",
            "INVALID_BILLING_SETUP",
            "OVERLAPS_EXISTING_BUDGET",
            "CANNOT_CREATE_BUDGET_THROUGH_API",
            "INVALID_MASTER_SERVICE_AGREEMENT",
            "CANCELED_BILLING_SETUP"
          ]
        },
        "userListError": {
          "description": "The reasons for the user list error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Creating and updating external remarketing user lists is not supported.",
            "Concrete type of user list is required.",
            "Creating/updating user list conversion types requires specifying the conversion type Id.",
            "Remarketing user list cannot have duplicate conversion types.",
            "Conversion type is invalid/unknown.",
            "User list description is empty or invalid.",
            "User list name is empty or invalid.",
            "Type of the UserList does not match.",
            "Embedded logical user lists are not allowed.",
            "User list rule operand is invalid.",
            "Name is already being used for another user list for the account.",
            "Name is required when creating a new conversion type.",
            "The given conversion type name has been used.",
            "Only an owner account may edit a user list.",
            "Creating user list without setting type in oneof user_list field, or creating/updating read-only user list types is not allowed.",
            "Rule is invalid.",
            "The specified date range is empty.",
            "A UserList which is privacy sensitive or legal rejected cannot be mutated by external users.",
            "Maximum number of rulebased user lists a customer can have.",
            "BasicUserList's billable record field cannot be modified once it is set.",
            "crm_based_user_list.app_id field must be set when upload_key_type is MOBILE_ADVERTISING_ID.",
            "Name of the user list is reserved for system generated lists and cannot be used.",
            "Advertiser needs to be on the allow-list to use remarketing lists created from advertiser uploaded data (for example, Customer Match lists).",
            "The provided rule_type is not supported for the user list.",
            "Similar user list cannot be used as a logical user list operand.",
            "Logical user list should not have a mix of CRM based user list and other types of lists in its rules.",
            "crm_based_user_list.app_id field can only be set when upload_key_type is MOBILE_ADVERTISING_ID.",
            "Google system generated user lists cannot be mutated.",
            "The mobile app associated with the remarketing list is sensitive.",
            "One or more given seed lists do not exist.",
            "One or more given seed lists are not accessible to the current user.",
            "One or more given seed lists have an unsupported type.",
            "One or more invalid country codes are added to Lookalike UserList."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED",
            "CONCRETE_TYPE_REQUIRED",
            "CONVERSION_TYPE_ID_REQUIRED",
            "DUPLICATE_CONVERSION_TYPES",
            "INVALID_CONVERSION_TYPE",
            "INVALID_DESCRIPTION",
            "INVALID_NAME",
            "INVALID_TYPE",
            "CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND",
            "INVALID_USER_LIST_LOGICAL_RULE_OPERAND",
            "NAME_ALREADY_USED",
            "NEW_CONVERSION_TYPE_NAME_REQUIRED",
            "CONVERSION_TYPE_NAME_ALREADY_USED",
            "OWNERSHIP_REQUIRED_FOR_SET",
            "USER_LIST_MUTATE_NOT_SUPPORTED",
            "INVALID_RULE",
            "INVALID_DATE_RANGE",
            "CAN_NOT_MUTATE_SENSITIVE_USERLIST",
            "MAX_NUM_RULEBASED_USERLISTS",
            "CANNOT_MODIFY_BILLABLE_RECORD_COUNT",
            "APP_ID_NOT_SET",
            "USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST",
            "ADVERTISER_NOT_ON_ALLOWLIST_FOR_USING_UPLOADED_DATA",
            "RULE_TYPE_IS_NOT_SUPPORTED",
            "CAN_NOT_ADD_A_SIMILAR_USERLIST_AS_LOGICAL_LIST_OPERAND",
            "CAN_NOT_MIX_CRM_BASED_IN_LOGICAL_LIST_WITH_OTHER_LISTS",
            "APP_ID_NOT_ALLOWED",
            "CANNOT_MUTATE_SYSTEM_LIST",
            "MOBILE_APP_IS_SENSITIVE",
            "SEED_LIST_DOES_NOT_EXIST",
            "INVALID_SEED_LIST_ACCESS_REASON",
            "INVALID_SEED_LIST_TYPE",
            "INVALID_COUNTRY_CODES"
          ]
        },
        "changeEventError": {
          "description": "The reasons for the change event error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The requested start date is too old. It cannot be older than 30 days.",
            "The change_event search request must specify a finite range filter on change_date_time.",
            "The change event search request has specified invalid date time filters that can never logically produce any valid results (for example, start time after end time).",
            "The change_event search request must specify a LIMIT.",
            "The LIMIT specified by change_event request should be less than or equal to 10K."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "START_DATE_TOO_OLD",
            "CHANGE_DATE_RANGE_INFINITE",
            "CHANGE_DATE_RANGE_NEGATIVE",
            "LIMIT_NOT_SPECIFIED",
            "INVALID_LIMIT_CLAUSE"
          ]
        },
        "changeStatusError": {
          "description": "The reasons for the change status error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The requested start date is too old.",
            "The change_status search request must specify a finite range filter on last_change_date_time.",
            "The change status search request has specified invalid date time filters that can never logically produce any valid results (for example, start time after end time).",
            "The change_status search request must specify a LIMIT.",
            "The LIMIT specified by change_status request should be less than or equal to 10K."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "START_DATE_TOO_OLD",
            "CHANGE_DATE_RANGE_INFINITE",
            "CHANGE_DATE_RANGE_NEGATIVE",
            "LIMIT_NOT_SPECIFIED",
            "INVALID_LIMIT_CLAUSE"
          ]
        },
        "feedError": {
          "description": "The reasons for the feed error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The names of the FeedAttributes must be unique.",
            "The attribute list must be an exact copy of the existing list if the attribute ID's are present.",
            "Cannot specify USER origin for a system generated feed.",
            "Cannot specify GOOGLE origin for a non-system generated feed.",
            "Cannot specify feed attributes for system feed.",
            "Cannot update FeedAttributes on feed with origin GOOGLE.",
            "The given ID refers to a removed Feed. Removed Feeds are immutable.",
            "The origin of the feed is not valid for the client.",
            "A user can only create and modify feeds with USER origin.",
            "Invalid auth token for the given email.",
            "Invalid email specified.",
            "Feed name matches that of another active Feed.",
            "Name of feed is not allowed.",
            "Missing OAuthInfo.",
            "New FeedAttributes must not affect the unique key.",
            "Too many FeedAttributes for a Feed.",
            "The business account is not valid.",
            "Business account cannot access Business Profile.",
            "Invalid chain ID provided for affiliate location feed.",
            "There is already a feed with the given system feed generation data.",
            "An error occurred accessing Business Profile.",
            "A customer cannot have both LOCATION and AFFILIATE_LOCATION feeds.",
            "Feed-based extension is read-only for this extension type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ATTRIBUTE_NAMES_NOT_UNIQUE",
            "ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES",
            "CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED",
            "CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED",
            "CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED",
            "CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE",
            "FEED_REMOVED",
            "INVALID_ORIGIN_VALUE",
            "FEED_ORIGIN_IS_NOT_USER",
            "INVALID_AUTH_TOKEN_FOR_EMAIL",
            "INVALID_EMAIL",
            "DUPLICATE_FEED_NAME",
            "INVALID_FEED_NAME",
            "MISSING_OAUTH_INFO",
            "NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY",
            "TOO_MANY_ATTRIBUTES",
            "INVALID_BUSINESS_ACCOUNT",
            "BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT",
            "INVALID_AFFILIATE_CHAIN_ID",
            "DUPLICATE_SYSTEM_FEED",
            "GMB_ACCESS_ERROR",
            "CANNOT_HAVE_LOCATION_AND_AFFILIATE_LOCATION_FEEDS",
            "LEGACY_EXTENSION_TYPE_READ_ONLY"
          ]
        },
        "geoTargetConstantSuggestionError": {
          "description": "The reasons for the geo target constant suggestion error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A location name cannot be greater than 300 characters.",
            "At most 25 location names can be specified in a SuggestGeoTargetConstants method.",
            "The country code is invalid.",
            "Geo target constant resource names or location names must be provided in the request."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "LOCATION_NAME_SIZE_LIMIT",
            "LOCATION_NAME_LIMIT",
            "INVALID_COUNTRY_CODE",
            "REQUEST_PARAMETERS_UNSET"
          ]
        },
        "campaignDraftError": {
          "description": "The reasons for the campaign draft error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A draft with this name already exists for this campaign.",
            "The draft is removed and cannot be transitioned to another status.",
            "The draft has been promoted and cannot be transitioned to the specified status.",
            "The draft has failed to be promoted and cannot be transitioned to the specified status.",
            "This customer is not allowed to create drafts.",
            "This campaign is not allowed to create drafts.",
            "This modification cannot be made on a draft.",
            "The draft cannot be transitioned to the specified status from its current status.",
            "The campaign has reached the maximum number of drafts that can be created for a campaign throughout its lifetime. No additional drafts can be created for this campaign. Removed drafts also count towards this limit.",
            "ListAsyncErrors was called without first promoting the draft."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_DRAFT_NAME",
            "INVALID_STATUS_TRANSITION_FROM_REMOVED",
            "INVALID_STATUS_TRANSITION_FROM_PROMOTED",
            "INVALID_STATUS_TRANSITION_FROM_PROMOTE_FAILED",
            "CUSTOMER_CANNOT_CREATE_DRAFT",
            "CAMPAIGN_CANNOT_CREATE_DRAFT",
            "INVALID_DRAFT_CHANGE",
            "INVALID_STATUS_TRANSITION",
            "MAX_NUMBER_OF_DRAFTS_PER_CAMPAIGN_REACHED",
            "LIST_ERRORS_FOR_PROMOTED_DRAFT_ONLY"
          ]
        },
        "feedItemError": {
          "description": "The reasons for the feed item error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot convert the feed attribute value from string to its real type.",
            "Cannot operate on removed feed item.",
            "Date time zone does not match the account's time zone.",
            "Feed item with the key attributes could not be found.",
            "Url feed attribute value is not valid.",
            "Some key attributes are missing.",
            "Feed item has same key attributes as another feed item.",
            "Cannot modify key attributes on an existing feed item.",
            "The feed attribute value is too large.",
            "Feed is read only."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING",
            "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
            "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
            "KEY_ATTRIBUTES_NOT_FOUND",
            "INVALID_URL",
            "MISSING_KEY_ATTRIBUTES",
            "KEY_ATTRIBUTES_NOT_UNIQUE",
            "CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE",
            "SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE",
            "LEGACY_FEED_TYPE_READ_ONLY"
          ]
        },
        "labelError": {
          "description": "The reason for the label error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An inactive label cannot be applied.",
            "A label cannot be applied to a disabled ad group criterion.",
            "A label cannot be applied to a negative ad group criterion.",
            "Cannot apply more than 50 labels per resource.",
            "Labels from a manager account cannot be applied to campaign, ad group, ad group ad, or ad group criterion resources.",
            "Label names must be unique.",
            "Label names cannot be empty.",
            "Labels cannot be applied to a draft.",
            "Labels not from a manager account cannot be applied to the customer resource."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_APPLY_INACTIVE_LABEL",
            "CANNOT_APPLY_LABEL_TO_DISABLED_AD_GROUP_CRITERION",
            "CANNOT_APPLY_LABEL_TO_NEGATIVE_AD_GROUP_CRITERION",
            "EXCEEDED_LABEL_LIMIT_PER_TYPE",
            "INVALID_RESOURCE_FOR_MANAGER_LABEL",
            "DUPLICATE_NAME",
            "INVALID_LABEL_NAME",
            "CANNOT_ATTACH_LABEL_TO_DRAFT",
            "CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER"
          ]
        },
        "billingSetupError": {
          "description": "The reasons for the billing setup error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot specify both an existing payments account and a new payments account when setting up billing.",
            "Cannot cancel an approved billing setup whose start time has passed.",
            "Cannot perform a Change of Bill-To (CBT) to the same payments account.",
            "Billing setups can only be used by customers with ENABLED or DRAFT status.",
            "Billing setups must either include a correctly formatted existing payments account id, or a non-empty new payments account name.",
            "Only billable and third-party customers can create billing setups.",
            "Billing setup creations can only use NOW for start time type.",
            "Billing setups can only be created for a third-party customer if they do not already have a setup.",
            "Billing setups cannot be created if there is already a pending billing in progress.",
            "Billing setups can only be created by customers who have permission to setup billings. Users can contact a representative for help setting up permissions.",
            "Billing setups cannot be created if there is already a future-approved billing.",
            "Requested payments profile not found.",
            "Requested payments account not found.",
            "Billing setup creation failed because the payments profile is ineligible.",
            "Billing setup creation failed because the payments account is ineligible.",
            "Billing setup creation failed because the payments profile needs internal approval.",
            "Billing setup creation failed because the user needs to accept master service agreement on the payments profile.",
            "Payments account has different currency code than the current customer and hence cannot be used to setup billing.",
            "A start time in the future cannot be used because there is currently no active billing setup for this customer.",
            "The payments account has maximum number of billing setups."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_USE_EXISTING_AND_NEW_ACCOUNT",
            "CANNOT_REMOVE_STARTED_BILLING_SETUP",
            "CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT",
            "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS",
            "INVALID_PAYMENTS_ACCOUNT",
            "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY",
            "INVALID_START_TIME_TYPE",
            "THIRD_PARTY_ALREADY_HAS_BILLING",
            "BILLING_SETUP_IN_PROGRESS",
            "NO_SIGNUP_PERMISSION",
            "CHANGE_OF_BILL_TO_IN_PROGRESS",
            "PAYMENTS_PROFILE_NOT_FOUND",
            "PAYMENTS_ACCOUNT_NOT_FOUND",
            "PAYMENTS_PROFILE_INELIGIBLE",
            "PAYMENTS_ACCOUNT_INELIGIBLE",
            "CUSTOMER_NEEDS_INTERNAL_APPROVAL",
            "PAYMENTS_PROFILE_NEEDS_SERVICE_AGREEMENT_ACCEPTANCE",
            "PAYMENTS_ACCOUNT_INELIGIBLE_CURRENCY_CODE_MISMATCH",
            "FUTURE_START_TIME_PROHIBITED",
            "TOO_MANY_BILLING_SETUPS_FOR_PAYMENTS_ACCOUNT"
          ]
        },
        "customerClientLinkError": {
          "description": "The reasons for the customer client link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Trying to manage a client that already in being managed by customer.",
            "Already managed by some other manager in the hierarchy.",
            "Attempt to create a cycle in the hierarchy.",
            "Managed accounts has the maximum number of linked accounts.",
            "Invitor has the maximum pending invitations.",
            "Attempt to change hidden status of a link that is not active.",
            "Parent manager account has the maximum number of linked accounts.",
            "Client has too many managers."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CLIENT_ALREADY_INVITED_BY_THIS_MANAGER",
            "CLIENT_ALREADY_MANAGED_IN_HIERARCHY",
            "CYCLIC_LINK_NOT_ALLOWED",
            "CUSTOMER_HAS_TOO_MANY_ACCOUNTS",
            "CLIENT_HAS_TOO_MANY_INVITATIONS",
            "CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS",
            "CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER",
            "CLIENT_HAS_TOO_MANY_MANAGERS"
          ]
        },
        "customerManagerLinkError": {
          "description": "The reasons for the customer manager link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "No pending invitation.",
            "Attempt to operate on the same client more than once in the same call.",
            "Manager account has the maximum number of linked accounts.",
            "If no active user on account it cannot be unlinked from its manager.",
            "Account should have at least one active owner on it before being unlinked.",
            "Only account owners may change their permission role.",
            "When a client's link to its manager is not active, the link role cannot be changed.",
            "Attempt to link a child to a parent that contains or will contain duplicate children.",
            "The authorized customer is a test account. It can add no more than the allowed number of accounts"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_PENDING_INVITE",
            "SAME_CLIENT_MORE_THAN_ONCE_PER_CALL",
            "MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS",
            "CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER",
            "CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER",
            "CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER",
            "CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT",
            "DUPLICATE_CHILD_FOUND",
            "TEST_ACCOUNT_LINKS_TOO_MANY_CHILD_ACCOUNTS"
          ]
        },
        "feedMappingError": {
          "description": "The reasons for the feed mapping error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The given placeholder field does not exist.",
            "The given criterion field does not exist.",
            "The given placeholder type does not exist.",
            "The given criterion type does not exist.",
            "A feed mapping must contain at least one attribute field mapping.",
            "The type of the feed attribute referenced in the attribute field mapping must match the type of the placeholder field.",
            "A feed mapping for a system generated feed cannot be operated on.",
            "Only one feed mapping for a placeholder type is allowed per feed or customer (depending on the placeholder type).",
            "Only one feed mapping for a criterion type is allowed per customer.",
            "Only one feed attribute mapping for a placeholder field is allowed (depending on the placeholder type).",
            "Only one feed attribute mapping for a criterion field is allowed (depending on the criterion type).",
            "This feed mapping may not contain any explicit attribute field mappings.",
            "Location placeholder feed mappings can only be created for Places feeds.",
            "Mappings for typed feeds cannot be modified.",
            "The given placeholder type can only be mapped to system generated feeds.",
            "The given placeholder type cannot be mapped to a system generated feed with the given type.",
            "The \"field\" oneof was not set in an AttributeFieldMapping.",
            "Feed is read only."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_PLACEHOLDER_FIELD",
            "INVALID_CRITERION_FIELD",
            "INVALID_PLACEHOLDER_TYPE",
            "INVALID_CRITERION_TYPE",
            "NO_ATTRIBUTE_FIELD_MAPPINGS",
            "FEED_ATTRIBUTE_TYPE_MISMATCH",
            "CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED",
            "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE",
            "MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE",
            "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD",
            "MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD",
            "UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS",
            "LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS",
            "CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED",
            "INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED",
            "INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE",
            "ATTRIBUTE_FIELD_MAPPING_MISSING_FIELD",
            "LEGACY_FEED_TYPE_READ_ONLY"
          ]
        },
        "customerFeedError": {
          "description": "The reasons for the customer feed error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An active feed already exists for this customer and place holder type.",
            "The specified feed is removed.",
            "The CustomerFeed already exists. Update should be used to modify the existing CustomerFeed.",
            "Cannot update removed customer feed.",
            "Invalid placeholder type.",
            "Feed mapping for this placeholder type does not exist.",
            "Placeholder not allowed at the account level."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "CANNOT_CREATE_FOR_REMOVED_FEED",
            "CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED",
            "CANNOT_MODIFY_REMOVED_CUSTOMER_FEED",
            "INVALID_PLACEHOLDER_TYPE",
            "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
            "PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED"
          ]
        },
        "adGroupFeedError": {
          "description": "The reasons for the ad group feed error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An active feed already exists for this ad group and place holder type.",
            "The specified feed is removed.",
            "The AdGroupFeed already exists. UPDATE operation should be used to modify the existing AdGroupFeed.",
            "Cannot operate on removed AdGroupFeed.",
            "Invalid placeholder type.",
            "Feed mapping for this placeholder type does not exist.",
            "Location AdGroupFeeds cannot be created unless there is a location CustomerFeed for the specified feed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "CANNOT_CREATE_FOR_REMOVED_FEED",
            "ADGROUP_FEED_ALREADY_EXISTS",
            "CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED",
            "INVALID_PLACEHOLDER_TYPE",
            "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
            "NO_EXISTING_LOCATION_CUSTOMER_FEED"
          ]
        },
        "campaignFeedError": {
          "description": "The reasons for the campaign feed error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An active feed already exists for this campaign and placeholder type.",
            "The specified feed is removed.",
            "The CampaignFeed already exists. UPDATE should be used to modify the existing CampaignFeed.",
            "Cannot update removed campaign feed.",
            "Invalid placeholder type.",
            "Feed mapping for this placeholder type does not exist.",
            "Location CampaignFeeds cannot be created unless there is a location CustomerFeed for the specified feed.",
            "Feed is read only."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "CANNOT_CREATE_FOR_REMOVED_FEED",
            "CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED",
            "CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED",
            "INVALID_PLACEHOLDER_TYPE",
            "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE",
            "NO_EXISTING_LOCATION_CUSTOMER_FEED",
            "LEGACY_FEED_TYPE_READ_ONLY"
          ]
        },
        "customInterestError": {
          "description": "The reasons for the custom interest error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Duplicate custom interest name ignoring case.",
            "In the remove custom interest member operation, both member ID and pair [type, parameter] are not present.",
            "The pair of [type, parameter] does not exist.",
            "The pair of [type, parameter] already exists.",
            "Unsupported custom interest member type.",
            "Cannot remove a custom interest while it's still being targeted.",
            "Cannot mutate custom interest type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NAME_ALREADY_USED",
            "CUSTOM_INTEREST_MEMBER_ID_AND_TYPE_PARAMETER_NOT_PRESENT_IN_REMOVE",
            "TYPE_AND_PARAMETER_NOT_FOUND",
            "TYPE_AND_PARAMETER_ALREADY_EXISTED",
            "INVALID_CUSTOM_INTEREST_MEMBER_TYPE",
            "CANNOT_REMOVE_WHILE_IN_USE",
            "CANNOT_CHANGE_TYPE"
          ]
        },
        "campaignExperimentError": {
          "description": "The reasons for the campaign experiment error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An active campaign or experiment with this name already exists.",
            "Experiment cannot be updated from the current state to the requested target state. For example, an experiment can only graduate if its status is ENABLED.",
            "Cannot create an experiment from a campaign using an explicitly shared budget.",
            "Cannot create an experiment for a removed base campaign.",
            "Cannot create an experiment from a draft, which has a status other than proposed.",
            "This customer is not allowed to create an experiment.",
            "This campaign is not allowed to create an experiment.",
            "Trying to set an experiment duration which overlaps with another experiment.",
            "All non-removed experiments must start and end within their campaign's duration.",
            "The experiment cannot be modified because its status is in a terminal state, such as REMOVED."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DUPLICATE_NAME",
            "INVALID_TRANSITION",
            "CANNOT_CREATE_EXPERIMENT_WITH_SHARED_BUDGET",
            "CANNOT_CREATE_EXPERIMENT_FOR_REMOVED_BASE_CAMPAIGN",
            "CANNOT_CREATE_EXPERIMENT_FOR_NON_PROPOSED_DRAFT",
            "CUSTOMER_CANNOT_CREATE_EXPERIMENT",
            "CAMPAIGN_CANNOT_CREATE_EXPERIMENT",
            "EXPERIMENT_DURATIONS_MUST_NOT_OVERLAP",
            "EXPERIMENT_DURATION_MUST_BE_WITHIN_CAMPAIGN_DURATION",
            "CANNOT_MUTATE_EXPERIMENT_DUE_TO_STATUS"
          ]
        },
        "extensionFeedItemError": {
          "description": "The reasons for the extension feed item error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Value is not within the accepted range.",
            "Url list is too long.",
            "Cannot have a geo targeting restriction without having geo targeting.",
            "Cannot simultaneously set sitelink field with final urls.",
            "Must set field with final urls.",
            "Phone number for a call extension is invalid.",
            "Phone number for a call extension is not supported for the given country code.",
            "A carrier specific number in short format is not allowed for call extensions.",
            "Premium rate numbers are not allowed for call extensions.",
            "Phone number type for a call extension is not allowed. For example, personal number is not allowed for a call extension in most regions.",
            "Phone number for a call extension does not meet domestic format requirements.",
            "Vanity phone numbers (for example, those including letters) are not allowed for call extensions.",
            "Call conversion action provided for a call extension is invalid.",
            "For a call extension, the customer is not on the allow-list for call tracking.",
            "Call tracking is not supported for the given country for a call extension.",
            "Customer hasn't consented for call recording, which is required for creating/updating call feed items. See https://support.google.com/google-ads/answer/7412639.",
            "App id provided for an app extension is invalid.",
            "Quotation marks present in the review text for a review extension.",
            "Hyphen character present in the review text for a review extension.",
            "A denylisted review source name or url was provided for a review extension.",
            "Review source name should not be found in the review text.",
            "Inconsistent currency codes.",
            "Price extension cannot have duplicated headers.",
            "Price item cannot have duplicated header and description.",
            "Price extension has too few items.",
            "Price extension has too many items.",
            "The input value is not currently supported.",
            "The input value is not currently supported in the selected language of an extension.",
            "Unknown or unsupported device preference.",
            "Invalid feed item schedule end time (for example, endHour = 24 and endMinute != 0).",
            "Date time zone does not match the account's time zone.",
            "Invalid structured snippet header.",
            "Cannot operate on removed feed item.",
            "Phone number not supported when call tracking enabled for country.",
            "Cannot set call_conversion_action while call_conversion_tracking_enabled is set to true.",
            "The type of the input extension feed item doesn't match the existing extension feed item.",
            "The oneof field extension for example, subtype of extension feed item is required.",
            "The referenced feed item is not mapped to a supported extension type.",
            "Cannot operate on a Feed with more than one active FeedMapping.",
            "Cannot operate on a Feed that has key attributes.",
            "Input price is not in a valid format.",
            "The promotion time is invalid.",
            "This field has too many decimal places specified.",
            "Concrete sub type of ExtensionFeedItem is required for this operation.",
            "Feed item schedule end time must be after start time."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VALUE_OUT_OF_RANGE",
            "URL_LIST_TOO_LONG",
            "CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING",
            "CANNOT_SET_WITH_FINAL_URLS",
            "CANNOT_SET_WITHOUT_FINAL_URLS",
            "INVALID_PHONE_NUMBER",
            "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
            "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
            "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
            "DISALLOWED_NUMBER_TYPE",
            "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
            "VANITY_PHONE_NUMBER_NOT_ALLOWED",
            "INVALID_CALL_CONVERSION_ACTION",
            "CUSTOMER_NOT_ON_ALLOWLIST_FOR_CALLTRACKING",
            "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
            "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
            "INVALID_APP_ID",
            "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
            "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
            "REVIEW_EXTENSION_SOURCE_INELIGIBLE",
            "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
            "INCONSISTENT_CURRENCY_CODES",
            "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
            "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
            "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
            "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS",
            "UNSUPPORTED_VALUE",
            "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE",
            "INVALID_DEVICE_PREFERENCE",
            "INVALID_SCHEDULE_END",
            "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
            "INVALID_SNIPPETS_HEADER",
            "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM",
            "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
            "CONFLICTING_CALL_CONVERSION_SETTINGS",
            "EXTENSION_TYPE_MISMATCH",
            "EXTENSION_SUBTYPE_REQUIRED",
            "EXTENSION_TYPE_UNSUPPORTED",
            "CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS",
            "CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES",
            "INVALID_PRICE_FORMAT",
            "PROMOTION_INVALID_TIME",
            "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
            "CONCRETE_EXTENSION_TYPE_REQUIRED",
            "SCHEDULE_END_NOT_AFTER_START"
          ]
        },
        "adParameterError": {
          "description": "The reasons for the ad parameter error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The ad group criterion must be a keyword criterion.",
            "The insertion text is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_GROUP_CRITERION_MUST_BE_KEYWORD",
            "INVALID_INSERTION_TEXT_FORMAT"
          ]
        },
        "feedItemValidationError": {
          "description": "The reasons for the feed item validation error",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents value unknown in this version.",
            "String is too short.",
            "String is too long.",
            "Value is not provided.",
            "Phone number format is invalid for region.",
            "String does not represent a phone number.",
            "Phone number format is not compatible with country code.",
            "Premium rate number is not allowed.",
            "Phone number type is not allowed.",
            "Specified value is outside of the valid range.",
            "Call tracking is not supported in the selected country.",
            "Customer is not on the allow-list for call tracking.",
            "Country code is invalid.",
            "The specified mobile app id is invalid.",
            "Some required field attributes are missing.",
            "Invalid email button type for email extension.",
            "Email address is invalid.",
            "The HTTPS URL in email extension is invalid.",
            "Delivery address is missing from email extension.",
            "FeedItem scheduling start date comes after end date.",
            "FeedItem scheduling start time is missing.",
            "FeedItem scheduling end time is missing.",
            "Cannot compute system attributes on a FeedItem that has no FeedItemId.",
            "Call extension vanity phone numbers are not supported.",
            "Invalid review text.",
            "Invalid format for numeric value in ad parameter.",
            "Invalid format for date value in ad parameter.",
            "Invalid format for price value in ad parameter.",
            "Unrecognized type given for value in ad parameter.",
            "Enhanced sitelinks must have both description lines specified.",
            "Review source is ineligible.",
            "Review text cannot contain hyphens or dashes.",
            "Review text cannot contain double quote characters.",
            "Review text cannot contain quote characters.",
            "Parameters are encoded in the wrong format.",
            "URL parameter name must contain only letters, numbers, underscores, and dashes.",
            "Cannot find address location.",
            "Review extension text has source name.",
            "Some phone numbers can be shorter than usual. Some of these short numbers are carrier-specific, and we disallow those in ad extensions because they will not be available to all users.",
            "Triggered when a request references a placeholder field id that does not exist.",
            "URL contains invalid ValueTrack tags or format.",
            "Provided list exceeds acceptable size.",
            "Certain combinations of attributes aren't allowed to be specified in the same feed item.",
            "An attribute has the same value repeatedly.",
            "Advertisers can link a conversion action with a phone number to indicate that sufficiently long calls forwarded to that phone number should be counted as conversions of the specified type. This is an error message indicating that the conversion action specified is invalid (for example, the conversion action does not exist within the appropriate Google Ads account, or it is a type of conversion not appropriate to phone call conversions).",
            "Tracking template requires final url to be set.",
            "An app id was provided that doesn't exist in the given app store.",
            "Invalid U2 final url.",
            "Invalid U2 tracking url.",
            "Final URL should start from App download URL.",
            "List provided is too short.",
            "User Action field has invalid value.",
            "Type field has invalid value.",
            "Change status for event is invalid.",
            "The header of a structured snippets extension is not one of the valid headers.",
            "Android app link is not formatted correctly",
            "Phone number incompatible with call tracking for country.",
            "The input is identical to a reserved keyword",
            "Each option label in the message extension must be unique.",
            "Each option prefill in the message extension must be unique.",
            "In message extensions, the number of optional labels and optional prefills must be the same.",
            "All currency codes in an ad extension must be the same.",
            "Headers in price extension are not unique.",
            "Header and description in an item are the same.",
            "Price extension has too few items.",
            "The given value is not supported.",
            "Invalid final mobile url.",
            "The given string value of Label contains invalid characters",
            "The given URL contains value track parameters.",
            "The given value is not supported in the selected language of an extension.",
            "The iOS app link is not formatted correctly.",
            "iOS app link or iOS app store id is missing.",
            "Promotion time is invalid.",
            "Both the percent off and money amount off fields are set.",
            "Both the promotion code and orders over amount fields are set.",
            "Too many decimal places are specified.",
            "Ad Customizers are present and not allowed.",
            "Language code is not valid.",
            "Language is not supported.",
            "IF Function is present and not allowed.",
            "Final url suffix is not valid.",
            "Final url suffix contains an invalid tag.",
            "Final url suffix is formatted incorrectly.",
            "Consent for call recording, which is required for the use of call extensions, was not provided by the advertiser. See https://support.google.com/google-ads/answer/7412639.",
            "Multiple message delivery options are set.",
            "No message delivery option is set.",
            "String value of conversion reporting state field is not valid.",
            "Image size is not right.",
            "Email delivery is not supported in the country specified in the country code field.",
            "Auto reply is not supported in the country specified in the country code field.",
            "Invalid value specified for latitude.",
            "Invalid value specified for longitude.",
            "Too many label fields provided.",
            "Invalid image url.",
            "Latitude value is missing.",
            "Longitude value is missing.",
            "Unable to find address.",
            "Cannot target provided address.",
            "The specified asset ID does not exist.",
            "The asset type cannot be set for the field.",
            "The image has unexpected size.",
            "The image aspect ratio is not allowed.",
            "The image file is too large.",
            "The image format is unsupported.",
            "Image violates constraints without more details.",
            "An error occurred when validating image."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "STRING_TOO_SHORT",
            "STRING_TOO_LONG",
            "VALUE_NOT_SPECIFIED",
            "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
            "INVALID_PHONE_NUMBER",
            "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
            "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
            "DISALLOWED_NUMBER_TYPE",
            "VALUE_OUT_OF_RANGE",
            "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
            "CUSTOMER_NOT_IN_ALLOWLIST_FOR_CALLTRACKING",
            "INVALID_COUNTRY_CODE",
            "INVALID_APP_ID",
            "MISSING_ATTRIBUTES_FOR_FIELDS",
            "INVALID_TYPE_ID",
            "INVALID_EMAIL_ADDRESS",
            "INVALID_HTTPS_URL",
            "MISSING_DELIVERY_ADDRESS",
            "START_DATE_AFTER_END_DATE",
            "MISSING_FEED_ITEM_START_TIME",
            "MISSING_FEED_ITEM_END_TIME",
            "MISSING_FEED_ITEM_ID",
            "VANITY_PHONE_NUMBER_NOT_ALLOWED",
            "INVALID_REVIEW_EXTENSION_SNIPPET",
            "INVALID_NUMBER_FORMAT",
            "INVALID_DATE_FORMAT",
            "INVALID_PRICE_FORMAT",
            "UNKNOWN_PLACEHOLDER_FIELD",
            "MISSING_ENHANCED_SITELINK_DESCRIPTION_LINE",
            "REVIEW_EXTENSION_SOURCE_INELIGIBLE",
            "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
            "DOUBLE_QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
            "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
            "INVALID_FORM_ENCODED_PARAMS",
            "INVALID_URL_PARAMETER_NAME",
            "NO_GEOCODING_RESULT",
            "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
            "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
            "INVALID_PLACEHOLDER_FIELD_ID",
            "INVALID_URL_TAG",
            "LIST_TOO_LONG",
            "INVALID_ATTRIBUTES_COMBINATION",
            "DUPLICATE_VALUES",
            "INVALID_CALL_CONVERSION_ACTION_ID",
            "CANNOT_SET_WITHOUT_FINAL_URLS",
            "APP_ID_DOESNT_EXIST_IN_APP_STORE",
            "INVALID_FINAL_URL",
            "INVALID_TRACKING_URL",
            "INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL",
            "LIST_TOO_SHORT",
            "INVALID_USER_ACTION",
            "INVALID_TYPE_NAME",
            "INVALID_EVENT_CHANGE_STATUS",
            "INVALID_SNIPPETS_HEADER",
            "INVALID_ANDROID_APP_LINK",
            "NUMBER_TYPE_WITH_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
            "RESERVED_KEYWORD_OTHER",
            "DUPLICATE_OPTION_LABELS",
            "DUPLICATE_OPTION_PREFILLS",
            "UNEQUAL_LIST_LENGTHS",
            "INCONSISTENT_CURRENCY_CODES",
            "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
            "ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
            "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
            "UNSUPPORTED_VALUE",
            "INVALID_FINAL_MOBILE_URL",
            "INVALID_KEYWORDLESS_AD_RULE_LABEL",
            "VALUE_TRACK_PARAMETER_NOT_SUPPORTED",
            "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE",
            "INVALID_IOS_APP_LINK",
            "MISSING_IOS_APP_LINK_OR_IOS_APP_STORE_ID",
            "PROMOTION_INVALID_TIME",
            "PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF",
            "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT",
            "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
            "AD_CUSTOMIZERS_NOT_ALLOWED",
            "INVALID_LANGUAGE_CODE",
            "UNSUPPORTED_LANGUAGE",
            "IF_FUNCTION_NOT_ALLOWED",
            "INVALID_FINAL_URL_SUFFIX",
            "INVALID_TAG_IN_FINAL_URL_SUFFIX",
            "INVALID_FINAL_URL_SUFFIX_FORMAT",
            "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
            "ONLY_ONE_DELIVERY_OPTION_IS_ALLOWED",
            "NO_DELIVERY_OPTION_IS_SET",
            "INVALID_CONVERSION_REPORTING_STATE",
            "IMAGE_SIZE_WRONG",
            "EMAIL_DELIVERY_NOT_AVAILABLE_IN_COUNTRY",
            "AUTO_REPLY_NOT_AVAILABLE_IN_COUNTRY",
            "INVALID_LATITUDE_VALUE",
            "INVALID_LONGITUDE_VALUE",
            "TOO_MANY_LABELS",
            "INVALID_IMAGE_URL",
            "MISSING_LATITUDE_VALUE",
            "MISSING_LONGITUDE_VALUE",
            "ADDRESS_NOT_FOUND",
            "ADDRESS_NOT_TARGETABLE",
            "INVALID_ASSET_ID",
            "INCOMPATIBLE_ASSET_TYPE",
            "IMAGE_ERROR_UNEXPECTED_SIZE",
            "IMAGE_ERROR_ASPECT_RATIO_NOT_ALLOWED",
            "IMAGE_ERROR_FILE_TOO_LARGE",
            "IMAGE_ERROR_FORMAT_NOT_ALLOWED",
            "IMAGE_ERROR_CONSTRAINTS_VIOLATED",
            "IMAGE_ERROR_SERVER_ERROR"
          ]
        },
        "extensionSettingError": {
          "description": "The reasons for the extension setting error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A platform restriction was provided without input extensions or existing extensions.",
            "The provided feed type does not correspond to the provided extensions.",
            "The provided feed type cannot be used.",
            "The provided feed type cannot be used at the customer level.",
            "Cannot change a feed item field on a CREATE operation.",
            "Cannot update an extension that is not already in this setting.",
            "There is no existing AdGroupExtensionSetting for this type.",
            "There is no existing CampaignExtensionSetting for this type.",
            "There is no existing CustomerExtensionSetting for this type.",
            "The AdGroupExtensionSetting already exists. UPDATE should be used to modify the existing AdGroupExtensionSetting.",
            "The CampaignExtensionSetting already exists. UPDATE should be used to modify the existing CampaignExtensionSetting.",
            "The CustomerExtensionSetting already exists. UPDATE should be used to modify the existing CustomerExtensionSetting.",
            "An active ad group feed already exists for this place holder type.",
            "An active campaign feed already exists for this place holder type.",
            "An active customer feed already exists for this place holder type.",
            "Value is not within the accepted range.",
            "Cannot simultaneously set specified field with final urls.",
            "Must set field with final urls.",
            "Phone number for a call extension is invalid.",
            "Phone number for a call extension is not supported for the given country code.",
            "A carrier specific number in short format is not allowed for call extensions.",
            "Premium rate numbers are not allowed for call extensions.",
            "Phone number type for a call extension is not allowed.",
            "Phone number for a call extension does not meet domestic format requirements.",
            "Vanity phone numbers (for example, those including letters) are not allowed for call extensions.",
            "Country code provided for a call extension is invalid.",
            "Call conversion type id provided for a call extension is invalid.",
            "For a call extension, the customer is not on the allow-list for call tracking.",
            "Call tracking is not supported for the given country for a call extension.",
            "App id provided for an app extension is invalid.",
            "Quotation marks present in the review text for a review extension.",
            "Hyphen character present in the review text for a review extension.",
            "A blocked review source name or url was provided for a review extension.",
            "Review source name should not be found in the review text.",
            "Field must be set.",
            "Inconsistent currency codes.",
            "Price extension cannot have duplicated headers.",
            "Price item cannot have duplicated header and description.",
            "Price extension has too few items",
            "Price extension has too many items",
            "The input value is not currently supported.",
            "Unknown or unsupported device preference.",
            "Invalid feed item schedule end time (for example, endHour = 24 and endMinute != 0).",
            "Date time zone does not match the account's time zone.",
            "Overlapping feed item schedule times (for example, 7-10AM and 8-11AM) are not allowed.",
            "Feed item schedule end time must be after start time.",
            "There are too many feed item schedules per day.",
            "Cannot edit the same extension feed item more than once in the same request.",
            "Invalid structured snippet header.",
            "Phone number with call tracking enabled is not supported for the specified country.",
            "The targeted adgroup must belong to the targeted campaign.",
            "The feed used by the ExtensionSetting is removed and cannot be operated on. Remove the ExtensionSetting to allow a new one to be created using an active feed.",
            "The ExtensionFeedItem type is required for this operation.",
            "The matching function that links the extension feed to the customer, campaign, or ad group is not compatible with the ExtensionSetting services.",
            "Start date must be before end date.",
            "Input price is not in a valid format.",
            "The promotion time is invalid.",
            "Cannot set both percent discount and money discount fields.",
            "Cannot set both promotion code and orders over amount fields.",
            "This field has too many decimal places specified.",
            "The language code is not valid.",
            "The language is not supported.",
            "Customer hasn't consented for call recording, which is required for adding/updating call extensions. See https://support.google.com/google-ads/answer/7412639.",
            "The UPDATE operation does not specify any fields other than the resource name in the update mask.",
            "The extension contains text which has been prohibited on policy grounds."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXTENSIONS_REQUIRED",
            "FEED_TYPE_EXTENSION_TYPE_MISMATCH",
            "INVALID_FEED_TYPE",
            "INVALID_FEED_TYPE_FOR_CUSTOMER_EXTENSION_SETTING",
            "CANNOT_CHANGE_FEED_ITEM_ON_CREATE",
            "CANNOT_UPDATE_NEWLY_CREATED_EXTENSION",
            "NO_EXISTING_AD_GROUP_EXTENSION_SETTING_FOR_TYPE",
            "NO_EXISTING_CAMPAIGN_EXTENSION_SETTING_FOR_TYPE",
            "NO_EXISTING_CUSTOMER_EXTENSION_SETTING_FOR_TYPE",
            "AD_GROUP_EXTENSION_SETTING_ALREADY_EXISTS",
            "CAMPAIGN_EXTENSION_SETTING_ALREADY_EXISTS",
            "CUSTOMER_EXTENSION_SETTING_ALREADY_EXISTS",
            "AD_GROUP_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "CAMPAIGN_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "CUSTOMER_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE",
            "VALUE_OUT_OF_RANGE",
            "CANNOT_SET_FIELD_WITH_FINAL_URLS",
            "FINAL_URLS_NOT_SET",
            "INVALID_PHONE_NUMBER",
            "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY",
            "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED",
            "PREMIUM_RATE_NUMBER_NOT_ALLOWED",
            "DISALLOWED_NUMBER_TYPE",
            "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT",
            "VANITY_PHONE_NUMBER_NOT_ALLOWED",
            "INVALID_COUNTRY_CODE",
            "INVALID_CALL_CONVERSION_TYPE_ID",
            "CUSTOMER_NOT_IN_ALLOWLIST_FOR_CALLTRACKING",
            "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY",
            "INVALID_APP_ID",
            "QUOTES_IN_REVIEW_EXTENSION_SNIPPET",
            "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET",
            "REVIEW_EXTENSION_SOURCE_NOT_ELIGIBLE",
            "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT",
            "MISSING_FIELD",
            "INCONSISTENT_CURRENCY_CODES",
            "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS",
            "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION",
            "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS",
            "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS",
            "UNSUPPORTED_VALUE",
            "INVALID_DEVICE_PREFERENCE",
            "INVALID_SCHEDULE_END",
            "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE",
            "OVERLAPPING_SCHEDULES_NOT_ALLOWED",
            "SCHEDULE_END_NOT_AFTER_START",
            "TOO_MANY_SCHEDULES_PER_DAY",
            "DUPLICATE_EXTENSION_FEED_ITEM_EDIT",
            "INVALID_SNIPPETS_HEADER",
            "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY",
            "CAMPAIGN_TARGETING_MISMATCH",
            "CANNOT_OPERATE_ON_REMOVED_FEED",
            "EXTENSION_TYPE_REQUIRED",
            "INCOMPATIBLE_UNDERLYING_MATCHING_FUNCTION",
            "START_DATE_AFTER_END_DATE",
            "INVALID_PRICE_FORMAT",
            "PROMOTION_INVALID_TIME",
            "PROMOTION_CANNOT_SET_PERCENT_DISCOUNT_AND_MONEY_DISCOUNT",
            "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT",
            "TOO_MANY_DECIMAL_PLACES_SPECIFIED",
            "INVALID_LANGUAGE_CODE",
            "UNSUPPORTED_LANGUAGE",
            "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED",
            "EXTENSION_SETTING_UPDATE_IS_A_NOOP",
            "DISALLOWED_TEXT"
          ]
        },
        "feedItemSetError": {
          "description": "The reasons for the feed item set error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The given ID refers to a removed FeedItemSet.",
            "The dynamic filter of a feed item set cannot be cleared on UPDATE if it exists. A set is either static or dynamic once added, and that cannot change.",
            "The dynamic filter of a feed item set cannot be created on UPDATE if it does not exist. A set is either static or dynamic once added, and that cannot change.",
            "FeedItemSets can only be made for location or affiliate location feeds.",
            "FeedItemSets duplicate name. Name should be unique within an account.",
            "The feed type of the parent Feed is not compatible with the type of dynamic filter being set. For example, you can only set dynamic_location_set_filter for LOCATION feed item sets.",
            "Chain ID specified for AffiliateLocationFeedData is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FEED_ITEM_SET_REMOVED",
            "CANNOT_CLEAR_DYNAMIC_FILTER",
            "CANNOT_CREATE_DYNAMIC_FILTER",
            "INVALID_FEED_TYPE",
            "DUPLICATE_NAME",
            "WRONG_DYNAMIC_FILTER_FOR_FEED_TYPE",
            "DYNAMIC_FILTER_INVALID_CHAIN_IDS"
          ]
        },
        "feedItemSetLinkError": {
          "description": "The reasons for the feed item set link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The feed IDs of the FeedItemSet and FeedItem do not match. Only FeedItems in a given Feed can be linked to a FeedItemSet in that Feed.",
            "Cannot add or remove links to a dynamic set."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FEED_ID_MISMATCH",
            "NO_MUTATE_ALLOWED_FOR_DYNAMIC_SET"
          ]
        },
        "feedItemTargetError": {
          "description": "The reasons for the feed item target error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "On CREATE, the FeedItemTarget must have a populated field in the oneof target.",
            "The specified feed item target already exists, so it cannot be added.",
            "The schedules for a given feed item cannot overlap.",
            "Too many targets of a given type were added for a single feed item.",
            "Too many AdSchedules are enabled for the feed item for the given day.",
            "A feed item may either have an enabled campaign target or an enabled ad group target.",
            "Duplicate ad schedules aren't allowed.",
            "Duplicate keywords aren't allowed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MUST_SET_TARGET_ONEOF_ON_CREATE",
            "FEED_ITEM_TARGET_ALREADY_EXISTS",
            "FEED_ITEM_SCHEDULES_CANNOT_OVERLAP",
            "TARGET_LIMIT_EXCEEDED_FOR_GIVEN_TYPE",
            "TOO_MANY_SCHEDULES_PER_DAY",
            "CANNOT_HAVE_ENABLED_CAMPAIGN_AND_ENABLED_AD_GROUP_TARGETS",
            "DUPLICATE_AD_SCHEDULE",
            "DUPLICATE_KEYWORD"
          ]
        },
        "policyViolationError": {
          "description": "The reasons for the policy violation error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A policy was violated. See PolicyViolationDetails for more detail."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "POLICY_ERROR"
          ]
        },
        "partialFailureError": {
          "description": "The reasons for the mutate job error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The partial failure field was false in the request. This method requires this field be set to true."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PARTIAL_FAILURE_MODE_REQUIRED"
          ]
        },
        "clickViewError": {
          "description": "The reasons for the click view error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Missing filter on a single day.",
            "The requested date is too old."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXPECTED_FILTER_ON_A_SINGLE_DAY",
            "DATE_TOO_OLD"
          ]
        },
        "policyValidationParameterError": {
          "description": "The reasons for the policy validation parameter error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Ignorable policy topics are not supported for the ad type.",
            "Exempt policy violation keys are not supported for the ad type.",
            "Cannot set ignorable policy topics and exempt policy violation keys in the same policy violation parameter."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNSUPPORTED_AD_TYPE_FOR_IGNORABLE_POLICY_TOPICS",
            "UNSUPPORTED_AD_TYPE_FOR_EXEMPT_POLICY_VIOLATION_KEYS",
            "CANNOT_SET_BOTH_IGNORABLE_POLICY_TOPICS_AND_EXEMPT_POLICY_VIOLATION_KEYS"
          ]
        },
        "sizeLimitError": {
          "description": "The reasons for the size limit error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The number of entries in the request exceeds the system limit, or the contents of the operations exceed transaction limits due to their size or complexity. Try reducing the number of entries per request.",
            "The number of entries in the response exceeds the system limit."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "REQUEST_SIZE_LIMIT_EXCEEDED",
            "RESPONSE_SIZE_LIMIT_EXCEEDED"
          ]
        },
        "offlineUserDataJobError": {
          "description": "The reasons for the offline user data job error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The user list ID provided for the job is invalid.",
            "Type of the user list is not applicable for the job.",
            "Customer is not allowisted for using user ID in upload data.",
            "Upload data is not compatible with the upload key type of the associated user list.",
            "The user identifier is missing valid data.",
            "The mobile ID is malformed.",
            "Maximum number of user identifiers allowed per request is 100,000 and per operation is 20.",
            "Customer is not on the allow-list for store sales direct data.",
            "Customer is not on the allow-list for unified store sales data.",
            "The partner ID in store sales direct metadata is invalid.",
            "The data in user identifier should not be encoded.",
            "The country code is invalid.",
            "Incompatible user identifier when using third_party_user_id for store sales direct first party data or not using third_party_user_id for store sales third party data.",
            "A transaction time in the future is not allowed.",
            "The conversion_action specified in transaction_attributes is used to report conversions to a conversion action configured in Google Ads. This error indicates there is no such conversion action in the account.",
            "Mobile ID is not supported for store sales direct data.",
            "When a remove-all operation is provided, it has to be the first operation of the operation list.",
            "Mixing creation and removal of offline data in the same job is not allowed.",
            "The external update ID already exists.",
            "Once the upload job is started, new operations cannot be added.",
            "Remove operation is not allowed for store sales direct updates.",
            "Remove-all is not supported for certain offline user data job types.",
            "The SHA256 encoded value is malformed.",
            "The custom key specified is not enabled for the unified store sales upload.",
            "The custom key specified is not predefined through the Google Ads UI.",
            "The custom key specified is not set in the upload.",
            "The customer has not accepted the customer data terms in the conversion settings page.",
            "User attributes cannot be uploaded into a user list.",
            "Lifetime bucket value must be a number from 0 to 10; 0 is only accepted for remove operations",
            "Identifiers not supported for Customer Match attributes. User attributes can only be provided with contact info (email, phone, address) user identifiers.",
            "A time in the future is not allowed.",
            "Last purchase date time cannot be less than acquisition date time.",
            "Only emails are accepted as user identifiers for shopping loyalty match. {-- api.dev/not-precedent: The identifier is not limited to ids, but also include other user info eg. phone numbers.}",
            "Provided item ID is invalid.",
            "First purchase date time cannot be greater than the last purchase date time.",
            "Provided lifecycle stage is invalid.",
            "The event value of the Customer Match user attribute is invalid.",
            "All the fields are not present in the EventAttribute of the Customer Match.",
            "Consent was provided at the operation level for an OfflineUserDataJobType that expects it at the job level. The provided operation-level consent will be ignored."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_USER_LIST_ID",
            "INVALID_USER_LIST_TYPE",
            "NOT_ON_ALLOWLIST_FOR_USER_ID",
            "INCOMPATIBLE_UPLOAD_KEY_TYPE",
            "MISSING_USER_IDENTIFIER",
            "INVALID_MOBILE_ID_FORMAT",
            "TOO_MANY_USER_IDENTIFIERS",
            "NOT_ON_ALLOWLIST_FOR_STORE_SALES_DIRECT",
            "NOT_ON_ALLOWLIST_FOR_UNIFIED_STORE_SALES",
            "INVALID_PARTNER_ID",
            "INVALID_ENCODING",
            "INVALID_COUNTRY_CODE",
            "INCOMPATIBLE_USER_IDENTIFIER",
            "FUTURE_TRANSACTION_TIME",
            "INVALID_CONVERSION_ACTION",
            "MOBILE_ID_NOT_SUPPORTED",
            "INVALID_OPERATION_ORDER",
            "CONFLICTING_OPERATION",
            "EXTERNAL_UPDATE_ID_ALREADY_EXISTS",
            "JOB_ALREADY_STARTED",
            "REMOVE_NOT_SUPPORTED",
            "REMOVE_ALL_NOT_SUPPORTED",
            "INVALID_SHA256_FORMAT",
            "CUSTOM_KEY_DISABLED",
            "CUSTOM_KEY_NOT_PREDEFINED",
            "CUSTOM_KEY_NOT_SET",
            "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS",
            "ATTRIBUTES_NOT_APPLICABLE_FOR_CUSTOMER_MATCH_USER_LIST",
            "LIFETIME_VALUE_BUCKET_NOT_IN_RANGE",
            "INCOMPATIBLE_USER_IDENTIFIER_FOR_ATTRIBUTES",
            "FUTURE_TIME_NOT_ALLOWED",
            "LAST_PURCHASE_TIME_LESS_THAN_ACQUISITION_TIME",
            "CUSTOMER_IDENTIFIER_NOT_ALLOWED",
            "INVALID_ITEM_ID",
            "FIRST_PURCHASE_TIME_GREATER_THAN_LAST_PURCHASE_TIME",
            "INVALID_LIFECYCLE_STAGE",
            "INVALID_EVENT_VALUE",
            "EVENT_ATTRIBUTE_ALL_FIELDS_ARE_REQUIRED",
            "OPERATION_LEVEL_CONSENT_PROVIDED"
          ]
        },
        "notAllowlistedError": {
          "description": "The reasons for the not allowlisted error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Customer is not allowlisted for accessing this feature."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE"
          ]
        },
        "managerLinkError": {
          "description": "The reasons for the manager link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The manager and client have incompatible account types.",
            "Client is already linked to too many managers.",
            "Manager has too many pending invitations.",
            "Client is already invited by this manager.",
            "The client is already managed by this manager.",
            "Client is already managed in hierarchy.",
            "Manager and sub-manager to be linked have duplicate client.",
            "Client has no active user that can access the client account.",
            "Adding this link would exceed the maximum hierarchy depth.",
            "Adding this link will create a cycle.",
            "Manager account has the maximum number of linked clients.",
            "Parent manager account has the maximum number of linked clients.",
            "The account is not authorized owner.",
            "Your manager account is suspended, and you are no longer allowed to link to clients.",
            "You are not allowed to move a client to a manager that is not under your current hierarchy.",
            "The changed status for mutate link is invalid.",
            "The change for mutate link is invalid.",
            "You are not allowed to link a manager account to itself.",
            "The link was created with status ACTIVE and not PENDING."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCOUNTS_NOT_COMPATIBLE_FOR_LINKING",
            "TOO_MANY_MANAGERS",
            "TOO_MANY_INVITES",
            "ALREADY_INVITED_BY_THIS_MANAGER",
            "ALREADY_MANAGED_BY_THIS_MANAGER",
            "ALREADY_MANAGED_IN_HIERARCHY",
            "DUPLICATE_CHILD_FOUND",
            "CLIENT_HAS_NO_ADMIN_USER",
            "MAX_DEPTH_EXCEEDED",
            "CYCLE_NOT_ALLOWED",
            "TOO_MANY_ACCOUNTS",
            "TOO_MANY_ACCOUNTS_AT_MANAGER",
            "NON_OWNER_USER_CANNOT_MODIFY_LINK",
            "SUSPENDED_ACCOUNT_CANNOT_ADD_CLIENTS",
            "CLIENT_OUTSIDE_TREE",
            "INVALID_STATUS_CHANGE",
            "INVALID_CHANGE",
            "CUSTOMER_CANNOT_MANAGE_SELF",
            "CREATING_ENABLED_LINK_NOT_ALLOWED"
          ]
        },
        "currencyCodeError": {
          "description": "The reasons for the currency code error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The currency code is not supported."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "UNSUPPORTED"
          ]
        },
        "experimentError": {
          "description": "The reasons for the experiment error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The start date of an experiment cannot be set in the past. Use a start date in the future.",
            "The end date of an experiment is before its start date. Use an end date after the start date.",
            "The start date of an experiment is too far in the future. Use a start date no more than 1 year in the future.",
            "The experiment has the same name as an existing active experiment.",
            "Experiments can only be modified when they are ENABLED.",
            "The start date of an experiment cannot be modified if the existing start date has already passed.",
            "The end date of an experiment cannot be set in the past.",
            "The status of an experiment cannot be set to REMOVED.",
            "The end date of an expired experiment cannot be modified.",
            "The status is invalid.",
            "Experiment arm contains campaigns with invalid advertising channel type.",
            "A pair of trials share members and have overlapping date ranges.",
            "Experiment arm contains invalid traffic split.",
            "Experiment contains trial arms with overlapping traffic split.",
            "The total traffic split of trial arms is not equal to 100.",
            "Traffic split related settings (like traffic share bounds) can't be modified after the experiment has started.",
            "The experiment could not be found.",
            "Experiment has not begun.",
            "The experiment cannot have more than one control arm.",
            "The experiment doesn't set in-design campaigns.",
            "Clients must use the graduate action to graduate experiments and cannot set the status to GRADUATED directly.",
            "Cannot use shared budget on base campaign when scheduling an experiment.",
            "Cannot use custom budget on base campaign when scheduling an experiment.",
            "Invalid status transition.",
            "The experiment campaign name conflicts with a pre-existing campaign.",
            "Cannot remove in creation experiments.",
            "Cannot add campaign with deprecated ad types. Deprecated ad types: ENHANCED_DISPLAY, GALLERY, GMAIL, KEYWORDLESS, TEXT.",
            "Sync can only be enabled for supported experiment types. Supported experiment types: SEARCH_CUSTOM, DISPLAY_CUSTOM, DISPLAY_AUTOMATED_BIDDING_STRATEGY, SEARCH_AUTOMATED_BIDDING_STRATEGY.",
            "Experiment length cannot be longer than max length.",
            "The experiment's campaigns must self-declare whether they contain political advertising that targets the European Union."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_SET_START_DATE_IN_PAST",
            "END_DATE_BEFORE_START_DATE",
            "START_DATE_TOO_FAR_IN_FUTURE",
            "DUPLICATE_EXPERIMENT_NAME",
            "CANNOT_MODIFY_REMOVED_EXPERIMENT",
            "START_DATE_ALREADY_PASSED",
            "CANNOT_SET_END_DATE_IN_PAST",
            "CANNOT_SET_STATUS_TO_REMOVED",
            "CANNOT_MODIFY_PAST_END_DATE",
            "INVALID_STATUS",
            "INVALID_CAMPAIGN_CHANNEL_TYPE",
            "OVERLAPPING_MEMBERS_AND_DATE_RANGE",
            "INVALID_TRIAL_ARM_TRAFFIC_SPLIT",
            "TRAFFIC_SPLIT_OVERLAPPING",
            "SUM_TRIAL_ARM_TRAFFIC_UNEQUALS_TO_TRIAL_TRAFFIC_SPLIT_DENOMINATOR",
            "CANNOT_MODIFY_TRAFFIC_SPLIT_AFTER_START",
            "EXPERIMENT_NOT_FOUND",
            "EXPERIMENT_NOT_YET_STARTED",
            "CANNOT_HAVE_MULTIPLE_CONTROL_ARMS",
            "IN_DESIGN_CAMPAIGNS_NOT_SET",
            "CANNOT_SET_STATUS_TO_GRADUATED",
            "CANNOT_CREATE_EXPERIMENT_CAMPAIGN_WITH_SHARED_BUDGET",
            "CANNOT_CREATE_EXPERIMENT_CAMPAIGN_WITH_CUSTOM_BUDGET",
            "STATUS_TRANSITION_INVALID",
            "DUPLICATE_EXPERIMENT_CAMPAIGN_NAME",
            "CANNOT_REMOVE_IN_CREATION_EXPERIMENT",
            "CANNOT_ADD_CAMPAIGN_WITH_DEPRECATED_AD_TYPES",
            "CANNOT_ENABLE_SYNC_FOR_UNSUPPORTED_EXPERIMENT_TYPE",
            "INVALID_DURATION_FOR_AN_EXPERIMENT",
            "MISSING_EU_POLITICAL_ADVERTISING_SELF_DECLARATION"
          ]
        },
        "accessInvitationError": {
          "description": "The reasons for the access invitation error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The email address is invalid for sending an invitation.",
            "Email address already has access to this customer.",
            "Invalid invitation status for the operation.",
            "Email address cannot be like abc+foo@google.com.",
            "Invalid invitation ID.",
            "Email address already has a pending invitation.",
            "Pending invitation limit exceeded for the customer.",
            "Email address doesn't conform to the email domain policy. See https://support.google.com/google-ads/answer/2375456"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_EMAIL_ADDRESS",
            "EMAIL_ADDRESS_ALREADY_HAS_ACCESS",
            "INVALID_INVITATION_STATUS",
            "GOOGLE_CONSUMER_ACCOUNT_NOT_ALLOWED",
            "INVALID_INVITATION_ID",
            "EMAIL_ADDRESS_ALREADY_HAS_PENDING_INVITATION",
            "PENDING_INVITATIONS_LIMIT_EXCEEDED",
            "EMAIL_DOMAIN_POLICY_VIOLATED"
          ]
        },
        "reachPlanError": {
          "description": "The reasons for the reach plan error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Not forecastable due to missing rate card data.",
            "Not forecastable due to not enough inventory.",
            "Not forecastable due to account not being enabled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_FORECASTABLE_MISSING_RATE",
            "NOT_FORECASTABLE_NOT_ENOUGH_INVENTORY",
            "NOT_FORECASTABLE_ACCOUNT_NOT_ENABLED"
          ]
        },
        "invoiceError": {
          "description": "The reasons for the invoice error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot request invoices issued before 2019-01-01.",
            "Cannot request invoices for customer who doesn't receive invoices.",
            "Cannot request invoices for a non approved billing setup.",
            "Cannot request invoices for a billing setup that is not on monthly invoicing.",
            "Cannot request invoices for a non serving customer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "YEAR_MONTH_TOO_OLD",
            "NOT_INVOICED_CUSTOMER",
            "BILLING_SETUP_NOT_APPROVED",
            "BILLING_SETUP_NOT_ON_MONTHLY_INVOICING",
            "NON_SERVING_CUSTOMER"
          ]
        },
        "paymentsAccountError": {
          "description": "The reasons for errors in payments accounts service",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Manager customers are not supported for payments account service."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NOT_SUPPORTED_FOR_MANAGER_CUSTOMER"
          ]
        },
        "timeZoneError": {
          "description": "The reasons for the time zone error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Time zone is not valid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_TIME_ZONE"
          ]
        },
        "assetLinkError": {
          "description": "The reasons for the asset link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Pinning is not supported for the given asset link field.",
            "The given field type is not supported to be added directly through asset links.",
            "The given asset's type and the specified field type are incompatible.",
            "The specified field type is incompatible with the given campaign type.",
            "The campaign advertising channel type cannot be associated with the given asset due to channel-based restrictions on the asset's fields.",
            "The image asset provided is not within the dimension constraints specified for the submitted asset field.",
            "The pinned field is not valid for the submitted asset field.",
            "The media bundle asset provided is too large for the submitted asset field.",
            "Not enough assets are available for use with other fields since other assets are pinned to specific fields.",
            "Not enough assets with fallback are available. When validating the minimum number of assets, assets without fallback (for example, assets that contain location tag without default value \"{LOCATION(City)}\") will not be counted.",
            "This is a combination of the NOT_ENOUGH_AVAILABLE_ASSET_LINKS_FOR_VALID_COMBINATION and NOT_ENOUGH_AVAILABLE_ASSET_LINKS_WITH_FALLBACK errors. Not enough assets with fallback are available since some assets are pinned.",
            "The YouTube video referenced in the provided asset has been removed.",
            "The YouTube video referenced in the provided asset is too long for the field submitted.",
            "The YouTube video referenced in the provided asset is too short for the field submitted.",
            "The specified field type is excluded for given campaign or ad group.",
            "The status is invalid for the operation specified.",
            "The YouTube video referenced in the provided asset has unknown duration. This might be the case for a livestream video or a video being currently uploaded to YouTube. In both cases, the video duration should eventually get resolved.",
            "User cannot create automatically created links.",
            "Advertiser links cannot link to automatically created asset.",
            "Automatically created links cannot be changed into advertiser links or the reverse.",
            "Lead Form asset with Location answer type can't be linked to the Customer/Campaign because there are no Location assets.",
            "Customer is not verified.",
            "Call to action value is not supported.",
            "For Performance Max campaigns where brand_guidelines_enabled is false, business name and logo assets must be linked as AssetGroupAssets.",
            "For Performance Max campaigns where brand_guidelines_enabled is true, business name and logo assets must be linked as CampaignAssets."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "PINNING_UNSUPPORTED",
            "UNSUPPORTED_FIELD_TYPE",
            "FIELD_TYPE_INCOMPATIBLE_WITH_ASSET_TYPE",
            "FIELD_TYPE_INCOMPATIBLE_WITH_CAMPAIGN_TYPE",
            "INCOMPATIBLE_ADVERTISING_CHANNEL_TYPE",
            "IMAGE_NOT_WITHIN_SPECIFIED_DIMENSION_RANGE",
            "INVALID_PINNED_FIELD",
            "MEDIA_BUNDLE_ASSET_FILE_SIZE_TOO_LARGE",
            "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_FOR_VALID_COMBINATION",
            "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_WITH_FALLBACK",
            "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_WITH_FALLBACK_FOR_VALID_COMBINATION",
            "YOUTUBE_VIDEO_REMOVED",
            "YOUTUBE_VIDEO_TOO_LONG",
            "YOUTUBE_VIDEO_TOO_SHORT",
            "EXCLUDED_PARENT_FIELD_TYPE",
            "INVALID_STATUS",
            "YOUTUBE_VIDEO_DURATION_NOT_DEFINED",
            "CANNOT_CREATE_AUTOMATICALLY_CREATED_LINKS",
            "CANNOT_LINK_TO_AUTOMATICALLY_CREATED_ASSET",
            "CANNOT_MODIFY_ASSET_LINK_SOURCE",
            "CANNOT_LINK_LOCATION_LEAD_FORM_WITHOUT_LOCATION_ASSET",
            "CUSTOMER_NOT_VERIFIED",
            "UNSUPPORTED_CALL_TO_ACTION",
            "BRAND_ASSETS_NOT_LINKED_AT_ASSET_GROUP_LEVEL",
            "BRAND_ASSETS_NOT_LINKED_AT_CAMPAIGN_LEVEL"
          ]
        },
        "userDataError": {
          "description": "The reasons for the user data error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Customer is not allowed to perform operations related to Customer Match.",
            "Maximum number of user identifiers allowed for each request is 100 and for each operation is 20.",
            "Current user list is not applicable for the given customer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "OPERATIONS_FOR_CUSTOMER_MATCH_NOT_ALLOWED",
            "TOO_MANY_USER_IDENTIFIERS",
            "USER_LIST_NOT_APPLICABLE"
          ]
        },
        "batchJobError": {
          "description": "The reasons for the batch job error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The batch job cannot add more operations or run after it has started running.",
            "The operations for an AddBatchJobOperations request were empty.",
            "The sequence token for an AddBatchJobOperations request was invalid.",
            "Batch job results can only be retrieved once the job is finished.",
            "The page size for ListBatchJobResults was invalid.",
            "The batch job cannot be removed because it has started running.",
            "The batch job cannot be listed due to unexpected errors such as duplicate checkpoints.",
            "The request contains interdependent AssetGroup and AssetGroupAsset operations that are treated atomically as a single transaction, and one or more of the operations in that transaction failed, which caused the entire transaction, and therefore this mutate operation, to fail. The operations that caused the transaction to fail can be found in the consecutive AssetGroup or AssetGroupAsset results with the same asset group id. The mutate operation will be successful once the remaining errors in the transaction are fixed.",
            "The request contains interdependent AssetGroupListingGroupFilter operations that are treated atomically as a single transaction, and one or more of the operations in that transaction failed, which caused the entire transaction, and therefore this mutate operation, to fail. The operations that caused the transaction to fail can be found in the consecutive AssetGroupListingGroupFilter results with the same asset group id. The mutate operation will be successful once the remaining errors in the transaction are fixed.",
            "The AddBatchJobOperationsRequest is too large. Split the request into smaller requests. The maximum allowed request size is 10484504 bytes.",
            "This error indicates a failed transaction involving interdependent Campaign and CampaignAsset operations that are treated atomically as a single transaction. Because some operations within the transaction failed, the entire set of changes was rejected. Related error details are found in the results for the Campaign and CampaignAssets sharing the same Campaign ID. The transaction will succeed after all associated errors are resolved."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CANNOT_MODIFY_JOB_AFTER_JOB_STARTS_RUNNING",
            "EMPTY_OPERATIONS",
            "INVALID_SEQUENCE_TOKEN",
            "RESULTS_NOT_READY",
            "INVALID_PAGE_SIZE",
            "CAN_ONLY_REMOVE_PENDING_JOB",
            "CANNOT_LIST_RESULTS",
            "ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILURE",
            "ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILURE",
            "REQUEST_TOO_LARGE",
            "CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILURE"
          ]
        },
        "accountLinkError": {
          "description": "The reasons for the account link status change error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The new link status is invalid.",
            "The authenticated user doesn't have the permission to do the change."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_STATUS",
            "PERMISSION_DENIED"
          ]
        },
        "thirdPartyAppAnalyticsLinkError": {
          "description": "The reasons for the third party app analytics link mutate error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The provided analytics provider ID is invalid.",
            "The provided mobile app ID is invalid.",
            "The mobile app corresponding to the provided app ID is not active/enabled.",
            "Regenerating shareable link ID is only allowed on active links"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_ANALYTICS_PROVIDER_ID",
            "INVALID_MOBILE_APP_ID",
            "MOBILE_APP_IS_NOT_ENABLED",
            "CANNOT_REGENERATE_SHAREABLE_LINK_ID_FOR_REMOVED_LINK"
          ]
        },
        "customerUserAccessError": {
          "description": "The reasons for the customer user access mutate error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "There is no user associated with the user id specified.",
            "Unable to remove the access between the user and customer.",
            "Unable to add or update the access role as specified.",
            "The user can't remove itself from an active serving customer if it's the last admin user and the customer doesn't have any owner manager",
            "Last admin user cannot be removed from a manager."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_USER_ID",
            "REMOVAL_DISALLOWED",
            "DISALLOWED_ACCESS_ROLE",
            "LAST_ADMIN_USER_OF_SERVING_CUSTOMER",
            "LAST_ADMIN_USER_OF_MANAGER"
          ]
        },
        "customAudienceError": {
          "description": "The reasons for the custom audience error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "New name in the custom audience is duplicated ignoring cases.",
            "Cannot remove a custom audience while it's still being used as targeting.",
            "Cannot update or remove a custom audience that is already removed.",
            "The pair of [type, value] already exists in members.",
            "Member type is invalid.",
            "Member type does not have associated value.",
            "Custom audience contains a member that violates policy.",
            "Change in custom audience type is not allowed."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NAME_ALREADY_USED",
            "CANNOT_REMOVE_WHILE_IN_USE",
            "RESOURCE_ALREADY_REMOVED",
            "MEMBER_TYPE_AND_PARAMETER_ALREADY_EXISTED",
            "INVALID_MEMBER_TYPE",
            "MEMBER_TYPE_AND_VALUE_DOES_NOT_MATCH",
            "POLICY_VIOLATION",
            "INVALID_TYPE_CHANGE"
          ]
        },
        "audienceError": {
          "description": "The reasons for the audience error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "An audience with this name already exists.",
            "A dimension within the audience definition is not valid.",
            "One of the audience segment added is not found.",
            "One of the audience segment type is not supported.",
            "The same segment already exists in this audience.",
            "Audience can't have more than allowed number segments.",
            "Audience can't have multiple dimensions of same type.",
            "The audience cannot be removed, because it is currently used in an ad group criterion or asset group signal in an (enabled or paused) ad group or campaign.",
            "Asset Group scoped audience requires an asset group ID.",
            "Audience scope may not be changed from Customer to AssetGroup."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NAME_ALREADY_IN_USE",
            "DIMENSION_INVALID",
            "AUDIENCE_SEGMENT_NOT_FOUND",
            "AUDIENCE_SEGMENT_TYPE_NOT_SUPPORTED",
            "DUPLICATE_AUDIENCE_SEGMENT",
            "TOO_MANY_SEGMENTS",
            "TOO_MANY_DIMENSIONS_OF_SAME_TYPE",
            "IN_USE",
            "MISSING_ASSET_GROUP_ID",
            "CANNOT_CHANGE_FROM_CUSTOMER_TO_ASSET_GROUP_SCOPE"
          ]
        },
        "searchTermInsightError": {
          "description": "The reasons for the Search term insight error",
          "type": "string",
          "enumDescriptions": [
            "Name unspecified.",
            "The received error code is not known in this version.",
            "Search term insights cannot be filtered by metrics when segmenting.",
            "Search term insights cannot have a LIMIT when segmenting.",
            "A selected field requires another field to be selected with it.",
            "A selected field/resource requires filtering by a single resource.",
            "Search term insights cannot be sorted when segmenting.",
            "Search term insights cannot have a summary row when segmenting."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "FILTERING_NOT_ALLOWED_WITH_SEGMENTS",
            "LIMIT_NOT_ALLOWED_WITH_SEGMENTS",
            "MISSING_FIELD_IN_SELECT_CLAUSE",
            "REQUIRES_FILTER_BY_SINGLE_RESOURCE",
            "SORTING_NOT_ALLOWED_WITH_SEGMENTS",
            "SUMMARY_ROW_NOT_ALLOWED_WITH_SEGMENTS"
          ]
        },
        "smartCampaignError": {
          "description": "The reasons for the Smart campaign error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The business location id is invalid.",
            "The SmartCampaignSetting resource is only applicable for campaigns with advertising channel type SMART.",
            "The business name or business location id is required.",
            "A Smart campaign suggestion request field is required.",
            "A location list or proximity is required.",
            "The locale could not be determined.",
            "The final URL could not be crawled."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_BUSINESS_LOCATION_ID",
            "INVALID_CAMPAIGN",
            "BUSINESS_NAME_OR_BUSINESS_LOCATION_ID_MISSING",
            "REQUIRED_SUGGESTION_FIELD_MISSING",
            "GEO_TARGETS_REQUIRED",
            "CANNOT_DETERMINE_SUGGESTION_LOCALE",
            "FINAL_URL_NOT_CRAWLABLE"
          ]
        },
        "experimentArmError": {
          "description": "The reasons for the experiment arm error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Number of experiment arms is above limit.",
            "Cannot add campaign with invalid status to the experiment arm.",
            "Cannot add duplicate experiment arm name in one experiment.",
            "Cannot set campaigns of treatment experiment arm.",
            "Cannot edit campaign ids in trial arms in non SETUP experiment.",
            "Cannot modify the campaigns in the control arm if there is not a suffix set in the trial.",
            "Traffic split related settings (like traffic share bounds) can't be modified after the trial has started.",
            "Cannot use shared budget on experiment's control campaign.",
            "Cannot use custom budget on experiment's control campaigns.",
            "Cannot have enable_dynamic_assets turned on in experiment's campaigns.",
            "Cannot use campaign's advertising channel sub type in experiment.",
            "Experiment date range must be within base campaign's date range.",
            "Bidding strategy is not supported in experiments.",
            "Traffic split is not supported for some channel types."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "EXPERIMENT_ARM_COUNT_LIMIT_EXCEEDED",
            "INVALID_CAMPAIGN_STATUS",
            "DUPLICATE_EXPERIMENT_ARM_NAME",
            "CANNOT_SET_TREATMENT_ARM_CAMPAIGN",
            "CANNOT_MODIFY_CAMPAIGN_IDS",
            "CANNOT_MODIFY_CAMPAIGN_WITHOUT_SUFFIX_SET",
            "CANNOT_MUTATE_TRAFFIC_SPLIT_AFTER_START",
            "CANNOT_ADD_CAMPAIGN_WITH_SHARED_BUDGET",
            "CANNOT_ADD_CAMPAIGN_WITH_CUSTOM_BUDGET",
            "CANNOT_ADD_CAMPAIGNS_WITH_DYNAMIC_ASSETS_ENABLED",
            "UNSUPPORTED_CAMPAIGN_ADVERTISING_CHANNEL_SUB_TYPE",
            "CANNOT_ADD_BASE_CAMPAIGN_WITH_DATE_RANGE",
            "BIDDING_STRATEGY_NOT_SUPPORTED_IN_EXPERIMENTS",
            "TRAFFIC_SPLIT_NOT_SUPPORTED_FOR_CHANNEL_TYPE"
          ]
        },
        "audienceInsightsError": {
          "description": "The reasons for the Audience Insights error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The dimensions cannot be used with topic audience combinations."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "DIMENSION_INCOMPATIBLE_WITH_TOPIC_AUDIENCE_COMBINATIONS"
          ]
        },
        "productLinkError": {
          "description": "The reasons for the product link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The requested operation is invalid. For example, you are not allowed to remove a link from a partner account.",
            "The creation request is not permitted.",
            "A link cannot be created because a pending link already exists.",
            "A link cannot be created because an active link already exists."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_OPERATION",
            "CREATION_NOT_PERMITTED",
            "INVITATION_EXISTS",
            "LINK_EXISTS"
          ]
        },
        "dataLinkError": {
          "description": "The reasons for the data link error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The requested YouTube Channel ID is invalid.",
            "The requested YouTube Video ID is invalid.",
            "The requested YouTube Video ID doesn't belong to the requested YouTube Channel ID.",
            "A link cannot be created because the customer doesn't have the permission.",
            "A link can not be removed or updated because the status is invalid.",
            "The input status in the update request is invalid.",
            "The input resource name is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "YOUTUBE_CHANNEL_ID_INVALID",
            "YOUTUBE_VIDEO_ID_INVALID",
            "YOUTUBE_VIDEO_FROM_DIFFERENT_CHANNEL",
            "PERMISSION_DENIED",
            "INVALID_STATUS",
            "INVALID_UPDATE_STATUS",
            "INVALID_RESOURCE_NAME"
          ]
        },
        "customerSkAdNetworkConversionValueSchemaError": {
          "description": "The reasons for the customer SK Ad network conversion value schema error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The customer link ID provided is invalid.",
            "The app ID provided is invalid.",
            "The conversion value schema provided is invalid.",
            "The customer link id provided could not be found.",
            "The SkAdNetwork event counter provided is invalid.",
            "The SkAdNetwork event name provided is invalid."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_LINK_ID",
            "INVALID_APP_ID",
            "INVALID_SCHEMA",
            "LINK_CODE_NOT_FOUND",
            "INVALID_EVENT_COUNTER",
            "INVALID_EVENT_NAME"
          ]
        },
        "currencyError": {
          "description": "The reasons for the currency errors.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Bid must be a multiple of billable unit."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "VALUE_NOT_MULTIPLE_OF_BILLABLE_UNIT"
          ]
        },
        "assetGroupSignalError": {
          "description": "The reasons for the asset group hint error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The number of words in the Search Theme signal exceed the allowed maximum. You can add up to 10 words in a keyword. See https://support.google.com/google-ads/answer/7476658 for details.",
            "The search theme requested to be added violates certain policy. See https://support.google.com/adspolicy/answer/6008942.",
            "The asset group referenced by the asset group signal does not match the asset group referenced by the audience being used in the asset group signal."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_MANY_WORDS",
            "SEARCH_THEME_POLICY_VIOLATION",
            "AUDIENCE_WITH_WRONG_ASSET_GROUP_ID"
          ]
        },
        "productLinkInvitationError": {
          "description": "The reasons for the product link invitation error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in the version.",
            "The invitation status is invalid.",
            "The customer doesn't have the permission to perform this action",
            "An invitation could not be created, since the user already has admin access to the invited account. Use the ProductLinkService to directly create an active link.",
            "The customer is not permitted to create the invitation."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "INVALID_STATUS",
            "PERMISSION_DENIED",
            "NO_INVITATION_REQUIRED",
            "CUSTOMER_NOT_PERMITTED_TO_CREATE_INVITATION"
          ]
        },
        "customerLifecycleGoalError": {
          "description": "The reasons for the customer lifecycle goal error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "CustomerLifecycleGoal.customer_acquisition_goal_value_settings.value must be set.",
            "CustomerLifecycleGoal.customer_acquisition_goal_value_settings.value must be no less than 0.01.",
            "CustomerLifecycleGoal.customer_acquisition_goal_value_settings.high_lifetime_value must be no less than 0.01. Also, to set this field, CustomerLifecycleGoal.customer_acquisition_goal_value_settings.value must also be present, and high_lifetime_value must be greater than value.",
            "CustomerLifecycleGoal.customer_acquisition_goal_value_settings.value cannot be cleared. This value would have no effect as long as none of your campaigns adopt the customer acquisitiong goal.",
            "CustomerLifecycleGoal.customer_acquisition_goal_value_settings.high_lifetime_value cannot be cleared. This value would have no effect as long as none of your campaigns adopt the high value optimization of customer acquisitiong goal.",
            "Found invalid value in CustomerLifecycleGoal.lifecycle_goal_customer_definition_settings.existing_user_lists. The userlist must be accessible, active and belong to one of the following types: CRM_BASED, RULE_BASED, REMARKETING.",
            "Found invalid value in CustomerLifecycleGoal.lifecycle_goal_customer_definition_settings.high_lifetime_value_user_lists. The userlist must be accessible, active and belong to one of the following types: CRM_BASED, RULE_BASED, REMARKETING."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CUSTOMER_ACQUISITION_VALUE_MISSING",
            "CUSTOMER_ACQUISITION_INVALID_VALUE",
            "CUSTOMER_ACQUISITION_INVALID_HIGH_LIFETIME_VALUE",
            "CUSTOMER_ACQUISITION_VALUE_CANNOT_BE_CLEARED",
            "CUSTOMER_ACQUISITION_HIGH_LIFETIME_VALUE_CANNOT_BE_CLEARED",
            "INVALID_EXISTING_USER_LIST",
            "INVALID_HIGH_LIFETIME_VALUE_USER_LIST"
          ]
        },
        "campaignLifecycleGoalError": {
          "description": "The reasons for the campaign lifecycle goal error",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Campaign is not specified.",
            "Cannot find the specified campaign.",
            "Optimization mode is unspecified or invalid.",
            "The configured lifecycle goal setting is not compatible with the bidding strategy the campaign is using. Specifically, BID_HIGHER_FOR_NEW_CUSTOMER requires conversion-value based bidding strategy type such as MAXIMIZE_CONVERSION_VALUE.",
            "Lifecycle goals require the campaign to optimize towards purchase conversion goal.",
            "CampaignLifecycleGoal.customer_acquisition_goal_settings.value_settings.high_lifetime_value is invalid or not allowed, such as when the specified value is smaller than 0.01, when the optimization mode is not BID_HIGHER_FOR_NEW_CUSTOMER, or when CampaignLifecycleGoal.customer_acquisition_goal_settings.value_settings.high_lifetime_value is specified smaller than/without CampaignLifecycleGoal.customer_acquisition_goal_settings.value_settings.value.",
            "Customer acquisition goal is not supported on this campaign type.",
            "CampaignLifecycleGoal.customer_acquisition_goal_settings.value_settings.value is invalid or not allowed, such as when the specified value is smaller than 0.01, or when the optimization mode is not BID_HIGHER_FOR_NEW_CUSTOMER.",
            "To use BID_HIGHER_FOR_NEW_CUSTOMER mode, either CampaignLifecycleGoal.customer_acquisition_goal_settings.value_settings.value or CustomerLifecycleGoal.customer_acquisition_goal_value_settings.value must have been specified. If a manager account is managing your account's conversion tracking, then only the CustomerLifecycleGoal of that manager account is used.",
            "In order for a campaign to adopt the customer acquisition goal, CustomerLifecycleGoal.lifecycle_goal_customer_definition_settings.existing_user_lists must include active and accessible userlist with more than 1000 members in the Search/Youtube network. If a manager account is managing your account's conversion tracking, then only the CustomerLifecycleGoal of that manager account is used. Also make sure that the manager account shares audience segments with sub-accounts with continuous audience sharing.",
            "In order for a campaign to adopt the customer acquisition goal with high lifetime value optimization, CustomerLifecycleGoal.lifecycle_goal_customer_definition_settings.high_lifetime_value_user_lists must include active and accessible userlist with more than 1000 members in the Search/Youtube network. If a manager account is managing your account's conversion tracking, then only the CustomerLifecycleGoal of that manager account is used. Also make sure that the manager account shares audience segments with sub-accounts using continuous audience sharing."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGN_MISSING",
            "INVALID_CAMPAIGN",
            "CUSTOMER_ACQUISITION_INVALID_OPTIMIZATION_MODE",
            "INCOMPATIBLE_BIDDING_STRATEGY",
            "MISSING_PURCHASE_GOAL",
            "CUSTOMER_ACQUISITION_INVALID_HIGH_LIFETIME_VALUE",
            "CUSTOMER_ACQUISITION_UNSUPPORTED_CAMPAIGN_TYPE",
            "CUSTOMER_ACQUISITION_INVALID_VALUE",
            "CUSTOMER_ACQUISITION_VALUE_MISSING",
            "CUSTOMER_ACQUISITION_MISSING_EXISTING_CUSTOMER_DEFINITION",
            "CUSTOMER_ACQUISITION_MISSING_HIGH_VALUE_CUSTOMER_DEFINITION"
          ]
        },
        "identityVerificationError": {
          "description": "The reasons for an identity verification error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "No effective billing linked to this customer.",
            "Customer is not on monthly invoicing.",
            "Verification for this program type was already started."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "NO_EFFECTIVE_BILLING",
            "BILLING_NOT_ON_MONTHLY_INVOICING",
            "VERIFICATION_ALREADY_STARTED"
          ]
        },
        "userListCustomerTypeError": {
          "description": "The reasons for a user list customer type error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "Cannot add the conflicting customer types to the same user list. Conflicting labels: 1. Purchasers - Converted Leads 2. Purchasers - Qualified Leads 3. Purchasers - Cart Abandoners 4. Qualified Leads - Converted Leads 5. Disengaged customers - Converted Leads 6. Disengaged customers - Qualified Leads 7. Disengaged customers- Cart Abandoners",
            "The account does not have access to the user list.",
            "The given user list is not eligible for applying customer types. The user list must belong to one of the following types: CRM_BASED, RULE_BASED, ADVERTISER_DATA_MODEL_BASED, GCN.",
            "To edit the user list customer type, conversion tracking must be enabled in your account. If cross-tracking is enabled, your account must be a MCC manager account to modify user list customer types. More info at https://support.google.com/google-ads/answer/3030657",
            "Too many user lists for the customer type."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CONFLICTING_CUSTOMER_TYPES",
            "NO_ACCESS_TO_USER_LIST",
            "USERLIST_NOT_ELIGIBLE",
            "CONVERSION_TRACKING_NOT_ENABLED_OR_NOT_MCC_MANAGER_ACCOUNT",
            "TOO_MANY_USER_LISTS_FOR_THE_CUSTOMER_TYPE"
          ]
        },
        "shoppingProductError": {
          "description": "The reasons for error in querying shopping product.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "A filter on the `campaign` resource name is missing.",
            "A filter on the `ad_group` resource name is missing.",
            "Date segmentation is not supported."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "MISSING_CAMPAIGN_FILTER",
            "MISSING_AD_GROUP_FILTER",
            "UNSUPPORTED_DATE_SEGMENTATION"
          ]
        },
        "automaticallyCreatedAssetRemovalError": {
          "description": "The reasons for error in automatically created asset removal action.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "The ad does not exist.",
            "Ad type is not supported. Only Responsive Search Ad type is supported.",
            "The asset does not exist.",
            "The asset field type does not match.",
            "Not an automatically created asset."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "AD_DOES_NOT_EXIST",
            "INVALID_AD_TYPE",
            "ASSET_DOES_NOT_EXIST",
            "ASSET_FIELD_TYPE_DOES_NOT_MATCH",
            "NOT_AN_AUTOMATICALLY_CREATED_ASSET"
          ]
        },
        "shareablePreviewError": {
          "description": "The reasons for the shareable preview error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "Used for return value only. Represents value unknown in this version.",
            "The maximum of 10 asset groups was exceeded.",
            "asset group does not exist under this customer."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "TOO_MANY_ASSET_GROUPS_IN_REQUEST",
            "ASSET_GROUP_DOES_NOT_EXIST_UNDER_THIS_CUSTOMER"
          ]
        },
        "brandGuidelinesMigrationError": {
          "description": "The reasons for the brand guidelines migration error.",
          "type": "string",
          "enumDescriptions": [
            "Enum unspecified.",
            "The received error code is not known in this version.",
            "This campaign is already enabled for Brand Guidelines.",
            "Brand Guidelines can only be enabled for active or suspended campaigns.",
            "Maximum of 5 square and landscape logos can be specified for Brand Guidelines.",
            "Either auto_populate_brand_assets must be true or brand_assets must be provided, but not both.",
            "Either auto_populate_brand_assets can be false or brand_assets can be omitted, but not both.",
            "A maximum of 10 enable operations can be executed in a request."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "BRAND_GUIDELINES_ALREADY_ENABLED",
            "CANNOT_ENABLE_BRAND_GUIDELINES_FOR_REMOVED_CAMPAIGN",
            "BRAND_GUIDELINES_LOGO_LIMIT_EXCEEDED",
            "CANNOT_AUTO_POPULATE_BRAND_ASSETS_WHEN_BRAND_ASSETS_PROVIDED",
            "AUTO_POPULATE_BRAND_ASSETS_REQUIRED_WHEN_BRAND_ASSETS_OMITTED",
            "TOO_MANY_ENABLE_OPERATIONS"
          ]
        }
      }
    },
    "GoogleAdsGoogleadsV21Common__Value": {
      "id": "GoogleAdsGoogleadsV21Common__Value",
      "description": "A generic data container.",
      "type": "object",
      "properties": {
        "booleanValue": {
          "description": "A boolean.",
          "type": "boolean"
        },
        "int64Value": {
          "description": "An int64.",
          "type": "string",
          "format": "int64"
        },
        "floatValue": {
          "description": "A float.",
          "type": "number",
          "format": "float"
        },
        "doubleValue": {
          "description": "A double.",
          "type": "number",
          "format": "double"
        },
        "stringValue": {
          "description": "A string.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__ErrorLocation": {
      "id": "GoogleAdsGoogleadsV21Errors__ErrorLocation",
      "description": "Describes the part of the request proto that caused the error.",
      "type": "object",
      "properties": {
        "fieldPathElements": {
          "description": "A field path that indicates which field was invalid in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Errors_ErrorLocation_FieldPathElement"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors_ErrorLocation_FieldPathElement": {
      "id": "GoogleAdsGoogleadsV21Errors_ErrorLocation_FieldPathElement",
      "description": "A part of a field path.",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "The name of a field or a oneof",
          "type": "string"
        },
        "index": {
          "description": "If field_name is a repeated field, this is the element that failed",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__ErrorDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__ErrorDetails",
      "description": "Additional error details.",
      "type": "object",
      "properties": {
        "unpublishedErrorCode": {
          "description": "The error code that should have been returned, but wasn't. This is used when the error code is not published in the client specified version.",
          "type": "string"
        },
        "policyViolationDetails": {
          "description": "Describes an ad policy violation.",
          "$ref": "GoogleAdsGoogleadsV21Errors__PolicyViolationDetails"
        },
        "policyFindingDetails": {
          "description": "Describes policy violation findings.",
          "$ref": "GoogleAdsGoogleadsV21Errors__PolicyFindingDetails"
        },
        "quotaErrorDetails": {
          "description": "Details on the quota error, including the scope (account or developer), the rate bucket name and the retry delay.",
          "$ref": "GoogleAdsGoogleadsV21Errors__QuotaErrorDetails"
        },
        "resourceCountDetails": {
          "description": "Details for a resource count limit exceeded error.",
          "$ref": "GoogleAdsGoogleadsV21Errors__ResourceCountDetails"
        },
        "budgetPerDayMinimumErrorDetails": {
          "description": "Details for a budget below per-day minimum error.",
          "$ref": "GoogleAdsGoogleadsV21Errors__BudgetPerDayMinimumErrorDetails"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__PolicyViolationDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__PolicyViolationDetails",
      "description": "Error returned as part of a mutate response. This error indicates single policy violation by some text in one of the fields.",
      "type": "object",
      "properties": {
        "externalPolicyDescription": {
          "description": "Human readable description of policy violation.",
          "type": "string"
        },
        "key": {
          "description": "Unique identifier for this violation. If policy is exemptible, this key may be used to request exemption.",
          "$ref": "GoogleAdsGoogleadsV21Common__PolicyViolationKey"
        },
        "externalPolicyName": {
          "description": "Human readable name of the policy.",
          "type": "string"
        },
        "isExemptible": {
          "description": "Whether user can file an exemption request for this violation.",
          "type": "boolean"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__PolicyFindingDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__PolicyFindingDetails",
      "description": "Error returned as part of a mutate response. This error indicates one or more policy findings in the fields of a resource.",
      "type": "object",
      "properties": {
        "policyTopicEntries": {
          "description": "The list of policy topics for the resource. Contains the PROHIBITED or FULLY_LIMITED policy topic entries that prevented the resource from being saved (among any other entries the resource may also have).",
          "type": "array",
          "items": {
            "$ref": "GoogleAdsGoogleadsV21Common__PolicyTopicEntry"
          }
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__QuotaErrorDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__QuotaErrorDetails",
      "description": "Additional quota error details when there is QuotaError.",
      "type": "object",
      "properties": {
        "rateScope": {
          "description": "The rate scope of the quota limit.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified enum",
            "Used for return value only. Represents value unknown in this version.",
            "Per customer account quota",
            "Per project or DevToken quota"
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "ACCOUNT",
            "DEVELOPER"
          ]
        },
        "rateName": {
          "description": "The high level description of the quota bucket. Examples are \"Get requests for standard access\" or \"Requests per account\".",
          "type": "string"
        },
        "retryDelay": {
          "description": "Backoff period that customers should wait before sending next request.",
          "type": "string",
          "format": "google-duration"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__ResourceCountDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__ResourceCountDetails",
      "description": "Error details returned when an resource count limit was exceeded.",
      "type": "object",
      "properties": {
        "enclosingId": {
          "description": "The ID of the resource whose limit was exceeded. External customer ID if the limit is for a customer.",
          "type": "string"
        },
        "enclosingResource": {
          "description": "The name of the resource (Customer, Campaign etc.) whose limit was exceeded.",
          "type": "string"
        },
        "limit": {
          "description": "The limit which was exceeded.",
          "type": "integer",
          "format": "int32"
        },
        "limitType": {
          "description": "The resource limit type which was exceeded.",
          "type": "string",
          "enumDescriptions": [
            "No value has been specified.",
            "Used for return value only. Represents an unclassified operation unknown in this version.",
            "Number of ENABLED and PAUSED campaigns per customer.",
            "Number of ENABLED and PAUSED base campaigns per customer.",
            "Number of ENABLED and PAUSED experiment campaigns per customer.",
            "Number of ENABLED and PAUSED Hotel campaigns per customer.",
            "Number of ENABLED and PAUSED Smart Shopping campaigns per customer.",
            "Number of ENABLED ad groups per campaign.",
            "Number of ENABLED ad groups per Shopping campaign.",
            "Number of ENABLED ad groups per Hotel campaign.",
            "Number of ENABLED reporting ad groups per local campaign.",
            "Number of ENABLED reporting ad groups per App campaign. It includes app campaign and app campaign for engagement.",
            "Number of ENABLED managed ad groups per smart campaign.",
            "Number of ENABLED ad group criteria per customer. An ad group criterion is considered as ENABLED if: 1. it's not REMOVED 2. its ad group is not REMOVED 3. its campaign is not REMOVED.",
            "Number of ad group criteria across all base campaigns for a customer.",
            "Number of ad group criteria across all experiment campaigns for a customer.",
            "Number of ENABLED ad group criteria per campaign. An ad group criterion is considered as ENABLED if: 1. it's not REMOVED 2. its ad group is not REMOVED.",
            "Number of ENABLED campaign criteria per customer.",
            "Number of ENABLED campaign criteria across all base campaigns for a customer.",
            "Number of ENABLED campaign criteria across all experiment campaigns for a customer.",
            "Number of ENABLED webpage criteria per customer, including campaign level and ad group level.",
            "Number of ENABLED webpage criteria across all base campaigns for a customer.",
            "Meximum number of ENABLED webpage criteria across all experiment campaigns for a customer.",
            "Number of combined audience criteria per ad group.",
            "Limit for placement criterion type group in customer negative criterion.",
            "Limit for YouTube TV channels in customer negative criterion.",
            "Number of ENABLED criteria per ad group.",
            "Number of listing group criteria per ad group.",
            "Number of ENABLED explicitly shared budgets per customer.",
            "Number of ENABLED implicitly shared budgets per customer.",
            "Number of combined audience criteria per campaign.",
            "Number of negative keywords per campaign.",
            "Number of excluded campaign criteria in placement dimension, for example, placement, mobile application, YouTube channel, etc. The API criterion type is NOT limited to placement only, and this does not include exclusions at the ad group or other levels.",
            "Number of geo targets per campaign.",
            "Number of negative IP blocks per campaign.",
            "Number of proximity targets per campaign.",
            "Number of listing scopes per Shopping campaign.",
            "Number of listing scopes per non-Shopping campaign.",
            "Number of criteria per negative keyword shared set.",
            "Number of criteria per negative placement shared set.",
            "Default number of shared sets allowed per type per customer.",
            "Number of shared sets of negative placement list type for a manager customer.",
            "Number of hotel_advance_booking_window bid modifiers per ad group.",
            "Number of ENABLED shared bidding strategies per customer.",
            "Number of open basic user lists per customer.",
            "Number of open logical user lists per customer.",
            "Number of open rule based user lists per customer.",
            "Number of ENABLED and PAUSED ad group ads across all base campaigns for a customer.",
            "Number of ENABLED and PAUSED ad group ads across all experiment campaigns for a customer.",
            "Number of ENABLED and PAUSED ad group ads per campaign.",
            "Number of ENABLED ads per ad group that do not fall in to other buckets. Includes text and many other types.",
            "Number of ENABLED image ads per ad group.",
            "Number of ENABLED shopping smart ads per ad group.",
            "Number of ENABLED responsive search ads per ad group.",
            "Number of ENABLED app ads per ad group.",
            "Number of ENABLED app engagement ads per ad group.",
            "Number of ENABLED local ads per ad group.",
            "Number of ENABLED video ads per ad group.",
            "Number of ENABLED lead form CampaignAssets per campaign.",
            "Number of ENABLED promotion CustomerAssets per customer.",
            "Number of ENABLED promotion CampaignAssets per campaign.",
            "Number of ENABLED promotion AdGroupAssets per ad group.",
            "Number of ENABLED callout CustomerAssets per customer.",
            "Number of ENABLED callout CampaignAssets per campaign.",
            "Number of ENABLED callout AdGroupAssets per ad group.",
            "Number of ENABLED sitelink CustomerAssets per customer.",
            "Number of ENABLED sitelink CampaignAssets per campaign.",
            "Number of ENABLED sitelink AdGroupAssets per ad group.",
            "Number of ENABLED structured snippet CustomerAssets per customer.",
            "Number of ENABLED structured snippet CampaignAssets per campaign.",
            "Number of ENABLED structured snippet AdGroupAssets per ad group.",
            "Number of ENABLED mobile app CustomerAssets per customer.",
            "Number of ENABLED mobile app CampaignAssets per campaign.",
            "Number of ENABLED mobile app AdGroupAssets per ad group.",
            "Number of ENABLED hotel callout CustomerAssets per customer.",
            "Number of ENABLED hotel callout CampaignAssets per campaign.",
            "Number of ENABLED hotel callout AdGroupAssets per ad group.",
            "Number of ENABLED call CustomerAssets per customer.",
            "Number of ENABLED call CampaignAssets per campaign.",
            "Number of ENABLED call AdGroupAssets per ad group.",
            "Number of ENABLED price CustomerAssets per customer.",
            "Number of ENABLED price CampaignAssets per campaign.",
            "Number of ENABLED price AdGroupAssets per ad group.",
            "Number of ENABLED ad image CampaignAssets per campaign.",
            "Number of ENABLED ad image AdGroupAssets per ad group.",
            "Number of ENABLED page feed asset sets per customer.",
            "Number of ENABLED dynamic education feed asset sets per customer.",
            "Number of ENABLED assets per page feed asset set.",
            "Number of ENABLED assets per dynamic education asset set.",
            "Number of ENABLED dynamic real estate asset sets per customer.",
            "Number of ENABLED assets per dynamic real estate asset set.",
            "Number of ENABLED dynamic custom asset sets per customer.",
            "Number of ENABLED assets per dynamic custom asset set.",
            "Number of ENABLED dynamic hotels and rentals asset sets per customer.",
            "Number of ENABLED assets per dynamic hotels and rentals asset set.",
            "Number of ENABLED dynamic local asset sets per customer.",
            "Number of ENABLED assets per dynamic local asset set.",
            "Number of ENABLED dynamic flights asset sets per customer.",
            "Number of ENABLED assets per dynamic flights asset set.",
            "Number of ENABLED dynamic travel asset sets per customer.",
            "Number of ENABLED assets per dynamic travel asset set.",
            "Number of ENABLED dynamic jobs asset sets per customer.",
            "Number of ENABLED assets per dynamic jobs asset set.",
            "Number of ENABLED business name CampaignAssets per campaign.",
            "Number of ENABLED business logo CampaignAssets per campaign.",
            "Number of versions per ad.",
            "Number of ENABLED user feeds per customer.",
            "Number of ENABLED system feeds per customer.",
            "Number of feed attributes per feed.",
            "Number of ENABLED feed items per customer.",
            "Number of ENABLED campaign feeds per customer.",
            "Number of ENABLED campaign feeds across all base campaigns for a customer.",
            "Number of ENABLED campaign feeds across all experiment campaigns for a customer.",
            "Number of ENABLED ad group feeds per customer.",
            "Number of ENABLED ad group feeds across all base campaigns for a customer.",
            "Number of ENABLED ad group feeds across all experiment campaigns for a customer.",
            "Number of ENABLED ad group feeds per campaign.",
            "Number of ENABLED feed items per customer.",
            "Number of feed items per feed item set.",
            "Number of ENABLED campaign experiments per customer.",
            "Number of video experiment arms per experiment.",
            "Number of owned labels per customer.",
            "Number of applied labels per campaign.",
            "Number of applied labels per ad group.",
            "Number of applied labels per ad group ad.",
            "Number of applied labels per ad group criterion.",
            "Number of customers with a single label applied.",
            "Number of ENABLED keyword plans per user per customer. The limit is applied per pair because by default a plan is private to a user of a customer. Each user of a customer has their own independent limit.",
            "Number of keyword plan ad group keywords per keyword plan.",
            "Number of keyword plan ad groups per keyword plan.",
            "Number of keyword plan negative keywords (both campaign and ad group) per keyword plan.",
            "Number of keyword plan campaigns per keyword plan.",
            "Number of ENABLED conversion actions per customer.",
            "Number of operations in a single batch job.",
            "Number of PENDING or ENABLED batch jobs per customer.",
            "Number of hotel check-in date range bid modifiers per ad agroup.",
            "Number of shared sets of type ACCOUNT_LEVEL_NEGATIVE_KEYWORDS per account.",
            "Number of keywords per ACCOUNT_LEVEL_NEGATIVE_KEYWORDS shared set.",
            "Maximum number of asset per hotel property asset set.",
            "Maximum number of enabled hotel property assets per asset group.",
            "Number of criteria per brand shared set.",
            "Number of active brand list criteria per campaign.",
            "Maximum number of shared sets of brand type for an account.",
            "Maximum number of lookalike lists per customer.",
            "Total number of enabled IMAGE CampaignAssets with LOGO and LANDSCAPE_LOGO field types per campaign.",
            "Maximum number of active business message asset links at customer level.",
            "Maximum number of active WhatsApp business message asset links at campaign level.",
            "Maximum number of active WhatsApp business message asset links at ad group level.",
            "Number of ENABLED brand list criteria per ad group."
          ],
          "enum": [
            "UNSPECIFIED",
            "UNKNOWN",
            "CAMPAIGNS_PER_CUSTOMER",
            "BASE_CAMPAIGNS_PER_CUSTOMER",
            "EXPERIMENT_CAMPAIGNS_PER_CUSTOMER",
            "HOTEL_CAMPAIGNS_PER_CUSTOMER",
            "SMART_SHOPPING_CAMPAIGNS_PER_CUSTOMER",
            "AD_GROUPS_PER_CAMPAIGN",
            "AD_GROUPS_PER_SHOPPING_CAMPAIGN",
            "AD_GROUPS_PER_HOTEL_CAMPAIGN",
            "REPORTING_AD_GROUPS_PER_LOCAL_CAMPAIGN",
            "REPORTING_AD_GROUPS_PER_APP_CAMPAIGN",
            "MANAGED_AD_GROUPS_PER_SMART_CAMPAIGN",
            "AD_GROUP_CRITERIA_PER_CUSTOMER",
            "BASE_AD_GROUP_CRITERIA_PER_CUSTOMER",
            "EXPERIMENT_AD_GROUP_CRITERIA_PER_CUSTOMER",
            "AD_GROUP_CRITERIA_PER_CAMPAIGN",
            "CAMPAIGN_CRITERIA_PER_CUSTOMER",
            "BASE_CAMPAIGN_CRITERIA_PER_CUSTOMER",
            "EXPERIMENT_CAMPAIGN_CRITERIA_PER_CUSTOMER",
            "WEBPAGE_CRITERIA_PER_CUSTOMER",
            "BASE_WEBPAGE_CRITERIA_PER_CUSTOMER",
            "EXPERIMENT_WEBPAGE_CRITERIA_PER_CUSTOMER",
            "COMBINED_AUDIENCE_CRITERIA_PER_AD_GROUP",
            "CUSTOMER_NEGATIVE_PLACEMENT_CRITERIA_PER_CUSTOMER",
            "CUSTOMER_NEGATIVE_YOUTUBE_CHANNEL_CRITERIA_PER_CUSTOMER",
            "CRITERIA_PER_AD_GROUP",
            "LISTING_GROUPS_PER_AD_GROUP",
            "EXPLICITLY_SHARED_BUDGETS_PER_CUSTOMER",
            "IMPLICITLY_SHARED_BUDGETS_PER_CUSTOMER",
            "COMBINED_AUDIENCE_CRITERIA_PER_CAMPAIGN",
            "NEGATIVE_KEYWORDS_PER_CAMPAIGN",
            "NEGATIVE_PLACEMENTS_PER_CAMPAIGN",
            "GEO_TARGETS_PER_CAMPAIGN",
            "NEGATIVE_IP_BLOCKS_PER_CAMPAIGN",
            "PROXIMITIES_PER_CAMPAIGN",
            "LISTING_SCOPES_PER_SHOPPING_CAMPAIGN",
            "LISTING_SCOPES_PER_NON_SHOPPING_CAMPAIGN",
            "NEGATIVE_KEYWORDS_PER_SHARED_SET",
            "NEGATIVE_PLACEMENTS_PER_SHARED_SET",
            "SHARED_SETS_PER_CUSTOMER_FOR_TYPE_DEFAULT",
            "SHARED_SETS_PER_CUSTOMER_FOR_NEGATIVE_PLACEMENT_LIST_LOWER",
            "HOTEL_ADVANCE_BOOKING_WINDOW_BID_MODIFIERS_PER_AD_GROUP",
            "BIDDING_STRATEGIES_PER_CUSTOMER",
            "BASIC_USER_LISTS_PER_CUSTOMER",
            "LOGICAL_USER_LISTS_PER_CUSTOMER",
            "RULE_BASED_USER_LISTS_PER_CUSTOMER",
            "BASE_AD_GROUP_ADS_PER_CUSTOMER",
            "EXPERIMENT_AD_GROUP_ADS_PER_CUSTOMER",
            "AD_GROUP_ADS_PER_CAMPAIGN",
            "TEXT_AND_OTHER_ADS_PER_AD_GROUP",
            "IMAGE_ADS_PER_AD_GROUP",
            "SHOPPING_SMART_ADS_PER_AD_GROUP",
            "RESPONSIVE_SEARCH_ADS_PER_AD_GROUP",
            "APP_ADS_PER_AD_GROUP",
            "APP_ENGAGEMENT_ADS_PER_AD_GROUP",
            "LOCAL_ADS_PER_AD_GROUP",
            "VIDEO_ADS_PER_AD_GROUP",
            "LEAD_FORM_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "PROMOTION_CUSTOMER_ASSETS_PER_CUSTOMER",
            "PROMOTION_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "PROMOTION_AD_GROUP_ASSETS_PER_AD_GROUP",
            "CALLOUT_CUSTOMER_ASSETS_PER_CUSTOMER",
            "CALLOUT_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "CALLOUT_AD_GROUP_ASSETS_PER_AD_GROUP",
            "SITELINK_CUSTOMER_ASSETS_PER_CUSTOMER",
            "SITELINK_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "SITELINK_AD_GROUP_ASSETS_PER_AD_GROUP",
            "STRUCTURED_SNIPPET_CUSTOMER_ASSETS_PER_CUSTOMER",
            "STRUCTURED_SNIPPET_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "STRUCTURED_SNIPPET_AD_GROUP_ASSETS_PER_AD_GROUP",
            "MOBILE_APP_CUSTOMER_ASSETS_PER_CUSTOMER",
            "MOBILE_APP_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "MOBILE_APP_AD_GROUP_ASSETS_PER_AD_GROUP",
            "HOTEL_CALLOUT_CUSTOMER_ASSETS_PER_CUSTOMER",
            "HOTEL_CALLOUT_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "HOTEL_CALLOUT_AD_GROUP_ASSETS_PER_AD_GROUP",
            "CALL_CUSTOMER_ASSETS_PER_CUSTOMER",
            "CALL_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "CALL_AD_GROUP_ASSETS_PER_AD_GROUP",
            "PRICE_CUSTOMER_ASSETS_PER_CUSTOMER",
            "PRICE_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "PRICE_AD_GROUP_ASSETS_PER_AD_GROUP",
            "AD_IMAGE_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "AD_IMAGE_AD_GROUP_ASSETS_PER_AD_GROUP",
            "PAGE_FEED_ASSET_SETS_PER_CUSTOMER",
            "DYNAMIC_EDUCATION_FEED_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_PAGE_FEED_ASSET_SET",
            "ASSETS_PER_DYNAMIC_EDUCATION_FEED_ASSET_SET",
            "DYNAMIC_REAL_ESTATE_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_REAL_ESTATE_ASSET_SET",
            "DYNAMIC_CUSTOM_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_CUSTOM_ASSET_SET",
            "DYNAMIC_HOTELS_AND_RENTALS_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_HOTELS_AND_RENTALS_ASSET_SET",
            "DYNAMIC_LOCAL_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_LOCAL_ASSET_SET",
            "DYNAMIC_FLIGHTS_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_FLIGHTS_ASSET_SET",
            "DYNAMIC_TRAVEL_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_TRAVEL_ASSET_SET",
            "DYNAMIC_JOBS_ASSET_SETS_PER_CUSTOMER",
            "ASSETS_PER_DYNAMIC_JOBS_ASSET_SET",
            "BUSINESS_NAME_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "BUSINESS_LOGO_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "VERSIONS_PER_AD",
            "USER_FEEDS_PER_CUSTOMER",
            "SYSTEM_FEEDS_PER_CUSTOMER",
            "FEED_ATTRIBUTES_PER_FEED",
            "FEED_ITEMS_PER_CUSTOMER",
            "CAMPAIGN_FEEDS_PER_CUSTOMER",
            "BASE_CAMPAIGN_FEEDS_PER_CUSTOMER",
            "EXPERIMENT_CAMPAIGN_FEEDS_PER_CUSTOMER",
            "AD_GROUP_FEEDS_PER_CUSTOMER",
            "BASE_AD_GROUP_FEEDS_PER_CUSTOMER",
            "EXPERIMENT_AD_GROUP_FEEDS_PER_CUSTOMER",
            "AD_GROUP_FEEDS_PER_CAMPAIGN",
            "FEED_ITEM_SETS_PER_CUSTOMER",
            "FEED_ITEMS_PER_FEED_ITEM_SET",
            "CAMPAIGN_EXPERIMENTS_PER_CUSTOMER",
            "EXPERIMENT_ARMS_PER_VIDEO_EXPERIMENT",
            "OWNED_LABELS_PER_CUSTOMER",
            "LABELS_PER_CAMPAIGN",
            "LABELS_PER_AD_GROUP",
            "LABELS_PER_AD_GROUP_AD",
            "LABELS_PER_AD_GROUP_CRITERION",
            "TARGET_CUSTOMERS_PER_LABEL",
            "KEYWORD_PLANS_PER_USER_PER_CUSTOMER",
            "KEYWORD_PLAN_AD_GROUP_KEYWORDS_PER_KEYWORD_PLAN",
            "KEYWORD_PLAN_AD_GROUPS_PER_KEYWORD_PLAN",
            "KEYWORD_PLAN_NEGATIVE_KEYWORDS_PER_KEYWORD_PLAN",
            "KEYWORD_PLAN_CAMPAIGNS_PER_KEYWORD_PLAN",
            "CONVERSION_ACTIONS_PER_CUSTOMER",
            "BATCH_JOB_OPERATIONS_PER_JOB",
            "BATCH_JOBS_PER_CUSTOMER",
            "HOTEL_CHECK_IN_DATE_RANGE_BID_MODIFIERS_PER_AD_GROUP",
            "SHARED_SETS_PER_ACCOUNT_FOR_ACCOUNT_LEVEL_NEGATIVE_KEYWORDS",
            "ACCOUNT_LEVEL_NEGATIVE_KEYWORDS_PER_SHARED_SET",
            "ENABLED_ASSET_PER_HOTEL_PROPERTY_ASSET_SET",
            "ENABLED_HOTEL_PROPERTY_ASSET_LINKS_PER_ASSET_GROUP",
            "BRANDS_PER_SHARED_SET",
            "ENABLED_BRAND_LIST_CRITERIA_PER_CAMPAIGN",
            "SHARED_SETS_PER_ACCOUNT_FOR_BRAND",
            "LOOKALIKE_USER_LISTS_PER_CUSTOMER",
            "LOGO_CAMPAIGN_ASSETS_PER_CAMPAIGN",
            "BUSINESS_MESSAGE_ASSET_LINKS_PER_CUSTOMER",
            "WHATSAPP_BUSINESS_MESSAGE_ASSET_LINKS_PER_CAMPAIGN",
            "WHATSAPP_BUSINESS_MESSAGE_ASSET_LINKS_PER_AD_GROUP",
            "BRAND_LIST_CRITERIA_PER_AD_GROUP"
          ]
        },
        "existingCount": {
          "description": "The count of existing entities.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleAdsGoogleadsV21Errors__BudgetPerDayMinimumErrorDetails": {
      "id": "GoogleAdsGoogleadsV21Errors__BudgetPerDayMinimumErrorDetails",
      "description": "Error details for a budget below per-day minimum error.",
      "type": "object",
      "properties": {
        "currencyCode": {
          "description": "The advertiser's currency, represented as a three-letter ISO 4217 currency code (such as \"USD\").",
          "type": "string"
        },
        "budgetPerDayMinimumMicros": {
          "description": "The minimum budget required by the campaign per day, in micros of the advertiser currency. Applies to both daily and custom budgets.",
          "type": "string",
          "format": "int64"
        },
        "minimumBugdetAmountMicros": {
          "description": "The minimum value for the budget's amount field required by the campaign, in micros of the advertiser currency. Only set if this error is caused by the amount field value.",
          "type": "string",
          "format": "int64"
        },
        "minimumBudgetTotalAmountMicros": {
          "description": "The minimum value for the budget's total_amount field required by the campaign given its configured start and end time, in micros of the advertiser currency. Only set if this error is caused by the total_amount field value.",
          "type": "string",
          "format": "int64"
        },
        "failedBudgetAmountMicros": {
          "description": "The budget amount value that was rejected as too low, in micros of the advertiser currency. Only set if this error is caused by the amount field value.",
          "type": "string",
          "format": "int64"
        },
        "failedBudgetTotalAmountMicros": {
          "description": "The budget total_amount value that was rejected as too low, in micros of the advertiser currency. Only set if this error is caused by the total_amount field value.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__PromoteExperimentMetadata": {
      "id": "GoogleAdsGoogleadsV21Services__PromoteExperimentMetadata",
      "description": "The metadata of the promoted experiment.",
      "type": "object",
      "properties": {
        "experiment": {
          "description": "Required. The promoted experiment.",
          "type": "string"
        }
      }
    },
    "GoogleAdsGoogleadsV21Services__ScheduleExperimentMetadata": {
      "id": "GoogleAdsGoogleadsV21Services__ScheduleExperimentMetadata",
      "description": "The metadata of the scheduled experiment.",
      "type": "object",
      "properties": {
        "experiment": {
          "description": "Required. The scheduled experiment.",
          "type": "string"
        }
      }
    }
  },
  "documentationLink": "https://developers.google.com/google-ads/api/",
  "baseUrl": "https://googleads.googleapis.com/",
  "ownerDomain": "google.com",
  "basePath": "",
  "mtlsRootUrl": "https://googleads.mtls.googleapis.com/",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/adwords": {
          "description": "See, edit, create, and delete your Google Ads accounts and data."
        }
      }
    }
  },
  "name": "googleads",
  "servicePath": "",
  "batchPath": "batch",
  "ownerName": "Google"
}
