Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ package google.ads.datamanager.v1;
import "google/ads/datamanager/v1/consent.proto";
import "google/ads/datamanager/v1/user_data.proto";
import "google/api/field_behavior.proto";
import "google/api/field_info.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Ads.DataManager.V1";
option go_package = "cloud.google.com/go/datamanager/apiv1/datamanagerpb;datamanagerpb";
Expand Down Expand Up @@ -58,6 +60,9 @@ message AudienceMember {
//
// This feature is only available to data partners.
PpidData ppid_data = 7;

// Group of multiple identifier types.
CompositeData composite_data = 8;
}

// Optional. The consent setting for the user.
Expand Down Expand Up @@ -100,3 +105,35 @@ message PpidData {
// Required. The list of publisher provided identifiers for a user.
repeated string ppids = 1 [(google.api.field_behavior) = REQUIRED];
}

// Composite data holding identifiers and associated data for a user.
// At least one of `user_data` or `ip_data` is required.
message CompositeData {
// Optional. User-provided data that identifies the user.
UserData user_data = 1 [(google.api.field_behavior) = OPTIONAL];

// Optional. IP address data representing customer interaction used to build
// the audience.
repeated IpData ip_data = 2 [(google.api.field_behavior) = OPTIONAL];
}

// IP address information for a user.
// We recommend including observe_start_time and observe_end_time to help
// improve Customer Match match rates.
message IpData {
// Required. IP address captured at the time of customer interaction.
// Accepts standard string formats for both IPv4 and IPv6.
string ip_address = 1 [
(google.api.field_info).format = IPV4_OR_IPV6,
(google.api.field_behavior) = REQUIRED
];

// Optional. First recorded interaction time from this IP address in a
// session.
google.protobuf.Timestamp observe_start_time = 2
[(google.api.field_behavior) = OPTIONAL];

// Optional. Last recorded interaction time from this IP address in a session.
google.protobuf.Timestamp observe_end_time = 3
[(google.api.field_behavior) = OPTIONAL];
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ message ProductAccount {

// Google Ad Manager audience link.
GOOGLE_AD_MANAGER_AUDIENCE_LINK = 6;

// Floodlight configuration.
FLOODLIGHT_CONFIG = 7;
}

// Deprecated. Use
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// 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.datamanager.v1;

import "google/api/field_behavior.proto";

option csharp_namespace = "Google.Ads.DataManager.V1";
option go_package = "cloud.google.com/go/datamanager/apiv1/datamanagerpb;datamanagerpb";
option java_multiple_files = true;
option java_outer_classname = "EncryptedUserIdProto";
option java_package = "com.google.ads.datamanager.v1";
option php_namespace = "Google\\Ads\\DataManager\\V1";
option ruby_package = "Google::Ads::DataManager::V1";

// A user identifier issued to be used for attribution. All fields are
// required if this is used.
message EncryptedUserId {
// The encryption entity type.
enum EncryptionEntityType {
// Unspecified encryption entity type.
ENCRYPTION_ENTITY_TYPE_UNSPECIFIED = 0;

// Campaign Manager 360 account.
CAMPAIGN_MANAGER_ACCOUNT = 1;

// Campaign Manager 360 advertiser.
CAMPAIGN_MANAGER_ADVERTISER = 2;

// Display & Video 360 partner.
DISPLAY_VIDEO_PARTNER = 3;

// Display & Video 360 advertiser.
DISPLAY_VIDEO_ADVERTISER = 4;

// Google Ads customer.
GOOGLE_ADS_CUSTOMER = 5;

// Google Ad Manager network code.
GOOGLE_AD_MANAGER_NETWORK_CODE = 6;
}

// The encryption source.
enum EncryptionSource {
// Unspecified encryption source.
ENCRYPTION_SOURCE_UNSPECIFIED = 0;

// Ad serving encryption source.
AD_SERVING = 1;

// Data transfer encryption source.
DATA_TRANSFER = 2;
}

// Required. The alphanumeric encrypted id.
string encrypted_id = 1 [(google.api.field_behavior) = REQUIRED];

// Required. The encryption entity type. This should match the encryption
// configuration for ad serving or Data Transfer.
EncryptionEntityType entity_type = 2 [(google.api.field_behavior) = REQUIRED];

// Required. The encryption entity ID. This should match the encryption
// configuration for ad serving or Data Transfer.
int64 entity_id = 3 [(google.api.field_behavior) = REQUIRED];

// Required. Describes whether the encrypted cookie was received from ad
// serving (the %m macro) or from Data Transfer.
EncryptionSource source = 4 [(google.api.field_behavior) = REQUIRED];
}
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,18 @@ enum ErrorReason {
// An event had 2 or more Google Analytics destinations.
MULTIPLE_DESTINATIONS_FOR_GOOGLE_ANALYTICS_EVENT = 49;

// The field value is too long.
// Length of the field value is too long.
FIELD_VALUE_TOO_LONG = 50;

// Length of the field value is too short.
FIELD_VALUE_TOO_SHORT = 106;

// Too many elements in a list in the request.
TOO_MANY_ELEMENTS = 51;

// Too few elements in a list in the request.
TOO_FEW_ELEMENTS = 105;

// The resource already exists.
ALREADY_EXISTS = 52;

Expand Down Expand Up @@ -399,4 +405,13 @@ enum ErrorReason {
// The destination does not have a custom variable with a name that matches
// the specified `variable`.
CUSTOM_VARIABLE_NOT_FOUND = 120;

// The
// [location_auto_detection_enabled][google.ads.datamanager.v1.Baseline.location_auto_detection_enabled]
// field of the request was set to `true`, but auto detection of baseline
// location failed.
BASELINE_LOCATION_AUTO_DETECTION_FAILED = 122;

// Insights missing for this dimension.
INSIGHTS_MISSING_FOR_DIMENSION = 123;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package google.ads.datamanager.v1;
import "google/ads/datamanager/v1/cart_data.proto";
import "google/ads/datamanager/v1/consent.proto";
import "google/ads/datamanager/v1/device_info.proto";
import "google/ads/datamanager/v1/encrypted_user_id.proto";
import "google/ads/datamanager/v1/experimental_field.proto";
import "google/ads/datamanager/v1/user_data.proto";
import "google/ads/datamanager/v1/user_properties.proto";
Expand Down Expand Up @@ -74,6 +75,11 @@ message Event {
// conversions.
optional double conversion_value = 9 [(google.api.field_behavior) = OPTIONAL];

// Optional. The conversion quantity associated with the event, for
// counting-based conversions.
optional double conversion_count = 23
[(google.api.field_behavior) = OPTIONAL];

// Optional. Signal for where the event happened (web, app, in-store, etc.).
EventSource event_source = 10 [(google.api.field_behavior) = OPTIONAL];

Expand Down Expand Up @@ -155,6 +161,19 @@ message AdIdentifiers {
// Optional. The mobile identifier for advertisers. This would be IDFA on iOS,
// AdID on Android, or other platforms’ identifiers for advertisers.
string mobile_device_id = 6 [(google.api.field_behavior) = OPTIONAL];

// Optional. The display click ID associated with this event.
string dclid = 7 [(google.api.field_behavior) = OPTIONAL];

// Optional. The impression ID associated with this event.
string impression_id = 8 [(google.api.field_behavior) = OPTIONAL];

// Optional. The match ID field used to join this event with a previous event.
string match_id = 9 [(google.api.field_behavior) = OPTIONAL];

// Optional. Any number of encrypted user IDs.
repeated EncryptedUserId encrypted_user_ids = 10
[(google.api.field_behavior) = OPTIONAL];
}

// Custom variable for ads conversions.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ message WarningCount {
}

// The processing error reason.
// New reasons may be added in the future.
enum ProcessingErrorReason {
// The processing error reason is unknown.
PROCESSING_ERROR_REASON_UNSPECIFIED = 0;
Expand Down Expand Up @@ -154,6 +155,54 @@ enum ProcessingErrorReason {
// One-per-click conversion actions cannot be used with BRAIDs.
PROCESSING_ERROR_REASON_ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID =
28;

// The match ID can not be found.
PROCESSING_ERROR_REASON_MATCH_ID_NOT_FOUND = 29;

// The user ID can not be found for the match ID.
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_MATCH_ID = 30;

// The user ID can not be found for the GCLID.
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_GCLID = 31;

// The user ID can not be found for the DCLID.
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_DCLID = 32;

// There are ad identifiers that are invalid.
PROCESSING_ERROR_REASON_INVALID_AD_IDENTIFIERS = 33;

// The mobile ID format is invalid.
PROCESSING_ERROR_REASON_INVALID_MOBILE_ID_FORMAT = 34;

// The original conversions can't be found.
PROCESSING_ERROR_REASON_ORIGINAL_CONVERSIONS_NOT_FOUND = 35;

// The event ID (dclid or impression ID) cannot be decoded.
PROCESSING_ERROR_REASON_EVENT_ID_DECODE_ERROR = 36;

// The user ID cannot be found for the given impression ID.
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_IMPRESSION_ID = 37;

// The user ID cannot be found.
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND = 38;

// The event timestamp on the event was earlier than the associated click.
PROCESSING_ERROR_REASON_CONVERSION_PRECEDES_CLICK = 39;

// The click occurred too recently.
PROCESSING_ERROR_REASON_TOO_RECENT_CLICK = 40;

// The event can't be attributed to a click (GCLID). This may be because the
// click did not come from a Google Ads campaign, for example.
PROCESSING_ERROR_REASON_INVALID_CLICK = 41;

// The click from the event isn't associated with the
// [`operating_account`][google.ads.datamanager.v1.Destination.operating_account]
// of the destination.
PROCESSING_ERROR_REASON_INVALID_OPERATING_ACCOUNT_FOR_CLICK = 42;

// A corresponding click can't be found that matches the provided attributes.
PROCESSING_ERROR_REASON_CLICK_NOT_FOUND = 43;
}

// The processing warning reason.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ message RequestStatusPerDestination {

// The status of the ppid data ingestion to the destination.
IngestPpidDataStatus ppid_data_ingestion_status = 5;

// The status of the composite data ingestion to the destination.
IngestCompositeDataStatus composite_data_ingestion_status = 6;
}
}

Expand All @@ -99,6 +102,9 @@ message RequestStatusPerDestination {

// The status of the ppid data removal from the destination.
RemovePpidDataStatus ppid_data_removal_status = 5;

// The status of the composite data removal from the destination.
RemoveCompositeDataStatus composite_data_removal_status = 6;
}
}

Expand Down Expand Up @@ -248,6 +254,64 @@ message RequestStatusPerDestination {
int64 ppid_count = 2;
}

// The status of the composite data ingestion to the destination containing
// stats related to the ingestion.
message IngestCompositeDataStatus {
// The total count of audience members sent in the upload request for the
// destination. Includes all audience members in the request, regardless of
// whether they were successfully ingested or not.
int64 record_count = 1;

// The total count of data types sent in the upload request for the
// destination, broken down by data type. Includes all data types in
// the request, regardless of whether they were successfully ingested or
// not.
repeated DataTypeCount data_type_counts = 2;

// The match rate range of the upload.
MatchRateRange upload_match_rate_range = 3;
}

// The status of the composite data removal from the destination.
message RemoveCompositeDataStatus {
// The total count of audience members sent in the removal request. Includes
// all audience members in the request, regardless of whether they were
// successfully removed or not.
int64 record_count = 1;

// The total count of data types sent in the removal request, broken down
// by data type. Includes all data types in the request, regardless
// of whether they were successfully removed or not.
repeated DataTypeCount data_type_counts = 2;
}

// The count for a specific data type.
message DataTypeCount {
// The type of data.
DataType type = 1;

// The count for this data type.
int64 count = 2;
}

// The type of data.
enum DataType {
// The data type is unspecified.
DATA_TYPE_UNSPECIFIED = 0;

// The data is an email address.
EMAIL = 1;

// The data is a phone number.
PHONE_NUMBER = 2;

// The data is a physical address.
ADDRESS = 3;

// The data is an IP address.
IP_ADDRESS = 4;
}

// A destination within a DM API request.
Destination destination = 1;

Expand Down
Loading
Loading