// Protocol version: v.24
// Copyright 2024 Google Inc. All Rights Reserved.
// The type of identifier being uploaded.
enum UserIdType {
// A user identifier received through the cookie matching service.
GOOGLE_USER_ID = 0;
// iOS Advertising ID.
IDFA = 1;
// Android Advertising ID.
ANDROID_ADVERTISING_ID = 2;
// Roku ID.
RIDA = 5;
// Amazon Fire TV ID.
AFAI = 6;
// XBOX/Microsoft ID.
MSAI = 7;
// A "generic" category for any UUID formatted device provided ID.
// Allows partner uploads without needing to select a specific,
// pre-existing Device ID type.
GENERIC_DEVICE_ID = 9;
// Partner provided ID. User identifier in partner's namespace.
// If the partner has sent the partner user identifier during cookie matching,
// then Google will be able to store user list membership associated with
// the partner's user identifier.
// See cookie matching documentation:
// https://developers.google.com/authorized-buyers/rtb/cookie-guide
PARTNER_PROVIDED_ID = 4;
}
// Notification code.
enum NotificationCode {
// A cookie is considered inactive if Google has not seen any activity related
// to the cookie in several days.
INACTIVE_COOKIE = 0;
}
// Notification status code.
enum NotificationStatus {
// No need to send notifications for this request.
NO_NOTIFICATION = 0;
// Google decided to not send notifications, even though there were
// notifications to send.
NOTIFICATIONS_OMITTED = 1;
}
// Update data for a single user.
message UserDataOperation {
// User id. The type is determined by the user_id_type field.
//
// Must always be present. Specifies which user this operation applies to.
optional string user_id = 1 [default = ""];
// The type of the user id.
optional UserIdType user_id_type = 14 [default = GOOGLE_USER_ID];
// The id of the userlist. This can be retrieved from the AdX UI for AdX
// customers, the AdWords API for non-AdX customers, or through your Technical
// Account Manager.
optional int64 user_list_id = 4 [default = 0];
// Optional time (seconds since the epoch) when the user performed an action
// causing them to be added to the list. Using the default value of 0
// indicates that the current time on the server should be used.
optional int64 time_added_to_user_list = 5 [default = 0];
// Same as time_added_to_user_list but with finer grained time resolution, in
// microseconds. If both timestamps are specified,
// time_added_to_user_list_in_usec will be used.
optional int64 time_added_to_user_list_in_usec = 8 [default = 0];
// Set to true if the operation is a deletion.
optional bool delete = 6 [default = false];
// Set true if the user opted out from being targeted.
optional bool opt_out = 12 [default = false];
// An id indicating the data source which contributed this membership. The id
// is required to be in the range of 1 to 1000 and any ids greater than this
// will result in an error of type BAD_DATA_SOURCE_ID. These ids don't have
// any semantics for Google and may be used as labels for reporting purposes.
optional int32 data_source_id = 7 [default = 0];
}
// This protocol buffer is used to update user data. It is sent as the payload
// of an HTTPS POST request with the Content-Type header set to
// "application/octet-stream" (preferrably Content-Encoding: gzip).
message UpdateUsersDataRequest {
// Multiple operations over user attributes or user lists.
repeated UserDataOperation ops = 1;
// If true, request sending notifications about the given users in the
// response. Note that in some circumstances notifications may not be sent
// even if requested. In this case the notification_status field of the
// response will be set to NOTIFICATIONS_OMITTED.
optional bool send_notifications = 2 [default = false];
// Partners using the Bulk Upload API must indicate that they have the proper
// legal basis to share user data with Google for Bulk Upload purposes using
// the process_consent parameter. This requirement applies to all Bulk Upload
// requests.
//
// For user data that requires end-user consent as
// required by Google's EU User Consent Policy
// (see https://www.google.com/about/company/user-consent-policy/) or
// by other local laws, partners are required to obtain
// end-user consent and indicate gathered consent
// by setting process_consent=True.
//
// For user data which is not subject to end-user consent requirements,
// partners are required to indicate that consent is not
// required by setting process_consent=True.
//
// Requests without `process_consent=True` will be filtered.
optional bool process_consent = 3 [default = false];
}
// Response error codes.
enum ErrorCode {
NO_ERROR = 0;
// Some of the user data operations failed. See comments in the
// UpdateUserDataResponse
PARTIAL_SUCCESS = 1;
// Provided network_id cannot add data to attribute_id or non-HTTPS.
PERMISSION_DENIED = 2;
// Cannot parse payload.
BAD_DATA = 3;
// Cannot decode provided cookie.
BAD_COOKIE = 4;
// Invalid or closed user_list_id.
BAD_ATTRIBUTE_ID = 5;
// An invalid nid parameter was provided in the request.
BAD_NETWORK_ID = 7;
// Request payload size over allowed limit.
REQUEST_TOO_BIG = 8;
// No UserDataOperation messages in UpdateUsersDataRequest.
EMPTY_REQUEST = 9;
// The server could not process the request due to an internal error. Retrying
// the same request later is suggested.
INTERNAL_ERROR = 10;
// Bad data_source_id -- most likely out of range from [1, 1000].
BAD_DATA_SOURCE_ID = 11;
// The timestamp is a past/future time that is too far from current time.
BAD_TIMESTAMP = 12;
// Partners using the Bulk Upload API must indicate that they have the proper
// legal basis to share user data with Google for Bulk Upload purposes using
// the process_consent parameter. This requirement applies to all Bulk Upload
// requests.
//
// For user data that requires end-user consent as
// required by Google's EU User Consent Policy
// (see https://www.google.com/about/company/user-consent-policy/) or
// by other local laws, partners are required to obtain
// end-user consent and indicate gathered consent
// by setting process_consent=True.
//
// For user data which is not subject to end-user consent requirements,
// partners are required to indicate that consent is not
// required by setting process_consent=True.
//
// Requests where `process_consent` is missing will be filtered and
// return the following error:
MISSING_CONSENT_WILL_BE_DROPPED = 22;
// Requests where `process_consent` is set to `false` will be filtered and
// return the following error:
MISSING_CONSENT = 23;
// Missing internal mapping.
// If operation is PARTNER_PROVIDED_ID, then this error means our mapping
// table does not contain corresponding google user id. This mapping is
// recorded during Cookie Matching.
// For other operations, then it may be internal error.
UNKNOWN_ID = 21;
}
// Information about an error with an individual user operation.
message ErrorInfo {
// The user_list_id in the request which caused problems. This may be empty
// if the problem was with a particular user id.
optional int64 user_list_id = 2 [default = 0];
// The user_id which caused problems. This may be empty if other data was bad
// regardless of a cookie.
optional string user_id = 3 [default = ""];
// The type of the user ID.
optional UserIdType user_id_type = 7 [default = GOOGLE_USER_ID];
optional ErrorCode error_code = 4;
}
// Per user notification information.
message NotificationInfo {
// The user_id for which the notification applies. One of the user_ids sent
// in a UserDataOperation.
optional string user_id = 1 [default = ""];
optional NotificationCode notification_code = 2;
}
// Response to the UpdateUsersDataRequest. Sent in HTTP response to the
// original POST request, with the Content-Type header set to
// "application/octet-stream". The HTTP response status is either 200 (no
// errors) or 400, in which case the protocol buffer will provide error details.
message UpdateUsersDataResponse {
// When status == PARTIAL_SUCCESS, some (not all) of the operations failed and
// the "errors" field has details on the types and number of errors
// encountered. When status == NO_ERROR, all the data was imported
// successfully. When status > PARTIAL_SUCCESS no data was imported.
optional ErrorCode status = 1;
// Each operation that failed is reported as a separate error here when
// status == PARTIAL_SUCCESS.
repeated ErrorInfo errors = 2;
// Useful, non-error, information about the user ids in the request. Each
// NotificationInfo provides information about a single user id. Only sent if
// UpdateUsersDataRequest.send_notifications is set to true.
repeated NotificationInfo notifications = 3;
// Indicates why a notification has not been sent.
optional NotificationStatus notification_status = 4;
}