// Copyright 2026 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.admanager.v1;

import "google/ads/admanager/v1/applied_label.proto";
import "google/ads/admanager/v1/child_content_eligibility_enum.proto";
import "google/ads/admanager/v1/creative_placeholder.proto";
import "google/ads/admanager/v1/creative_targeting.proto";
import "google/ads/admanager/v1/custom_field_value.proto";
import "google/ads/admanager/v1/custom_pacing_curve.proto";
import "google/ads/admanager/v1/delivery_enums.proto";
import "google/ads/admanager/v1/delivery_indicator.proto";
import "google/ads/admanager/v1/environment_type_enum.proto";
import "google/ads/admanager/v1/exclusion_scope_enum.proto";
import "google/ads/admanager/v1/frequency_cap.proto";
import "google/ads/admanager/v1/goal.proto";
import "google/ads/admanager/v1/grp_settings.proto";
import "google/ads/admanager/v1/line_item_allowed_format_enum.proto";
import "google/ads/admanager/v1/line_item_deal_info.proto";
import "google/ads/admanager/v1/line_item_delivery_forecast_source_enum.proto";
import "google/ads/admanager/v1/line_item_discount.proto";
import "google/ads/admanager/v1/line_item_enums.proto";
import "google/ads/admanager/v1/line_item_stats.proto";
import "google/ads/admanager/v1/skippable_ad_type_enum.proto";
import "google/ads/admanager/v1/targeting.proto";
import "google/ads/admanager/v1/third_party_measurement_settings.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/type/money.proto";

option csharp_namespace = "Google.Ads.AdManager.V1";
option go_package = "google.golang.org/genproto/googleapis/ads/admanager/v1;admanager";
option java_multiple_files = true;
option java_outer_classname = "LineItemMessagesProto";
option java_package = "com.google.ads.admanager.v1";
option php_namespace = "Google\\Ads\\AdManager\\V1";
option ruby_package = "Google::Ads::AdManager::V1";

// A LineItem contains information about how specific ad creatives are intended
// to serve to your website or app along with pricing and other delivery
// details.
message LineItem {
  option (google.api.resource) = {
    type: "admanager.googleapis.com/LineItem"
    pattern: "networks/{network_code}/lineItems/{line_item}"
    plural: "lineItems"
    singular: "lineItem"
  };

  // Identifier. The resource name of the `LineItem`.
  // Format: `networks/{network_code}/lineItems/{line_item_id}`
  string name = 1 [(google.api.field_behavior) = IDENTIFIER];

  // Required. Immutable. The ID of the Order to which the LineItem belongs.
  // Format: `networks/{network_code}/orders/{order}`
  optional string order = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.field_behavior) = IMMUTABLE,
    (google.api.resource_reference) = { type: "admanager.googleapis.com/Order" }
  ];

  // Required. The name of the line item. This attribute has a maximum length of
  // 255 characters.
  optional string display_name = 3 [(google.api.field_behavior) = REQUIRED];

  // Optional. An identifier for the LineItem that is meaningful to the
  // publisher. This attribute has a maximum length of 255 characters.
  optional string external_line_item_id = 4
      [(google.api.field_behavior) = OPTIONAL];

  // Output only. The name of the Order.
  optional string order_display_name = 5
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Required. The date and time on which the LineItem is enabled to begin
  // serving. This attribute is required and must be in the future.
  optional google.protobuf.Timestamp start_time = 6
      [(google.api.field_behavior) = REQUIRED];

  // Optional. The target end time of the line item. This attribute is required
  // unless
  // [end_time_unlimited][google.ads.admanager.v1.LineItem.end_time_unlimited]
  // is set to true. If specified, it must be after the
  // [start_time][google.ads.admanager.v1.LineItem.start_time]. This does not
  // include auto extension days.
  optional google.protobuf.Timestamp target_end_time = 95
      [(google.api.field_behavior) = OPTIONAL];

  // Output only. The timestamp when the LineItem will stop serving. This
  // attribute includes auto extension days.
  optional google.protobuf.Timestamp end_time = 7
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. The number of days to allow a line item to deliver past its
  // [target_end_time][google.ads.admanager.v1.LineItem.target_end_time]. A
  // maximum of 7 days is allowed. This is feature is only available for Ad
  // Manager 360 accounts.
  optional int32 auto_extension_days = 8
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Non-empty default. Specifies whether or not the LineItem has an
  // end time. This attribute defaults to false. It can be be set to true for
  // only line items of type SPONSORSHIP, NETWORK, PRICE_PRIORITY and HOUSE.
  optional bool end_time_unlimited = 9 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Required. The strategy used for displaying multiple Creative objects that
  // are associated with the LineItem.
  optional CreativeRotationTypeEnum.CreativeRotationType
      creative_rotation_type = 10 [(google.api.field_behavior) = REQUIRED];

  // Optional. Non-empty default. The strategy for delivering ads over the
  // course of the line item's duration. This attribute defaults to EVENLY or
  // FRONTLOADED depending on the network's configuration.
  optional LineItemDeliveryRateTypeEnum.LineItemDeliveryRateType
      delivery_rate_type = 11 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. Non-empty default. Strategy for choosing forecasted traffic
  // shapes to pace line items. This field defaults to HISTORICAL.
  optional LineItemDeliveryForecastSourceEnum.LineItemDeliveryForecastSource
      delivery_forecast_source = 12 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. The curve that is used to pace the line item's delivery. This
  // field is required if and only if the delivery forecast source is
  // CUSTOM_PACING_CURVE.
  optional CustomPacingCurve custom_pacing_curve = 13
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Non-empty default. The strategy for serving roadblocked
  // creatives, that is, instances where multiple creatives must be served
  // together on a single web page. This attribute defaults to ONE_OR_MORE.
  optional RoadblockingTypeEnum.RoadblockingType roadblocking_type = 14 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. Non-empty default. The nature of the line item's creatives'
  // skippability. This attribute is only applicable for video line items, and
  // defaults to NOT_SKIPPABLE.
  optional SkippableAdTypeEnum.SkippableAdType skippable_ad_type = 15 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. The set of frequency capping units for this LineItem.
  repeated FrequencyCap frequency_caps = 16
      [(google.api.field_behavior) = OPTIONAL];

  // Required. Indicates the line item type of a LineItem. The line item type
  // determines the default priority of the line item. More information can be
  // found at https://support.google.com/admanager/answer/177279.
  optional LineItemTypeEnum.LineItemType line_item_type = 17
      [(google.api.field_behavior) = REQUIRED];

  // Optional. Non-empty default. The priority for the line item. Valid values
  // range from 1 to 16. This field defaults to the default priority of the
  // LineItemType. The following list shows the default, minimum, and maximum
  // priority values are for each line item type:
  //   - LineItemType: default priority (minimum priority, maximum priority)
  //   - SPONSORSHIP: 4 (2, 5)
  //   - STANDARD: 8 (6, 10)
  //   - NETWORK: 12 (11, 14)
  //   - BULK: 12 (11, 14)
  //   - PRICE_PRIORITY: 12 (11, 14)
  //   - HOUSE: 16 (15, 16)
  //   - CLICK_TRACKING: 16 (1, 16)
  //   - AD_EXCHANGE: 12 (1, 16)
  //   - ADSENSE: 12 (1, 16)
  //   - BUMPER: 16 (15, 16)
  //   - ADMOB: 21 (1, 16)
  //   - PREFERRED_DEAL: 12 (12, 12)
  // This field can only be edited by certain networks, otherwise a
  // PermissionError will occur.
  optional int32 priority = 19 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Required. The amount of money to spend per impression or click.
  optional google.type.Money rate = 20 [(google.api.field_behavior) = REQUIRED];

  // Optional. Non-empty default. An amount to help the adserver rank inventory.
  // [value_cpm][google.ads.admanager.v1.LineItem.value_cpm] artificially raises
  // the value of inventory over the
  // [rate][google.ads.admanager.v1.LineItem.rate] but avoids raising the actual
  // [rate][google.ads.admanager.v1.LineItem.rate]. This attribute defaults to a
  // Money object in the local currency with units and nanos set to 0.
  optional google.type.Money value_cpm = 21 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Required. The method used for billing this LineItem.
  optional LineItemCostTypeEnum.LineItemCostType cost_type = 22
      [(google.api.field_behavior) = REQUIRED];

  // Optional. Discount information for the line item.
  optional LineItemDiscount discount = 23
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. This attribute is only applicable for certain line item types and
  // acts as an "FYI" or note, which does not impact adserving or other backend
  // systems. For SPONSORSHIP line items, this represents the minimum quantity,
  // which is a lifetime impression volume goal for reporting purposes only. For
  // STANDARD line items, this represent the contracted quantity, which is the
  // number of units specified in the contract the advertiser has bought for
  // this LineItem. This field is just a "FYI" for traffickers to manually
  // intervene with the LineItem when needed. This attribute is only available
  // for STANDARD line items if you have this feature enabled on your network.
  optional int64 contracted_units_bought = 24
      [(google.api.field_behavior) = OPTIONAL];

  // Required. Details about the creatives that are expected to serve through
  // this LineItem.
  repeated CreativePlaceholder creative_placeholders = 25
      [(google.api.field_behavior) = REQUIRED];

  // Optional. Non-empty default. The environment that the LineItem is
  // targeting. The default value is BROWSER. If this value is VIDEO_PLAYER,
  // then this line item can only target AdUnits that have AdUnitSizes whose
  // environmentType is also VIDEO_PLAYER.
  optional EnvironmentTypeEnum.EnvironmentType environment_type = 26 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. The delivery option for companions. Setting this field is only
  // meaningful if the following conditions are met:
  //   - The "Guaranteed roadblocks" feature is enabled on your network.
  //   - One of the following is true (both cannot be true, these are mutually
  //   exclusive).
  //     - The environmentType is VIDEO_PLAYER.
  //     - The roadblockingType is CREATIVE_SET.
  // This field defaults to OPTIONAL if the conditions are met.
  // In all other cases it defaults to UNKNOWN and is not meaningful.
  optional CompanionDeliveryOptionEnum.CompanionDeliveryOption
      companion_delivery_option = 27 [(google.api.field_behavior) = OPTIONAL];

  // Input only. The flag indicates whether overbooking should be allowed when
  // creating or updating reservations of line item types SPONSORSHIP and
  // STANDARD. When true, operations on this line item will never
  // trigger a ForecastError, which corresponds to an overbook warning in the
  // UI. The default value is false.  Note: this field won't persist on the
  // line item itself, and the value will only affect the current request.
  optional bool allow_overbook = 28 [(google.api.field_behavior) = INPUT_ONLY];

  // Input only. The flag indicates whether the inventory check should be
  // skipped when creating or updating a line item. The default value is false.
  // Note: this field won't persist on the line item itself, and the value will
  // only affect the current request.
  optional bool skip_inventory_check = 29
      [(google.api.field_behavior) = INPUT_ONLY];

  // Input only. True to skip checks for warnings from rules applied to line
  // items targeting inventory shared by a distributor partner for cross selling
  // when performing an action on this line item. The default is false. Note:
  // this field won't persist on the line item itself, and the value will only
  // affect the current request.
  optional bool skip_cross_selling_rule_warning_checks = 30
      [(google.api.field_behavior) = INPUT_ONLY];

  // Input only. The flag indicates whether inventory should be reserved when
  // creating a line item of types SPONSORSHIP and STANDARD in an unapproved
  // Order. The default value is false.
  optional bool reserve_on_creation = 31
      [(google.api.field_behavior) = INPUT_ONLY];

  // Output only. Contains trafficking statistics for the line item. This will
  // be empty in case there are no statistics for a line item yet.
  optional LineItemStats stats = 32 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Indicates how well the line item has been performing. This
  // will be empty if the delivery indicator information is not available due to
  // one of the following reasons:
  //   - The line item is not delivering.
  //   - The line item has an unlimited goal or cap.
  //   - The line item has a percentage based goal or cap.
  optional DeliveryIndicator delivery_indicator = 33
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The amount of money allocated to the LineItem. This attribute
  // is readonly and is populated by Google. The currency code is readonly.
  optional google.type.Money budget = 35
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The status of the LineItem.
  optional LineItemComputedStatusEnum.LineItemComputedStatus status = 36
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Describes whether or not inventory has been reserved for the
  // LineItem.
  optional LineItemReservationStatusEnum.LineItemReservationStatus
      reservation_status = 38 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The archival status of the LineItem.
  optional bool archived = 39 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. The web property code used for dynamic allocation line items.
  // This web property is only required with line item types AD_EXCHANGE and
  // ADSENSE.
  optional string web_property_code = 49
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The set of labels applied directly to this line item.
  repeated AppliedLabel applied_labels = 50
      [(google.api.field_behavior) = OPTIONAL];

  // Output only. Contains the set of labels inherited from the order that
  // contains this line item and the advertiser that owns the order. If a label
  // has been negated, only the negated label is returned.
  repeated AppliedLabel effective_applied_labels = 51
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. If a line item has a series of competitive exclusions on it, it
  // could be blocked from serving with line items from the same advertiser.
  // Setting this to true will allow line items from the same advertiser to
  // serve regardless of the other competitive exclusion labels being applied.
  optional bool same_advertiser_exception_enabled = 52
      [(google.api.field_behavior) = OPTIONAL];

  // Output only. The application that last modified this line item.
  optional string update_source = 53
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Provides any additional notes that may annotate the LineItem.
  // This attribute has a maximum length of 65,535 characters.
  optional string notes = 54 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Non-empty default. The CompetitiveConstraintScope for the
  // competitive exclusion labels assigned to this line item. This field
  // defaults to POD.
  optional ExclusionScopeEnum.ExclusionScope competitive_constraint_scope = 56 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Output only. The time this line item was last modified.
  optional google.protobuf.Timestamp update_time = 57
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The time this line item was created.
  optional google.protobuf.Timestamp create_time = 58
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. The values of the custom fields associated with this line item.
  repeated CustomFieldValue custom_field_values = 59
      [(google.api.field_behavior) = OPTIONAL];

  // Output only. Indicates if a LineItem is missing any Creative creatives for
  // the creativePlaceholders specified.  Creative Creatives can be considered
  // missing for several reasons including:
  //  - Not enough Creative creatives of a certain size have been uploaded, as
  //    determined by
  //    [expected_creative_count][google.ads.admanager.v1.CreativePlaceholder.expected_creative_count].
  //    For example a LineItem specifies 750x350, 400x200 but only a 750x350 was
  //    uploaded. Or LineItem specifies 750x350 with an expected count of 2, but
  //    only one was uploaded.
  //  - The [Creative.applied_labels][] of an associated Creative don't match
  //    the
  //    [CreativePlaceholder.applied_labels][google.ads.admanager.v1.CreativePlaceholder.applied_labels]
  //    of the LineItem. For example LineItem specifies 750x350 with a Foo
  //    AppliedLabel but a 750x350 creative without a AppliedLabel was uploaded.
  optional bool missing_creatives = 61
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Third party auto-pixeling settings for cross-sell Partners.
  optional ThirdPartyMeasurementSettings third_party_measurement_settings = 67
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Designates this line item as intended for YT Kids app. If true,
  // all creatives associated with this line item must be reviewed and approved.
  // See the help center article for more information:
  // https://support.google.com/yt-partner-sales/answer/10015534.
  optional bool youtube_kids_restricted = 74
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The max duration of a video creative associated with this
  // LineItem. This attribute is only meaningful for video line items. This
  // attribute is required for video line items and must be greater than 0.
  optional google.protobuf.Duration max_video_creative_duration = 75
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The primary goal that this LineItem is associated with, which is
  // used in its pacing and budgeting.
  optional Goal goal = 76 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The secondary goals that this LineItem is associated with. This
  // is required and meaningful only if the
  // [line_item_type][google.ads.admanager.v1.LineItem.line_item_type] is
  // SPONSORSHIP and [cost_type][google.ads.admanager.v1.LineItem.cost_type] is
  // CPM.
  repeated Goal secondary_goals = 100 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Contains the information for a line item which has a target GRP
  // demographic.
  optional GrpSettings grp_settings = 78
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The deal information associated with this line item, if it is
  // programmatic.
  optional LineItemDealInfo deal_info = 79
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Optional IDs of the Company that provide ad verification for this
  // line item.
  repeated string viewability_provider_companies = 85 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.resource_reference) = {
      type: "admanager.googleapis.com/Company"
    }
  ];

  // Optional. Non-empty default. Child content eligibility designation for this
  // line item. This field defaults to DISALLOWED.
  optional ChildContentEligibilityEnum.ChildContentEligibility
      child_content_eligibility = 86 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.field_behavior) = NON_EMPTY_DEFAULT
  ];

  // Optional. Custom XML to be rendered in a custom VAST response at serving
  // time.
  optional string custom_vast_extension = 88
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Whether the line item is enabled for sponsorship exclusivity.  If
  // true, only exclusive sponsorships can be served on inventory targeted by
  // this LineItem. This control should only be available for 100% video
  // sponsorships.
  optional bool sponsorship_exclusivity_enabled = 89
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. Indicates whether repeated creative serving is enabled for this
  // line item.
  optional bool repeated_creative_serving_enabled = 90
      [(google.api.field_behavior) = OPTIONAL];

  // Required. Contains the targeting criteria for the ad campaign.
  optional Targeting targeting = 93 [(google.api.field_behavior) = REQUIRED];

  // Optional. A list of CreativeTargeting objects that can be used to specify
  // creative level targeting for this line item. Creative level targeting is
  // specified in a
  // [CreativePlaceholder.creative_targeting_display_name][google.ads.admanager.v1.CreativePlaceholder.creative_targeting_display_name]
  // field by referencing the [CreativeTargeting.display_name][] field. It also
  // needs to be re-specified in the
  // [LineItemCreativeAssociation.targeting_display_name][] field when
  // associating a line item with a creative that fits into that placeholder.
  repeated CreativeTargeting creative_targetings = 94
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. The set of allowed formats for this line item.
  // If empty, all formats are allowed. This property only applies
  // to programmatic video line items.
  repeated LineItemAllowedFormatEnum.LineItemAllowedFormat allowed_formats = 112
      [(google.api.field_behavior) = OPTIONAL];
}
