Cookie Bulk Upload Protocol Buffer

View raw content Back to Reference page

// Protocol version: v.23
// 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 gathered
  // the proper legal consent to share user data with Google for Bulk Upload
  // purposes using the process_consent flag.
  //
  // Bulk Upload partners are required to obtain affirmative end-user consent
  // before adding a user to a user list when applicable by local laws. This
  // includes, but is not limited to, abiding to Google's EU User Consent
  // Policy. See https://www.google.com/about/company/user-consent-policy/. For
  // collected user data which is not subject to affirmative end-user consent,
  // partners are still required to indicate a valid legal basis for sharing
  // data by setting process_consent=True.
  //
  // Starting January 2024, if process_consent is missing or false, an error
  // code is returned but the request is processed. Starting March 2024, if
  // process_consent is missing or false, the request is ignored entirely, and
  // user lists will not be updated as a result of a bulk upload request. This
  // requirement applies to requests from, and to requests containing user data
  // from, all regions regardless of local regulations.
  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 gathered
  // the proper legal consent to share user data with Google for Bulk Upload
  // purposes using the process_consent flag.
  //
  // Bulk Upload partners are required to obtain affirmative end-user consent
  // before adding a user to a user list when applicable by local laws. This
  // includes, but is not limited to, abiding to Google's EU User Consent
  // Policy. See https://www.google.com/about/company/user-consent-policy/. For
  // collected user data which is not subject to affirmative end-user consent,
  // partners are still required to indicate a valid legal basis for sharing
  // data by setting process_consent=True. This requirement applies to requests
  // from, and to requests containing user data from, all regions regardless of
  // local regulations.
  //
  // Starting January 2024, if process_consent is missing or false, an error
  // code is returned but the request is processed.
  MISSING_CONSENT_WILL_BE_DROPPED = 22;
  // Starting March 2024, if process_consent is missing or false, the request is
  // ignored entirely, and user lists will not be updated as a result of a bulk
  // upload request.
  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;
}