// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.ads.googleads.v21.resources;

import "google/ads/googleads/v21/common/bidding.proto";
import "google/ads/googleads/v21/common/custom_parameter.proto";
import "google/ads/googleads/v21/common/frequency_cap.proto";
import "google/ads/googleads/v21/common/real_time_bidding_setting.proto";
import "google/ads/googleads/v21/common/targeting_setting.proto";
import "google/ads/googleads/v21/common/third_party_integration_partners.proto";
import "google/ads/googleads/v21/enums/ad_group_type.proto";
import "google/ads/googleads/v21/enums/ad_serving_optimization_status.proto";
import "google/ads/googleads/v21/enums/advertising_channel_sub_type.proto";
import "google/ads/googleads/v21/enums/advertising_channel_type.proto";
import "google/ads/googleads/v21/enums/app_campaign_app_store.proto";
import "google/ads/googleads/v21/enums/app_campaign_bidding_strategy_goal_type.proto";
import "google/ads/googleads/v21/enums/asset_automation_status.proto";
import "google/ads/googleads/v21/enums/asset_automation_type.proto";
import "google/ads/googleads/v21/enums/asset_field_type.proto";
import "google/ads/googleads/v21/enums/asset_set_type.proto";
import "google/ads/googleads/v21/enums/bidding_strategy_system_status.proto";
import "google/ads/googleads/v21/enums/bidding_strategy_type.proto";
import "google/ads/googleads/v21/enums/brand_safety_suitability.proto";
import "google/ads/googleads/v21/enums/campaign_experiment_type.proto";
import "google/ads/googleads/v21/enums/campaign_keyword_match_type.proto";
import "google/ads/googleads/v21/enums/campaign_primary_status.proto";
import "google/ads/googleads/v21/enums/campaign_primary_status_reason.proto";
import "google/ads/googleads/v21/enums/campaign_serving_status.proto";
import "google/ads/googleads/v21/enums/campaign_status.proto";
import "google/ads/googleads/v21/enums/eu_political_advertising_status.proto";
import "google/ads/googleads/v21/enums/listing_type.proto";
import "google/ads/googleads/v21/enums/location_source_type.proto";
import "google/ads/googleads/v21/enums/negative_geo_target_type.proto";
import "google/ads/googleads/v21/enums/non_skippable_max_duration.proto";
import "google/ads/googleads/v21/enums/non_skippable_min_duration.proto";
import "google/ads/googleads/v21/enums/optimization_goal_type.proto";
import "google/ads/googleads/v21/enums/payment_mode.proto";
import "google/ads/googleads/v21/enums/performance_max_upgrade_status.proto";
import "google/ads/googleads/v21/enums/positive_geo_target_type.proto";
import "google/ads/googleads/v21/enums/vanity_pharma_display_url_mode.proto";
import "google/ads/googleads/v21/enums/vanity_pharma_text.proto";
import "google/ads/googleads/v21/enums/video_ad_format_restriction.proto";
import "google/ads/googleads/v21/enums/video_ad_sequence_interaction_type.proto";
import "google/ads/googleads/v21/enums/video_ad_sequence_minimum_duration.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";

option csharp_namespace = "Google.Ads.GoogleAds.V21.Resources";
option go_package = "google.golang.org/genproto/googleapis/ads/googleads/v21/resources;resources";
option java_multiple_files = true;
option java_outer_classname = "CampaignProto";
option java_package = "com.google.ads.googleads.v21.resources";
option objc_class_prefix = "GAA";
option php_namespace = "Google\\Ads\\GoogleAds\\V21\\Resources";
option ruby_package = "Google::Ads::GoogleAds::V21::Resources";

// Proto file describing the Campaign resource.

// A campaign.
message Campaign {
  option (google.api.resource) = {
    type: "googleads.googleapis.com/Campaign"
    pattern: "customers/{customer_id}/campaigns/{campaign_id}"
  };

  // Information about a campaign being upgraded to Performance Max.
  message PerformanceMaxUpgrade {
    // Output only. The resource name of the Performance Max campaign the
    // campaign is upgraded to.
    string performance_max_campaign = 1 [
      (google.api.field_behavior) = OUTPUT_ONLY,
      (google.api.resource_reference) = {
        type: "googleads.googleapis.com/Campaign"
      }
    ];

    // Output only. The resource name of the legacy campaign upgraded to
    // Performance Max.
    string pre_upgrade_campaign = 2 [
      (google.api.field_behavior) = OUTPUT_ONLY,
      (google.api.resource_reference) = {
        type: "googleads.googleapis.com/Campaign"
      }
    ];

    // Output only. The upgrade status of a campaign requested to be upgraded to
    // Performance Max.
    google.ads.googleads.v21.enums.PerformanceMaxUpgradeStatusEnum
        .PerformanceMaxUpgradeStatus status = 3
        [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // The network settings for the campaign.
  message NetworkSettings {
    // Whether ads will be served with google.com search results.
    optional bool target_google_search = 5;

    // Whether ads will be served on partner sites in the Google Search Network
    // (requires `target_google_search` to also be `true`).
    optional bool target_search_network = 6;

    // Whether ads will be served on specified placements in the Google Display
    // Network. Placements are specified using the Placement criterion.
    optional bool target_content_network = 7;

    // Whether ads will be served on the Google Partner Network.
    // This is available only to some select Google partner accounts.
    optional bool target_partner_search_network = 8;

    // Whether ads will be served on YouTube.
    optional bool target_youtube = 9;

    // Whether ads will be served on the Google TV network.
    optional bool target_google_tv_network = 10;
  }

  // Campaign-level settings for hotel ads.
  message HotelSettingInfo {
    // Immutable. The linked Hotel Center account.
    optional int64 hotel_center_id = 2
        [(google.api.field_behavior) = IMMUTABLE];
  }

  // The setting for controlling Dynamic Search Ads (DSA).
  message DynamicSearchAdsSetting {
    // Required. The Internet domain name that this setting represents, for
    // example, "google.com" or "www.google.com".
    string domain_name = 6 [(google.api.field_behavior) = REQUIRED];

    // Required. The language code specifying the language of the domain, for
    // example, "en".
    string language_code = 7 [(google.api.field_behavior) = REQUIRED];

    // Whether the campaign uses advertiser supplied URLs exclusively.
    optional bool use_supplied_urls_only = 8;
  }

  // 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.
  message ShoppingSetting {
    // ID of the Merchant Center account.
    // This field is required for create operations. This field is immutable for
    // Shopping campaigns.
    optional int64 merchant_id = 5;

    // 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.
    string feed_label = 10;

    // 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.
    optional int32 campaign_priority = 7;

    // Whether to include local products.
    optional bool enable_local = 8;

    // 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.
    bool use_vehicle_inventory = 9 [(google.api.field_behavior) = IMMUTABLE];

    // 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.
    repeated int64 advertising_partner_ids = 11;

    // 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.
    optional bool disable_product_feed = 12;
  }

  // Campaign-level settings for tracking information.
  message TrackingSetting {
    // Output only. The url used for dynamic tracking.
    optional string tracking_url = 2
        [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // Represents a collection of settings related to ads geotargeting.
  message GeoTargetTypeSetting {
    // The setting used for positive geotargeting in this particular campaign.
    google.ads.googleads.v21.enums.PositiveGeoTargetTypeEnum
        .PositiveGeoTargetType positive_geo_target_type = 1;

    // The setting used for negative geotargeting in this particular campaign.
    google.ads.googleads.v21.enums.NegativeGeoTargetTypeEnum
        .NegativeGeoTargetType negative_geo_target_type = 2;
  }

  // Campaign setting for local campaigns.
  message LocalCampaignSetting {
    // The location source type for this local campaign.
    google.ads.googleads.v21.enums.LocationSourceTypeEnum.LocationSourceType
        location_source_type = 1;
  }

  // Campaign-level settings for App Campaigns.
  message AppCampaignSetting {
    // Represents the goal which the bidding strategy of this app campaign
    // should optimize towards.
    google.ads.googleads.v21.enums.AppCampaignBiddingStrategyGoalTypeEnum
        .AppCampaignBiddingStrategyGoalType bidding_strategy_goal_type = 1;

    // Immutable. A string that uniquely identifies a mobile application.
    optional string app_id = 4 [(google.api.field_behavior) = IMMUTABLE];

    // Immutable. The application store that distributes this specific app.
    google.ads.googleads.v21.enums.AppCampaignAppStoreEnum.AppCampaignAppStore
        app_store = 3 [(google.api.field_behavior) = IMMUTABLE];
  }

  // Describes how unbranded pharma ads will be displayed.
  message VanityPharma {
    // The display mode for vanity pharma URLs.
    google.ads.googleads.v21.enums.VanityPharmaDisplayUrlModeEnum
        .VanityPharmaDisplayUrlMode vanity_pharma_display_url_mode = 1;

    // 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.
    google.ads.googleads.v21.enums.VanityPharmaTextEnum.VanityPharmaText
        vanity_pharma_text = 2;
  }

  // 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.
  message SelectiveOptimization {
    // The selected set of resource names for conversion actions for optimizing
    // this campaign.
    repeated string conversion_actions = 2 [(google.api.resource_reference) = {
      type: "googleads.googleapis.com/ConversionAction"
    }];
  }

  // Optimization goal setting for this campaign, which includes a set of
  // optimization goal types.
  message OptimizationGoalSetting {
    // The list of optimization goal types.
    repeated google.ads.googleads.v21.enums.OptimizationGoalTypeEnum
        .OptimizationGoalType optimization_goal_types = 1;
  }

  // Settings for the audience targeting.
  message AudienceSetting {
    // Immutable. If true, this campaign uses an Audience resource for audience
    // targeting. If false, this campaign may use audience segment criteria
    // instead.
    optional bool use_audience_grouped = 1
        [(google.api.field_behavior) = IMMUTABLE];
  }

  // Settings for LocalServicesCampaign subresource.
  message LocalServicesCampaignSettings {
    // Categorical level bids associated with MANUAL_CPA bidding strategy.
    repeated CategoryBid category_bids = 1;
  }

  // Category bids in LocalServicesReportingCampaignSettings.
  message CategoryBid {
    // Category for which the bid will be associated with. For example,
    // xcat:service_area_business_plumber.
    optional string category_id = 1;

    // 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.
    optional int64 manual_cpa_bid_micros = 2;

    // Target CPA bid for the category. Value is in micros and in the
    // advertiser's currency.
    optional int64 target_cpa_bid_micros = 3;
  }

  // Settings for Travel campaign.
  message TravelCampaignSettings {
    // Immutable. The Travel account ID associated with the Travel campaign.
    optional int64 travel_account_id = 1
        [(google.api.field_behavior) = IMMUTABLE];
  }

  // Settings for Demand Gen campaign.
  message DemandGenCampaignSettings {
    // 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.
    optional bool upgraded_targeting = 1
        [(google.api.field_behavior) = IMMUTABLE];
  }

  // Settings for Video campaign.
  message VideoCampaignSettings {
    // 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.
    message VideoAdInventoryControl {
      // Determine if video responsive ads can be used for in-stream video ads.
      optional bool allow_in_stream = 1;

      // Determine if video responsive ads can be used for in-feed video ads.
      optional bool allow_in_feed = 2;

      // Determine if video responsive ads can be used as shorts format.
      optional bool allow_shorts = 3;

      // 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).
      optional bool allow_non_skippable_in_stream = 4;
    }

    // Format-restricting control enabling usage of video responsive ads in
    // format defined Video campaigns (for example, non-skippable).
    message VideoAdFormatControl {
      // All contained responsive ads are expected to respect this restriction.
      google.ads.googleads.v21.enums.VideoAdFormatRestrictionEnum
          .VideoAdFormatRestriction format_restriction = 1;

      // Restrictions for non-skippable format.
      NonSkippableInStreamRestrictions non_skippable_in_stream_restrictions = 2;
    }

    // Restrictions for non-skippable format.
    message NonSkippableInStreamRestrictions {
      // The minimum allowed duration for non-skippable ads.
      google.ads.googleads.v21.enums.NonSkippableMinDurationEnum
          .NonSkippableMinDuration min_duration = 1;

      // The maximum allowed duration for non-skippable ads.
      google.ads.googleads.v21.enums.NonSkippableMaxDurationEnum
          .NonSkippableMaxDuration max_duration = 2;
    }

    // Container for video ads sequencing definition.
    message VideoAdSequence {
      // The list of sequence steps and data associated with them.
      repeated VideoAdSequenceStep steps = 1;

      // Users are eligible to repeat sequence after this period. Defaults to
      // WEEK if not specified.
      google.ads.googleads.v21.enums.VideoAdSequenceMinimumDurationEnum
          .VideoAdSequenceMinimumDuration minimum_duration = 2;
    }

    // Information about a step within a video sequence.
    message VideoAdSequenceStep {
      // The ID of this sequence step.
      int64 video_ad_sequence_step_id = 1;

      // The ID of the Asset for this step. The asset must be type
      // YOUTUBE_VIDEO.
      int64 asset_id = 2;

      // The ad group type for this step (denoting the video format).
      google.ads.googleads.v21.enums.AdGroupTypeEnum.AdGroupType ad_group_type =
          3;

      // 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.
      int64 previous_step_id = 4;

      // 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.
      google.ads.googleads.v21.enums.VideoAdSequenceInteractionTypeEnum
          .VideoAdSequenceInteractionType previous_step_interaction_type = 5;
    }

    // Container for video ads sequencing definition.
    VideoAdSequence video_ad_sequence = 4;

    // Controls for defining video responsive ads behavior.
    oneof fluidity_control {
      // Inventory control for video responsive ads in reach campaigns.
      VideoAdInventoryControl video_ad_inventory_control = 2;

      // Format-restricting control enabling usage of video responsive ads in
      // format defined Video campaigns (for example, non-skippable).
      VideoAdFormatControl video_ad_format_control = 3;
    }
  }

  // Settings for Performance Max campaigns.
  message PmaxCampaignSettings {
    // Overrides of brand targeting for various ad types.
    message BrandTargetingOverrides {
      // If true, brand exclusions are ignored for Shopping ads.
      optional bool ignore_exclusions_for_shopping_ads = 1;
    }

    // Overrides of brand targeting for various ad types.
    BrandTargetingOverrides brand_targeting_overrides = 1;
  }

  // Asset automation setting contains pair of AssetAutomationType and the
  // asset automation opt-in/out status
  message AssetAutomationSetting {
    // The asset automation type advertiser would like to opt-in/out.
    optional google.ads.googleads.v21.enums.AssetAutomationTypeEnum
        .AssetAutomationType asset_automation_type = 1;

    // The opt-in/out status of asset automation type.
    optional google.ads.googleads.v21.enums.AssetAutomationStatusEnum
        .AssetAutomationStatus asset_automation_status = 2;
  }

  // Settings that control the visual appearance of your brand in a campaign's
  // automatically generated assets and formats. Only applicable to Performance
  // Max campaigns.
  message BrandGuidelines {
    // The main brand color, entered as a hex code (e.g., #00ff00). You must
    // provide the main_color if you provide an accent_color.
    string main_color = 1;

    // The accent brand color, entered as a hex code (e.g., #00ff00). You must
    // provide the accent_color if you provide a main_color.
    string accent_color = 2;

    // 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.
    string predefined_font_family = 3;
  }

  // Settings for AI Max in search campaigns.
  message AiMaxSetting {
    // Enum describing whether AI Max must be enabled to serve and update
    // text asset automation and brand list features newly bundled with AI Max.
    enum AiMaxBundlingRequired {
      // Not specified.
      UNSPECIFIED = 0;

      // Used for return value only. Represents value unknown in this version.
      UNKNOWN = 1;

      // Search campaign is using text asset automation or brand
      // list targeting, and AI Max is not required to be enabled to serve these
      // features.
      NOT_REQUIRED = 2;

      // 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.
      REQUIRED = 3;
    }

    // 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.
    optional bool enable_ai_max = 1;

    // 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.
    optional AiMaxBundlingRequired bundling_required = 2
        [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // Immutable. The resource name of the campaign.
  // Campaign resource names have the form:
  //
  // `customers/{customer_id}/campaigns/{campaign_id}`
  string resource_name = 1 [
    (google.api.field_behavior) = IMMUTABLE,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/Campaign"
    }
  ];

  // Output only. The ID of the campaign.
  optional int64 id = 59 [(google.api.field_behavior) = OUTPUT_ONLY];

  // 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.
  optional string name = 58;

  // 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.
  google.ads.googleads.v21.enums.CampaignPrimaryStatusEnum.CampaignPrimaryStatus
      primary_status = 81 [(google.api.field_behavior) = OUTPUT_ONLY];

  // 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.
  repeated google.ads.googleads.v21.enums.CampaignPrimaryStatusReasonEnum
      .CampaignPrimaryStatusReason primary_status_reasons = 82
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // The status of the campaign.
  //
  // When a new campaign is added, the status defaults to ENABLED.
  google.ads.googleads.v21.enums.CampaignStatusEnum.CampaignStatus status = 5;

  // Output only. The ad serving status of the campaign.
  google.ads.googleads.v21.enums.CampaignServingStatusEnum.CampaignServingStatus
      serving_status = 21 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The system status of the campaign's bidding strategy.
  google.ads.googleads.v21.enums.BiddingStrategySystemStatusEnum
      .BiddingStrategySystemStatus bidding_strategy_system_status = 78
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // The ad serving optimization status of the campaign.
  google.ads.googleads.v21.enums.AdServingOptimizationStatusEnum
      .AdServingOptimizationStatus ad_serving_optimization_status = 8;

  // 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.
  google.ads.googleads.v21.enums.AdvertisingChannelTypeEnum
      .AdvertisingChannelType advertising_channel_type = 9
      [(google.api.field_behavior) = IMMUTABLE];

  // 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.
  google.ads.googleads.v21.enums.AdvertisingChannelSubTypeEnum
      .AdvertisingChannelSubType advertising_channel_sub_type = 10
      [(google.api.field_behavior) = IMMUTABLE];

  // The URL template for constructing a tracking URL.
  optional string tracking_url_template = 60;

  // The list of mappings used to substitute custom parameter tags in a
  // `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
  repeated google.ads.googleads.v21.common.CustomParameter
      url_custom_parameters = 12;

  // The Local Services Campaign related settings.
  LocalServicesCampaignSettings local_services_campaign_settings = 75;

  // Settings for Travel campaign.
  TravelCampaignSettings travel_campaign_settings = 85;

  // Settings for Demand Gen campaign.
  DemandGenCampaignSettings demand_gen_campaign_settings = 91;

  // Settings for Video campaign.
  VideoCampaignSettings video_campaign_settings = 94;

  // Settings for Performance Max campaign.
  PmaxCampaignSettings pmax_campaign_settings = 97;

  // Settings for Real-Time Bidding, a feature only available for campaigns
  // targeting the Ad Exchange network.
  google.ads.googleads.v21.common.RealTimeBiddingSetting
      real_time_bidding_setting = 39;

  // The network settings for the campaign.
  NetworkSettings network_settings = 14;

  // Immutable. The hotel setting for the campaign.
  HotelSettingInfo hotel_setting = 32 [(google.api.field_behavior) = IMMUTABLE];

  // The setting for controlling Dynamic Search Ads (DSA).
  DynamicSearchAdsSetting dynamic_search_ads_setting = 33;

  // The setting for controlling Shopping campaigns.
  ShoppingSetting shopping_setting = 36;

  // Setting for targeting related features.
  google.ads.googleads.v21.common.TargetingSetting targeting_setting = 43;

  // Immutable. Setting for audience related features.
  optional AudienceSetting audience_setting = 73
      [(google.api.field_behavior) = IMMUTABLE];

  // The setting for ads geotargeting.
  GeoTargetTypeSetting geo_target_type_setting = 47;

  // The setting for local campaign.
  LocalCampaignSetting local_campaign_setting = 50;

  // The setting related to App Campaign.
  AppCampaignSetting app_campaign_setting = 51;

  // Output only. The resource names of labels attached to this campaign.
  repeated string labels = 61 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/CampaignLabel"
    }
  ];

  // Output only. The type of campaign: normal, draft, or experiment.
  google.ads.googleads.v21.enums.CampaignExperimentTypeEnum
      .CampaignExperimentType experiment_type = 17
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // 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.
  optional string base_campaign = 56 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/Campaign"
    }
  ];

  // The resource name of the campaign budget of the campaign.
  optional string campaign_budget = 62 [(google.api.resource_reference) = {
    type: "googleads.googleapis.com/CampaignBudget"
  }];

  // 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.
  google.ads.googleads.v21.enums.BiddingStrategyTypeEnum.BiddingStrategyType
      bidding_strategy_type = 22 [(google.api.field_behavior) = OUTPUT_ONLY];

  // 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.
  string accessible_bidding_strategy = 71 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/AccessibleBiddingStrategy"
    }
  ];

  // The date when campaign started in serving customer's timezone in YYYY-MM-DD
  // format.
  optional string start_date = 63;

  // The resource name of the campaign group that this campaign belongs to.
  optional string campaign_group = 76 [(google.api.resource_reference) = {
    type: "googleads.googleapis.com/CampaignGroup"
  }];

  // 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.
  optional string end_date = 64;

  // Suffix used to append query parameters to landing pages that are served
  // with parallel tracking.
  optional string final_url_suffix = 65;

  // A list that limits how often each user will see this campaign's ads.
  repeated google.ads.googleads.v21.common.FrequencyCapEntry frequency_caps =
      40;

  // 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.
  google.ads.googleads.v21.enums.BrandSafetySuitabilityEnum
      .BrandSafetySuitability video_brand_safety_suitability = 42;

  // Describes how unbranded pharma ads will be displayed.
  VanityPharma vanity_pharma = 44;

  // 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.
  SelectiveOptimization selective_optimization = 45;

  // Optimization goal setting for this campaign, which includes a set of
  // optimization goal types.
  OptimizationGoalSetting optimization_goal_setting = 54;

  // Output only. Campaign-level settings for tracking information.
  TrackingSetting tracking_setting = 46
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Payment mode for the campaign.
  google.ads.googleads.v21.enums.PaymentModeEnum.PaymentMode payment_mode = 52;

  // 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.
  optional double optimization_score = 66
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // 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.
  repeated google.ads.googleads.v21.enums.AssetFieldTypeEnum.AssetFieldType
      excluded_parent_asset_field_types = 69;

  // 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.
  repeated google.ads.googleads.v21.enums.AssetSetTypeEnum.AssetSetType
      excluded_parent_asset_set_types = 80;

  // 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.
  optional bool url_expansion_opt_out = 72;

  // Output only. Information about campaigns being upgraded to Performance Max.
  PerformanceMaxUpgrade performance_max_upgrade = 77
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Immutable. The resource name for a set of hotel properties for Performance
  // Max for travel goals campaigns.
  optional string hotel_property_asset_set = 83 [
    (google.api.field_behavior) = IMMUTABLE,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/AssetSet"
    }
  ];

  // Immutable. Listing type of ads served for this campaign.
  // Field is restricted for usage with Performance Max campaigns.
  optional google.ads.googleads.v21.enums.ListingTypeEnum.ListingType
      listing_type = 86 [(google.api.field_behavior) = IMMUTABLE];

  // Contains the opt-in/out status of each AssetAutomationType.
  // See documentation of each asset automation type enum for default
  // opt in/out behavior.
  repeated AssetAutomationSetting asset_automation_settings = 88;

  // Keyword match type of Campaign. Set to BROAD to set broad matching for all
  // keywords in a campaign.
  google.ads.googleads.v21.enums.CampaignKeywordMatchTypeEnum
      .CampaignKeywordMatchType keyword_match_type = 90;

  // 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.
  optional bool brand_guidelines_enabled = 96
      [(google.api.field_behavior) = IMMUTABLE];

  // 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.
  BrandGuidelines brand_guidelines = 98;

  // Third-Party integration partners.
  google.ads.googleads.v21.common.CampaignThirdPartyIntegrationPartners
      third_party_integration_partners = 100;

  // Settings for AI Max in search campaigns.
  AiMaxSetting ai_max_setting = 101;

  // The advertiser should self-declare whether this campaign contains
  // political advertising content targeted towards the European Union.
  google.ads.googleads.v21.enums.EuPoliticalAdvertisingStatusEnum
      .EuPoliticalAdvertisingStatus contains_eu_political_advertising = 102;

  // The bidding strategy for the campaign.
  //
  // Must be either portfolio (created through BiddingStrategy service) or
  // standard, that is embedded into the campaign.
  oneof campaign_bidding_strategy {
    // The resource name of the portfolio bidding strategy used by the campaign.
    string bidding_strategy = 67 [(google.api.resource_reference) = {
      type: "googleads.googleapis.com/BiddingStrategy"
    }];

    // Commission is an automatic bidding strategy in which the advertiser pays
    // a certain portion of the conversion value.
    google.ads.googleads.v21.common.Commission commission = 49;

    // 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.
    google.ads.googleads.v21.common.ManualCpa manual_cpa = 74;

    // Standard Manual CPC bidding strategy.
    // Manual click-based bidding where user pays per click.
    google.ads.googleads.v21.common.ManualCpc manual_cpc = 24;

    // Standard Manual CPM bidding strategy.
    // Manual impression-based bidding where user pays per thousand
    // impressions.
    google.ads.googleads.v21.common.ManualCpm manual_cpm = 25;

    // A bidding strategy that pays a configurable amount per video view.
    google.ads.googleads.v21.common.ManualCpv manual_cpv = 37;

    // Standard Maximize Conversions bidding strategy that automatically
    // maximizes number of conversions while spending your budget.
    google.ads.googleads.v21.common.MaximizeConversions maximize_conversions =
        30;

    // Standard Maximize Conversion Value bidding strategy that automatically
    // sets bids to maximize revenue while spending your budget.
    google.ads.googleads.v21.common.MaximizeConversionValue
        maximize_conversion_value = 31;

    // 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.
    google.ads.googleads.v21.common.TargetCpa target_cpa = 26;

    // Target Impression Share bidding strategy. An automated bidding strategy
    // that sets bids to achieve a chosen percentage of impressions.
    google.ads.googleads.v21.common.TargetImpressionShare
        target_impression_share = 48;

    // Standard Target ROAS bidding strategy that automatically maximizes
    // revenue while averaging a specific target return on ad spend (ROAS).
    google.ads.googleads.v21.common.TargetRoas target_roas = 29;

    // Standard Target Spend bidding strategy that automatically sets your bids
    // to help get as many clicks as possible within your budget.
    google.ads.googleads.v21.common.TargetSpend target_spend = 27;

    // Standard Percent Cpc bidding strategy where bids are a fraction of the
    // advertised price for some good or service.
    google.ads.googleads.v21.common.PercentCpc percent_cpc = 34;

    // A bidding strategy that automatically optimizes cost per thousand
    // impressions.
    google.ads.googleads.v21.common.TargetCpm target_cpm = 41;

    // A manual bidding strategy with a fixed CPM.
    google.ads.googleads.v21.common.FixedCpm fixed_cpm = 92;

    // An automated bidding strategy that sets bids to optimize performance
    // given the target CPV you set.
    google.ads.googleads.v21.common.TargetCpv target_cpv = 93;
  }
}
