Skip to content

Commit 559bac6

Browse files
Google APIscopybara-github
authored andcommitted
feat: add encrypted_user_id.proto and the EncryptedUserId resource
feat: add composite_data to AudienceMember to support multiple identifier types feat: add FLOODLIGHT_CONFIG to the list of destination types feat: add conversion_count, dclid, impression_id, match_id, and encrypted_user_ids to the Event resource feat: add new error reasons to ErrorReason for field length, element counts, location detection, and missing insights feat: add new processing error reasons for ID lookup failures and click attribution feat: add composite data ingestion and removal statuses to RequestStatusPerDestination docs: update the comment for value FIELD_VALUE_TOO_LONG in enum ErrorReason docs: update the comment for the `ProcessingErrorReason` enum PiperOrigin-RevId: 922998191
1 parent 8ac3af6 commit 559bac6

8 files changed

Lines changed: 273 additions & 1 deletion

File tree

google/ads/datamanager/v1/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ proto_library(
3030
"consent.proto",
3131
"destination.proto",
3232
"device_info.proto",
33+
"encrypted_user_id.proto",
3334
"encryption_info.proto",
3435
"error.proto",
3536
"event.proto",
@@ -61,6 +62,7 @@ proto_library(
6162
"//google/api:annotations_proto",
6263
"//google/api:client_proto",
6364
"//google/api:field_behavior_proto",
65+
"//google/api:field_info_proto",
6466
"//google/api:resource_proto",
6567
"@com_google_protobuf//:duration_proto",
6668
"@com_google_protobuf//:empty_proto",
@@ -368,6 +370,7 @@ load(
368370

369371
csharp_proto_library(
370372
name = "datamanager_csharp_proto",
373+
extra_opts = [],
371374
deps = [":datamanager_proto"],
372375
)
373376

google/ads/datamanager/v1/audience.proto

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ package google.ads.datamanager.v1;
1919
import "google/ads/datamanager/v1/consent.proto";
2020
import "google/ads/datamanager/v1/user_data.proto";
2121
import "google/api/field_behavior.proto";
22+
import "google/api/field_info.proto";
23+
import "google/protobuf/timestamp.proto";
2224

2325
option csharp_namespace = "Google.Ads.DataManager.V1";
2426
option go_package = "cloud.google.com/go/datamanager/apiv1/datamanagerpb;datamanagerpb";
@@ -58,6 +60,9 @@ message AudienceMember {
5860
//
5961
// This feature is only available to data partners.
6062
PpidData ppid_data = 7;
63+
64+
// Group of multiple identifier types.
65+
CompositeData composite_data = 8;
6166
}
6267

6368
// Optional. The consent setting for the user.
@@ -100,3 +105,35 @@ message PpidData {
100105
// Required. The list of publisher provided identifiers for a user.
101106
repeated string ppids = 1 [(google.api.field_behavior) = REQUIRED];
102107
}
108+
109+
// Composite data holding identifiers and associated data for a user.
110+
// At least one of `user_data` or `ip_data` is required.
111+
message CompositeData {
112+
// Optional. User-provided data that identifies the user.
113+
UserData user_data = 1 [(google.api.field_behavior) = OPTIONAL];
114+
115+
// Optional. IP address data representing customer interaction used to build
116+
// the audience.
117+
repeated IpData ip_data = 2 [(google.api.field_behavior) = OPTIONAL];
118+
}
119+
120+
// IP address information for a user.
121+
// We recommend including observe_start_time and observe_end_time to help
122+
// improve Customer Match match rates.
123+
message IpData {
124+
// Required. IP address captured at the time of customer interaction.
125+
// Accepts standard string formats for both IPv4 and IPv6.
126+
string ip_address = 1 [
127+
(google.api.field_info).format = IPV4_OR_IPV6,
128+
(google.api.field_behavior) = REQUIRED
129+
];
130+
131+
// Optional. First recorded interaction time from this IP address in a
132+
// session.
133+
google.protobuf.Timestamp observe_start_time = 2
134+
[(google.api.field_behavior) = OPTIONAL];
135+
136+
// Optional. Last recorded interaction time from this IP address in a session.
137+
google.protobuf.Timestamp observe_end_time = 3
138+
[(google.api.field_behavior) = OPTIONAL];
139+
}

google/ads/datamanager/v1/destination.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ message ProductAccount {
9191

9292
// Google Ad Manager audience link.
9393
GOOGLE_AD_MANAGER_AUDIENCE_LINK = 6;
94+
95+
// Floodlight configuration.
96+
FLOODLIGHT_CONFIG = 7;
9497
}
9598

9699
// Deprecated. Use
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright 2026 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
syntax = "proto3";
16+
17+
package google.ads.datamanager.v1;
18+
19+
import "google/api/field_behavior.proto";
20+
21+
option csharp_namespace = "Google.Ads.DataManager.V1";
22+
option go_package = "cloud.google.com/go/datamanager/apiv1/datamanagerpb;datamanagerpb";
23+
option java_multiple_files = true;
24+
option java_outer_classname = "EncryptedUserIdProto";
25+
option java_package = "com.google.ads.datamanager.v1";
26+
option php_namespace = "Google\\Ads\\DataManager\\V1";
27+
option ruby_package = "Google::Ads::DataManager::V1";
28+
29+
// A user identifier issued to be used for attribution. All fields are
30+
// required if this is used.
31+
message EncryptedUserId {
32+
// The encryption entity type.
33+
enum EncryptionEntityType {
34+
// Unspecified encryption entity type.
35+
ENCRYPTION_ENTITY_TYPE_UNSPECIFIED = 0;
36+
37+
// Campaign Manager 360 account.
38+
CAMPAIGN_MANAGER_ACCOUNT = 1;
39+
40+
// Campaign Manager 360 advertiser.
41+
CAMPAIGN_MANAGER_ADVERTISER = 2;
42+
43+
// Display & Video 360 partner.
44+
DISPLAY_VIDEO_PARTNER = 3;
45+
46+
// Display & Video 360 advertiser.
47+
DISPLAY_VIDEO_ADVERTISER = 4;
48+
49+
// Google Ads customer.
50+
GOOGLE_ADS_CUSTOMER = 5;
51+
52+
// Google Ad Manager network code.
53+
GOOGLE_AD_MANAGER_NETWORK_CODE = 6;
54+
}
55+
56+
// The encryption source.
57+
enum EncryptionSource {
58+
// Unspecified encryption source.
59+
ENCRYPTION_SOURCE_UNSPECIFIED = 0;
60+
61+
// Ad serving encryption source.
62+
AD_SERVING = 1;
63+
64+
// Data transfer encryption source.
65+
DATA_TRANSFER = 2;
66+
}
67+
68+
// Required. The alphanumeric encrypted id.
69+
string encrypted_id = 1 [(google.api.field_behavior) = REQUIRED];
70+
71+
// Required. The encryption entity type. This should match the encryption
72+
// configuration for ad serving or Data Transfer.
73+
EncryptionEntityType entity_type = 2 [(google.api.field_behavior) = REQUIRED];
74+
75+
// Required. The encryption entity ID. This should match the encryption
76+
// configuration for ad serving or Data Transfer.
77+
int64 entity_id = 3 [(google.api.field_behavior) = REQUIRED];
78+
79+
// Required. Describes whether the encrypted cookie was received from ad
80+
// serving (the %m macro) or from Data Transfer.
81+
EncryptionSource source = 4 [(google.api.field_behavior) = REQUIRED];
82+
}

google/ads/datamanager/v1/error.proto

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,18 @@ enum ErrorReason {
184184
// An event had 2 or more Google Analytics destinations.
185185
MULTIPLE_DESTINATIONS_FOR_GOOGLE_ANALYTICS_EVENT = 49;
186186

187-
// The field value is too long.
187+
// Length of the field value is too long.
188188
FIELD_VALUE_TOO_LONG = 50;
189189

190+
// Length of the field value is too short.
191+
FIELD_VALUE_TOO_SHORT = 106;
192+
190193
// Too many elements in a list in the request.
191194
TOO_MANY_ELEMENTS = 51;
192195

196+
// Too few elements in a list in the request.
197+
TOO_FEW_ELEMENTS = 105;
198+
193199
// The resource already exists.
194200
ALREADY_EXISTS = 52;
195201

@@ -399,4 +405,13 @@ enum ErrorReason {
399405
// The destination does not have a custom variable with a name that matches
400406
// the specified `variable`.
401407
CUSTOM_VARIABLE_NOT_FOUND = 120;
408+
409+
// The
410+
// [location_auto_detection_enabled][google.ads.datamanager.v1.Baseline.location_auto_detection_enabled]
411+
// field of the request was set to `true`, but auto detection of baseline
412+
// location failed.
413+
BASELINE_LOCATION_AUTO_DETECTION_FAILED = 122;
414+
415+
// Insights missing for this dimension.
416+
INSIGHTS_MISSING_FOR_DIMENSION = 123;
402417
}

google/ads/datamanager/v1/event.proto

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package google.ads.datamanager.v1;
1919
import "google/ads/datamanager/v1/cart_data.proto";
2020
import "google/ads/datamanager/v1/consent.proto";
2121
import "google/ads/datamanager/v1/device_info.proto";
22+
import "google/ads/datamanager/v1/encrypted_user_id.proto";
2223
import "google/ads/datamanager/v1/experimental_field.proto";
2324
import "google/ads/datamanager/v1/user_data.proto";
2425
import "google/ads/datamanager/v1/user_properties.proto";
@@ -74,6 +75,11 @@ message Event {
7475
// conversions.
7576
optional double conversion_value = 9 [(google.api.field_behavior) = OPTIONAL];
7677

78+
// Optional. The conversion quantity associated with the event, for
79+
// counting-based conversions.
80+
optional double conversion_count = 23
81+
[(google.api.field_behavior) = OPTIONAL];
82+
7783
// Optional. Signal for where the event happened (web, app, in-store, etc.).
7884
EventSource event_source = 10 [(google.api.field_behavior) = OPTIONAL];
7985

@@ -155,6 +161,19 @@ message AdIdentifiers {
155161
// Optional. The mobile identifier for advertisers. This would be IDFA on iOS,
156162
// AdID on Android, or other platforms’ identifiers for advertisers.
157163
string mobile_device_id = 6 [(google.api.field_behavior) = OPTIONAL];
164+
165+
// Optional. The display click ID associated with this event.
166+
string dclid = 7 [(google.api.field_behavior) = OPTIONAL];
167+
168+
// Optional. The impression ID associated with this event.
169+
string impression_id = 8 [(google.api.field_behavior) = OPTIONAL];
170+
171+
// Optional. The match ID field used to join this event with a previous event.
172+
string match_id = 9 [(google.api.field_behavior) = OPTIONAL];
173+
174+
// Optional. Any number of encrypted user IDs.
175+
repeated EncryptedUserId encrypted_user_ids = 10
176+
[(google.api.field_behavior) = OPTIONAL];
158177
}
159178

160179
// Custom variable for ads conversions.

google/ads/datamanager/v1/processing_errors.proto

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ message WarningCount {
5656
}
5757

5858
// The processing error reason.
59+
// New reasons may be added in the future.
5960
enum ProcessingErrorReason {
6061
// The processing error reason is unknown.
6162
PROCESSING_ERROR_REASON_UNSPECIFIED = 0;
@@ -154,6 +155,54 @@ enum ProcessingErrorReason {
154155
// One-per-click conversion actions cannot be used with BRAIDs.
155156
PROCESSING_ERROR_REASON_ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID =
156157
28;
158+
159+
// The match ID can not be found.
160+
PROCESSING_ERROR_REASON_MATCH_ID_NOT_FOUND = 29;
161+
162+
// The user ID can not be found for the match ID.
163+
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_MATCH_ID = 30;
164+
165+
// The user ID can not be found for the GCLID.
166+
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_GCLID = 31;
167+
168+
// The user ID can not be found for the DCLID.
169+
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_DCLID = 32;
170+
171+
// There are ad identifiers that are invalid.
172+
PROCESSING_ERROR_REASON_INVALID_AD_IDENTIFIERS = 33;
173+
174+
// The mobile ID format is invalid.
175+
PROCESSING_ERROR_REASON_INVALID_MOBILE_ID_FORMAT = 34;
176+
177+
// The original conversions can't be found.
178+
PROCESSING_ERROR_REASON_ORIGINAL_CONVERSIONS_NOT_FOUND = 35;
179+
180+
// The event ID (dclid or impression ID) cannot be decoded.
181+
PROCESSING_ERROR_REASON_EVENT_ID_DECODE_ERROR = 36;
182+
183+
// The user ID cannot be found for the given impression ID.
184+
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND_FOR_IMPRESSION_ID = 37;
185+
186+
// The user ID cannot be found.
187+
PROCESSING_ERROR_REASON_USER_ID_NOT_FOUND = 38;
188+
189+
// The event timestamp on the event was earlier than the associated click.
190+
PROCESSING_ERROR_REASON_CONVERSION_PRECEDES_CLICK = 39;
191+
192+
// The click occurred too recently.
193+
PROCESSING_ERROR_REASON_TOO_RECENT_CLICK = 40;
194+
195+
// The event can't be attributed to a click (GCLID). This may be because the
196+
// click did not come from a Google Ads campaign, for example.
197+
PROCESSING_ERROR_REASON_INVALID_CLICK = 41;
198+
199+
// The click from the event isn't associated with the
200+
// [`operating_account`][google.ads.datamanager.v1.Destination.operating_account]
201+
// of the destination.
202+
PROCESSING_ERROR_REASON_INVALID_OPERATING_ACCOUNT_FOR_CLICK = 42;
203+
204+
// A corresponding click can't be found that matches the provided attributes.
205+
PROCESSING_ERROR_REASON_CLICK_NOT_FOUND = 43;
157206
}
158207

159208
// The processing warning reason.

google/ads/datamanager/v1/request_status_per_destination.proto

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ message RequestStatusPerDestination {
7878

7979
// The status of the ppid data ingestion to the destination.
8080
IngestPpidDataStatus ppid_data_ingestion_status = 5;
81+
82+
// The status of the composite data ingestion to the destination.
83+
IngestCompositeDataStatus composite_data_ingestion_status = 6;
8184
}
8285
}
8386

@@ -99,6 +102,9 @@ message RequestStatusPerDestination {
99102

100103
// The status of the ppid data removal from the destination.
101104
RemovePpidDataStatus ppid_data_removal_status = 5;
105+
106+
// The status of the composite data removal from the destination.
107+
RemoveCompositeDataStatus composite_data_removal_status = 6;
102108
}
103109
}
104110

@@ -248,6 +254,64 @@ message RequestStatusPerDestination {
248254
int64 ppid_count = 2;
249255
}
250256

257+
// The status of the composite data ingestion to the destination containing
258+
// stats related to the ingestion.
259+
message IngestCompositeDataStatus {
260+
// The total count of audience members sent in the upload request for the
261+
// destination. Includes all audience members in the request, regardless of
262+
// whether they were successfully ingested or not.
263+
int64 record_count = 1;
264+
265+
// The total count of data types sent in the upload request for the
266+
// destination, broken down by data type. Includes all data types in
267+
// the request, regardless of whether they were successfully ingested or
268+
// not.
269+
repeated DataTypeCount data_type_counts = 2;
270+
271+
// The match rate range of the upload.
272+
MatchRateRange upload_match_rate_range = 3;
273+
}
274+
275+
// The status of the composite data removal from the destination.
276+
message RemoveCompositeDataStatus {
277+
// The total count of audience members sent in the removal request. Includes
278+
// all audience members in the request, regardless of whether they were
279+
// successfully removed or not.
280+
int64 record_count = 1;
281+
282+
// The total count of data types sent in the removal request, broken down
283+
// by data type. Includes all data types in the request, regardless
284+
// of whether they were successfully removed or not.
285+
repeated DataTypeCount data_type_counts = 2;
286+
}
287+
288+
// The count for a specific data type.
289+
message DataTypeCount {
290+
// The type of data.
291+
DataType type = 1;
292+
293+
// The count for this data type.
294+
int64 count = 2;
295+
}
296+
297+
// The type of data.
298+
enum DataType {
299+
// The data type is unspecified.
300+
DATA_TYPE_UNSPECIFIED = 0;
301+
302+
// The data is an email address.
303+
EMAIL = 1;
304+
305+
// The data is a phone number.
306+
PHONE_NUMBER = 2;
307+
308+
// The data is a physical address.
309+
ADDRESS = 3;
310+
311+
// The data is an IP address.
312+
IP_ADDRESS = 4;
313+
}
314+
251315
// A destination within a DM API request.
252316
Destination destination = 1;
253317

0 commit comments

Comments
 (0)