MyPreferences 3.0 ## Sections • [Overview](https://docs.mypreferences.com/overview.md): Getting started with the MyPreferences 3.0 Version 4 API is easy. Before diving in, take a moment to review the supported authorization options and understand how the API library is organized within the MyPreferences core framework. Using API's Refer to the Authorization section to discover the different authorization methods supported for accessing the MyPreferences API. The MyPreferences API is a RESTful service that follows the principles of Representational State Transfer (REST). It exposes configuration objects and data as resources, each accessible through a unique URL, commonly referred to as an endpoint. In general, the API supports the following request methods: GET : To retrieve a resource POST : To create a new resource Note: Within the Data API collection, the UpdateProfile method is accessible through a POST request to efficiently update a profile. This purpose-built design empowers client-facing apps to modify profiles directly, eliminating the need to retrieve them beforehand. PUT : To update (overwrite) an existing resource PATCH : To perform partial updates to an existing resource DELETE : To delete a resource To access the Swagger specification of the MyPreferences API, click here . API Categorization The API's are categorized into three separate sets with distinct functionalities based on the application's core framework: Experiences , Data , and Connectivity. MyPreferences Framework Data Categorization In MyPreferences, data is organized into three core areas: Profiles, Preferences, and Consents. Together, these components form a unified customer profile, providing a comprehensive view of each individual’s preferences, consents, and zero-party data across all channels and interactions throughout their journey. Profiles The Profiles area stores a wide range of customer data, including names, contact details, group affiliations, interests, and various demographic and psychographic attributes. Profiles also support multiple Alternate IDs, such as system or device identifiers, enabling you to uniquely identify individuals across different systems within your enterprise. Preferences The Preferences area captures all customer choices, including subscriptions, communication frequency, engagement channels, and preference attributes. It is designed with built-in rules to ensure the correct preference is honored, preferences are propagated appropriately, expiration is applied, and associated consents are enforced. A complete preference history is maintained to support auditing and analytical use cases. Consents The Consents area acts as a centralized consent repository for storing and managing all customer consents. It supports unlimited granularity, allowing consents to be associated with an individual, device, or application, as well as linked to specific contact elements or preference communications. Built-in rules enable consent propagation across similar contacts, expiration management, automatic notification when new consent versions are available, and full consent history retention for audit and analysis purposes. Status Manager Addon: MyPreferences customers can subscribe to the Status Manager 3.0 addon to enable real-time status updates for phone numbers and email addresses on profiles. This feature continuously scrubs contact data against Do Not Contact (DNC) lists to ensure compliance. Seamless enablement of National and State Do Not Contact lists, including Wireless Block Identifier, iConnectiv Wireless Portability, Telcordia TDS and others. Automatic archival of Do Not Contact preferences associated with phone and email when removed from DNC lists. For example, when a number is added to a DNC list, its calling status is updated in real time on profiles. Automatic revocation of consents associated with a preference whose phone number or email address gets added to a DNC list. Automatic updates of wireless status across all phone numbers. • [Authorization](https://docs.mypreferences.com/overview/authorization.md): All MyPreferences 3.0 Version 4 API users can securely access and interact with MyPreferences APIs using two different authorization methods: OAuth (client-credentials) and Custom Authorization Scheme . OAuth (Client-Credentials) OAuth is a widely adopted industry-standard protocol that enables secure and controlled access to resources. With OAuth (client-credentials) authorization, your application can access MyPreferences API without the need to share sensitive credentials. To get started with OAuth 2.0 (client-credentials) authorization, visit the OAuth section. Custom Authorization Scheme In addition to OAuth, we offer a custom authorization scheme that caters to specific use cases and security requirements. Our custom authorization scheme offers advanced access control to resources, providing an alternative authorization method for clients that may not be equipped to implement OAuth. With this custom approach, clients can securely interact with our API and leverage its robust authorization capabilities. For comprehensive details on using our custom authorization scheme, please refer to the Custom Auth Scheme section. • [OAuth](https://docs.mypreferences.com/overview/authorization/oauth.md): MyPreferences APIs support the OAuth 2.0 Client Credentials Flow for authentication and authorization. In this flow, the client application exchanges its client credentials which includes their MyPreferences Client ID and Client Secret for an access token. Before you begin, you will require a unique client_id and client_secret for your app. Notify your Implementation Manager or PossibleNOW Support at support@possiblenow.com requesting an OAuth client_id and client_secret . Include your MyPreferences Client ID and the environment (Staging (Sandbox) / Production) for which you want to generate the credentials in your request. These credentials must be treated securely. OAuth Flow Send client credentials to the MyPreferences OAuth Token API via a POST request. The OAuth Token API validates the client credentials and returns an access token. You can now use the access token to access MyPreferences REST API. The MyPreferences REST API will grant access to the requested resource and returns data based on the permissions associated with your API user. OAuth Token endpoints: Staging: https://authstg.mypreferences.com/oauth2/v1/token Production: https://auth.mypreferences.com/oauth2/v1/token Request an Access Token The following parameters are required and must be included in your request. Title Description Parameter Description client_id A 48-character static string that represents the OAuth client id. Note: This is the OAuth Client Id which is different than the MyPreferences Client Id. The MyPreferences Client Id is a required path parameter on all MyPreferences REST API's. client_secret A 64-character randomized secret key. The client secret can be rotated on a regular basis for enhanced security. You can also utilize a certificate in place of the client secret. See below for more details. scope Scope associated with the access request. This should include the MyPreferences clientId and userId concatenated by a forward slash (/) resulting in the format “ ClientId/UserId .” grant_type This represents the OAuth 2.0 grant type which must be set to Client Credentials . To initiate the flow, post your client credentials to the token endpoint. You can include the client credentials as parameters as Basic Authorization Header or the request body. The token endpoints requires the "scope" request parameter which includes your MyPreferences client_Id and userId concatenated using a forward slash as shown below. ACME_CORP/John.Doe A sample POST request with the client credentials as Basic Authorization Header . The client_Id and client_secret should be combined into a string in the format client_id:client_secret, and then Base64-encoded. The resulting string is included in the Authorization header with the value Basic <base64-encoded-string> as shown below. Plain text POST /oauth2/v1/token HTTP/1.1 Host: authstg.mypreferences.com Content-Type: application/x-www-form-urlencoded Accept: application/json Authorization: Basic e3tyZXBsYWNld2l0aGNsaWVudGlkfX06e3tyZXBsYWNld2l0aGNsaWVudHNlY3JldH19 grant_type=client_credentials&scope=ACME_CORP%2FJohn.Doe A sample POST request with the client credentials in the request body . Plain text POST /oauth2/v1/token HTTP/1.1 Host: authstg.mypreferences.com Content-Type: application/x-www-form-urlencoded Accept: application/json grant_type=client_credentials&scope=ACME_CORP%2FJohn.Doe&client_id={{clientid}}&client_secret={{clientsecret}} The OAuth 2.0 Client Credentials flow does not support the use of refresh tokens. The OAuth Token API grants an Access Token Once your request is validated successfully, the OAuth Token endpoint returns a response containing the access token. Your app can use the access token to access the MyPreferences API. Here’s a sample access token response in JSON format. Plain text HTTP/1.1 200 OK Content-Length: 992 Content-Type: application/json; charset=UTF-8 { "access_token":"ewogICJhbGciOiJSUzI1NiIsCiAgImtpZCI6InN0YWdpbmctbXlwcmVmX29hdXRoLWp3dC1rZXkiCn0.ewogICJ0b2tlbl90eXBlIjoiQmVhcmVyIiwKICAidXNlcm5hbWUiOiJudWxsIiwKICAiaXNzIjoiaHR0cHM6Ly9hdXRoc3RnLm15cHJlZmVyZW5jZXMuY29tL29hdXRoMi92MSIsCiAgImF1ZCI6WwogICAgImh0dHBzOi8vcG1zdGcubXlwcmVmZXJlbmNlcy5jb20vcHJvZmlsZXMvdjIiCiAgXSwKICAic3ViIjoiT09RSUFfVHJhaW5pbmdfVjIvT09RSUFfVHJhaW5pbmdfVjJfYWR2b2lub3Nfc3RnIiwKICAianRpIjoiYjdjNmExYWZmNDA3NGZkMzMzYmE0MDk0OTAyOGYzNTQwYTU1ZmNhNTdiMjlhNTA5YTNiMTRhNGZmNTFjNzcyYiIsCiAgImlhdCI6MTY5MDgxMzA2NSwKICAiZXhwIjoxNjkkwODEzMzY1LAogICJuYmYiOjE2OTA4MTI3NjUKfQ.tnBS14QlL7iasWx6mCY7f0CtvVY0N1C2QJVuguGNyMtxkRMyJm6RDzJ0c_FlYZA0mpHnUpOGFuN2s-_F_iPehzPwa9wJwmb04BBn_Qa7y4QMRcSUTTlKqHXfaaexdW2risajUiFynuI0PutNJ75fStdXIaEGJUQtE9M8Pkx-yYvP2_xWC1aURqeYREp831-DuK41NeDHObUEDrdqdaOSm7x6LdOUuUqmuBg5uxj4RJwNOAx1gOuTOtH43RuyKpAPS6E6KeXYTivG-ByjDHY4MVSv_ayMx-An7c6jAPeej6qBsgKGeP1X9ukwaRZjKb7XSt71fdiVUD1XfpBEhHrToQ", "expires_in":300, "token_type":"Bearer", "scope":"" } The following parameters are included in the response: Title Description Parameter Description access_token OAuth token that can be used to access MyPreferences API. Access to resources depends on the permissions associated with the userId specified as part of the scope parameter. token_type Indicates the type of access token being returned. MyPreferences OAuth token endpoint will always return a Bearer token type. scope Scope associated with the access token. expires_in Amount of time remaining (in seconds) before the access token expires. Usage of Access Token In the OAuth Client Credentials Flow, the "Access Token" is a crucial element used to authenticate API requests on behalf of the client application without involving any end-user interaction. The access token is a JWT string representing the authorization to access MyPreferences API which has a defined scope and an expiration time associated with it. When making API requests you must include the access token in the "Authorization" header of the HTTP request. As shown in the example below, we are using the access token to invoke the Retrieve Programs endpoint. Plain text GET /Profiles/v4/ACME_Corp/Programs HTTP/1.1 Host: pmstg.mypreferences.com Authorization: Bearer Accept: application/json Once the access token is included in your API request, you will be granted access to the MyPreferences API depending on the permissions associated with the user making the API call. You must cache the access token to avoid repeated requests before the token expires. Access Tokens have a limited lifespan known as the “expiration time” which is currently set to 60 minutes and can be configured on a per client basis. Once expired, the token becomes invalid, and the client must request a new access token using the same client credentials. Access Tokens should be treated as sensitive information and securely managed by the client application. It's essential to avoid exposing tokens in logs, URLs, or public repositories. Secure transmission over HTTPS is mandatory to prevent token interception. If you suspect the token has been compromised or no longer needed, please send a revocation request to support (support@possiblenow.com) immediately to invalidate the token. Using Certificate instead of Client Secret In the OAuth 2.0 Client Credentials flow, you can use certificate instead of a client secret to authenticate your access request with the authorization server. Instead of sending your client ID and client secret in the request to the token endpoint, you will be required to send the certificate during the authentication process. The certificate contains the public key, which the authorization server will use to verify your identity. To use a client certificate for authentication, you must be registered with the authorization server, and the public key corresponding to the client certificate must be associated with your account's registration. Notify PossibleNOW Support to register your account for using client certificate. The steps in the flow remain the same, but instead of providing a client secret, you will send the certificate as part of your authorization request. The OAuth token endpoint validates the certificate and returns an access token if the certificate is successfully verified. Using a client certificate for authentication can be beneficial in scenarios where you want to avoid sending sensitive information (like a client secret) over the network. • [Errors](https://docs.mypreferences.com/overview/authorization/oauth/errors.md): The OAuth token endpoint responds with a 400 - Bad Request status code and provides the appropriate descriptions when it encounters invalid or missing information submitted as part of your POST request. Listed below are some of the common descriptions that represent failures in retrieving the access token. 400-Bad Request: Incorrect or missing scope access_denied: Admin policy denied access. Incorrect clientId invalid_client: Invalid client_id {clientid}. Incorrect clientId invalid_client: Required parameter (client_id) is missing. Incorrect secret invalid_client: Client authentication (client secret) failed. Invalid grant_type invalid_request: Unsupported value for field (grant_type). Missing grant type invalid_request: Required parameters (grant_type) is missing. • [Custom Auth Scheme](https://docs.mypreferences.com/overview/authorization/custom-auth-scheme.md): Authorization Header You can also access the MyPreferences API using our custom authorization scheme. This requires you to include an authorization field in the HTTP Header for all types of requests. This authorization field should contain the appropriate scheme and relevant parameters, adhering to the format specified by RFC 7235. The scheme and parameters within the Authorization Header should be separated by a space, as per the defined guidelines. Authorization: <scheme> <parameters> Currently there are two scheme types and one available scheme identifier for authorization. Additional schemes may be added to address any weaknesses in the authorization header by adding or removing additional parameters. The authorization scheme types allow for a keyed hash and un-keyed hash. It is highly recommended that the keyed hash scheme be used whenever possible as it is more secure. Please note that the authorization scheme is case in sensitive. An example of each of the two scheme types is shown below: Title Description Un-keyed Hash Scheme Keyed Hash Scheme SchemeIdentifier-CryptoHashIdentifier SchemeIdentifier-HMAC-CryptoHashIdentifier Title Description Un-keyed Hash Scheme Keyed Hash Scheme PNAUTHINFO3-SHA256 PNAUTHINFO3-HMAC-SHA256 The SchemeIdentifier drives and defines the authorization process and parameters. Each available scheme identifier will be addressed in the following sections. The CryptoHashIdentifier is the name of the hash algorithm that is used to generate the signature parameter in all of the scheme authorization parameters. The following hash functions from the SHA-2 family are currently available: SHA256 SHA384 SHA512 Available Schemes PNAUTHINFO3 • [PNAUTHINFO3](https://docs.mypreferences.com/overview/authorization/custom-auth-scheme/pnauthinfo3.md): Under this scheme, two authorization parameters must be passed along with the scheme. Credential parameter: Contains the userId of a MyPreferences user and the issued timestamp. Signature: Used to verify the identity of the requestor. Both parameters are delimited by a space, as shown in the following example: Plain text GET https://pm.mypreferences.com/Profiles/v4/SanchezAssociates/Programs HTTP/1.1 Host: pm.mypreferences.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 Accept: application/json Accept-Language: null Accept-Encoding: gzip, deflate DNT: 1 Content-Type: application/json Authorization: PNAUTHINFO3-HMAC-SHA256 Credential=RickSanchez/2015-08-10T20:11:00 Signature=Lbhe+fKoQPZhzUYWHMVADC4BhqtAMQkfAfpR6Wzbxe0= Connection: keep-alive Authorization Credential Parameter This scheme defines two authorization parameters. The first is the credential parameter. It is composed of a UserId field and an issued timestamp field separated by a forward slash, as shown below: Credential=(UserId)/(ISO 8601 Issued Timestamp) UserId The userId field must include a valid user id associated with an active MyPreferences client (account). In the example above, the UserId “RickSanchez” is an active, valid user for the client “SanchezAssociates” . The userId is a required parameter for generating the signature parameter. ISO 8601 Issued Timestamp The Issued Timestamp field must be a valid ISO 8601 formatted timestamp and cannot be a future date. This field is used to determine if the authorized request has expired. Future dates are considered invalid, and the request will be rejected by the API. By default, an authorized request will only be valid for 15 minutes from the issued date; however, this can be adjusted on a per client basis by setting the configuration value shown below. This is adjusted by contacting the MyPreferences support team. Please note that future schemes may migrate this field to another header. Notes on time zones: The MyPreferences API supports two time zones for the ISO 8601 issued timestamp. One is UTC , while the other is EST (UTC-5:00)/EDT (UTC-4:00) . It is highly recommended that the ISO 8601 issued timestamp is formatted as UTC as it reduces the complexities of having to adjust for time zone offsets for the local server's time. The example provided in this documentation uses the EST time zone. Title Description Configuration Name Supported Value PNAUTHINFO_EXPIRATION_IN_SECONDS Numerical value that represents the number of seconds. Authorization Signature Parameter The second parameter is the Signature. The signature is a keyed or un-keyed message digest based on the crypto algorithm provided in the scheme. The format of the message also varies based on whether the scheme uses a keyed or un-keyed algorithm. Once the message digest is generated, it must be encoded using Base64 encoding scheme before being assigned to the Signature parameter, as shown below: Signature=Base64Encoding(MessageDigest) Keyed Algorithm With the keyed algorithm, the message is composed of the ClientId field supplied from the URL and the UserId and ISO 8601 Issued Timestamp fields provided in the credential parameter. Please note that future authorization schemes may use a different format and that these fields should NOT be URL encoded when composing the message. Each of these three fields must be concatenated together using a colon as a delimiter as shown below: Message=(ClientId):(UserId):(ISO 8601 Issued Timestamp) Once the message is generated, it is then hashed using the client’s private key and the crypto algorithm specified in the authorization scheme. MessageDigest=HMAC-CryptoAlgorithm(Message, PrivateKey) The signature, as shown in the example above, is generated as follows. Signature=Base64Encoding(HMACSHA256(“SanchezAssociates:RickSanchez:2015-08-10T20:11:00”,“SeemslikearareopportunityMorty!”)) Title Description Field Value ClientId SanchezAssociates UserId RickSanchez ISO 8061 Issued Timestamp 2015-08-10T20:11:00 Private Key SeemslikearareopportunityMorty! Additionally, the client’s private key is stored securely and can be rotated by sending a request to our support team. Title Description Configuration Name Supported Values APIHashKey Any string value. Non-Keyed Algorithm The non-keyed algorithm follows the same message format as the keyed algorithm, except it incorporates the private key into the message. This is to provide a small amount of additional security, yet it is still recommended to use the keyed algorithm whenever possible. Message=(PrivateKey):(ClientId):(UserId):(ISO8601 Issued Timestamp):(PrivateKey) As seen above, the private key is concatenated to the front and the back of the message before it is hashed. The message digest is generated based on the message and the crypto algorithm specified in the authorization scheme. MessageDigest=CryptoAlgorithm(Message) Additional Notes on Authorization Signature Case Sensitivity The signature is case sensitive to the fields supplied. When including a field like the ClientId in the URL or the UserId and Timestamp from the Credential parameter, it is vital to make sure that the value in those fields have the exact case syntax that was used when generating the signature. For example, if the ClientId that was used to generate the hash was SanchezAssociates , yet the URL has the case syntax of SANCHEZASSOCIATES, the authorization will fail and the request will be rejected. Spaces and Special Characters in the UserId. If the UserId field contains special characters or a space, it should be URL encoded before using it in the MessageDigest and as a Credential parameter. Credential=URLEncode(UserId)/(ISO 8601 Issued Timestamp) Message=(ClientId):(URLEncode(UserId)):(ISO 8601 Issued Timestamp) • [Errors](https://docs.mypreferences.com/overview/authorization/custom-auth-scheme/errors.md): The MyPreferences API responds with appropriate HTTP error statuses with enough information to identify and fix the issue. In addition to the authorization failures, review the help documentation for the specific API's for handling errors by implementing a common and reliable error-handling framework. 401 - Authorization Errors When a request is rejected due to an authorization failure, the HTTP Status Code 401- Unauthorized is returned with a detailed error description in the body. Here are some of the examples: The scheme is invalid This error occurs when authorization scheme is invalid. For example, if the scheme PNAUTHINFO100-SHA256 was sent, the request would be rejected as there is no PNAUTHINFO100 scheme. The specified date does not match an expected ISO 8601 format This error occurs when the Issued Timestamp is either not in the expected ISO 8601 encoded format or the date is set in the future. Requests with future dates will be rejected. The difference between the issued timestamp and the current time is too large This error occurs when the authorization request has expired. For example, if the expiration window is 60 seconds and the current time is 2015-08-13T12:35:00 and the Issued Timestamp is 2015-08-13T07:00:00. In this case the authorization request has expired and will be rejected. Missing Authorization Header This error occurs when a request is sent without an authorization header field. Unable to authenticate request This is a generic authorization failure that can be caused by any of the following conditions: The authorization field header is incomplete or missing parameters. The generated signature does not match the fields defined by the authorization scheme. The UserId does not match any known users for the supplied ClientId. Plain text HTTP/1.1 401 Unauthorized Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 WWW-Authenticate: PNAUTHINFO3 realm="https://pm.mypreferences.com" X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XE15UHJlZmVyZW5jZXNcU291cmNlXFdlYlxNeVByZWZlcmVuY2VzLlJFU1RcTXlQcmVmZXJlbmNlcy5SRVNUXGFwaVwzXFBOTzRXXFByb2dyYW1z?= X-Powered-By: ASP.NET Date: Fri, 14 Aug 2015 21:22:27 GMT Content-Length: 68 {"Message":"Invalid Authorization Header: The scheme is invalid. The scheme should contain either PNAUTHINFO3- or PNAUTHINFO3-HMAC-. For example: PNAUTHINFO3-HMAC-SHA265."} 404 - Resource Not Found A 404 - Resource Not Found status code is returned when you access a URL or a resource that is invalid or currently unavailable. Additionally, this status code is also returned when the ClientId specified in your request is invalid or not found. Please note that this failed request will not supply a message in the body. Plain text HTTP/1.1 404 Not Found Cache-Control: no-cache Pragma: no-cache Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XE15UHJlZmVyZW5jZXNcU291cmNlXFdlYlxNeVByZWZlcmVuY2VzLlJFU1RcTXlQcmVmZXJlbmNlcy5SRVNUXGFwaVwzXEFDb21wYW55XFByb2dyYW1z?= X-Powered-By: ASP.NET Date: Mon, 17 Aug 2015 17:05:39 GMT Content-Length: 0 • [Experience API](https://docs.mypreferences.com/experience-api.md): The Experience APIs, also referred to as Configuration APIs, are a suite of purpose-built APIs designed to retrieve zero-party data configurations, enabling highly personalized and relevant customer experiences. With built-in localization support and flexible query parameters, these APIs allow you to fetch tailored consent, preference, and other zero-party data configurations, giving you complete control over customer experiences, from granular, micro-level interactions to full-scale preference centers and everything in between. These API's are classified as follows: Profile Configuration Preference Configuration Building Preference and Consent Collection Experiences Made Easy! Experience APIs helps you drive the display of relevant consents, preference communications, feedback choices, and other data collection points. They are used in conjunction with Data APIs that retrieve the most up-to-date information of the individual and populate it across them. Whether you are building a Preference Center or an in-app widget to collect feedback, the user interface layout is up to your imagination. For displaying preference communications, there are several APIs that you can leverage depending on your use case. For example, to display preference communications based on a specific data point you know about an individual or if they belong to a sepcific segment, leverage the GET ProgramGroups by Custom Properties API. It will return all preference communications, their associated frequency choices and preference attributes, all in one single call. Check out the video on configuring Program Groups in MyPreferences. To display consents, use the GET Consents API to retrieve the list of all configured consents. Consents associated with contacts are always returned when you retrieve the Contact Types . Once the required configuration data is returned, link it to the actual user by retrieving their profile. Use any known data point to look up the user, but for the most accurate match, it’s best to use the Profile ID or Alternate ID. Creating a personalized and intuitive Preference Center is key to delivering a great user experience and ensuring compliance with evolving data privacy standards. Whether you're building a dedicated Preference Center or embedding feedback and consent collection within your app, Experience APIs play a central role in enabling flexibility, consistency, and accuracy. Step 1: Design the Layout — Your UI, Your Way The visual layout and interaction model of your Preference Center is entirely customizable. Whether you're building a fully branded standalone preference center or embedding modular components within an app or website, you have complete creative freedom. The APIs provide the data and structure; the rest is up to your design vision and UX strategy. Step 2: Displaying Preference Communications To display relevant preference communication options, you’ll want to tailor content based on what you know about the user. Use the GET ProgramGroups by Custom Properties API to retrieve preference communications based on specific data points (e.g., user interests, region, or journey stage) you know about the individual. This allows you to surface only those categories of preference communications that are applicable to that individual, offering a more contextualized and relevant experience. There are several APIs available that return preference communications, including their frequency and related attributes. You can choose the one that best fits your needs. The Programs API return one or more programs whereas the Program Groups API returns a specific category of programs. Step 3: Displaying Consents To display and manage user consents: Use the GET Consents API to retrieve a list of all available consents configured in your system. Consents associated with the contact types are returned when you retrieve the relevant contact types. Consents already associated with a user are automatically returned when you retrieve the user's profile. This enables a clear view of which consents are required, optional, or already completed, empowering users to make informed choices. Step 4: Display any additional data points You can display any additional data points you wish to collect, such as Groups , Custom Fields , Tags , and more. These data points help you better understand your users and tailor communications based on their preferences. Step 5: Merge Configuration Data with User Profile Once you've retrieved all configuration data (e.g., available consents, preferences, custom fields, etc.), you need to merge that with the individual’s profile data to create a personalized experience. To retrieve the profile, use the GET Profile by ID endpoint or retrieve the profile using alternate identifiers such as an Alternate Id , email address , phone number , or any other known data point. This step ensures that you're populating the UI with data that's both current and specific to the user, enabling real-time personalization. It also allows the user to correct the course by reviewing and reaffirming the consents, permissions, and preferences they've previously set, ensuring transparency and trust while keeping the experience aligned with their expectations. By combining Experience APIs for front-end display and Data APIs for profile-level accuracy, you can build a Preference Center that is not only flexible and compliant but also engaging and user-first. This modular architecture enables you to scale and evolve your interface as your data strategy and user expectations grow. Sample User Preference Center Flow – Profile Identification & UI Handling • [Profile Configuration](https://docs.mypreferences.com/experience-api/profile-configuration.md): The Profile Configuration API allows you to define all aspects of customer profile configuration including names, contact information, group affiliations, and a wide range of demographic and psychographic details using standard and custom fields. Additionally, you have the flexibility to create Alternate IDs , such as system and device identifiers, to uniquely identify individuals and devices within your enterprise ecosystem. This API also allows you to create and manage Consents , Tags , Custom Fields , and Groups for comprehensive organization and categorization of customer data. These API's work in conjunction with the Preference Configuration API to display a complete and highly personalized customer experience. • [Consents](https://docs.mypreferences.com/experience-api/consents.md): MyPreferences serves as a universal consent repository managing consents around an individual or device (IoT) across any data category. The Consents API suite provides complete control over the entire lifecycle of consents. This includes functionalities for creating, updating, and deactivating consent types. A Consent Type represents a specific category or classification of consent. With capabilities to add new consent types, retrieve existing ones, obtain supported consent statuses, and update specific consent types, it ensures a comprehensive management of consent-related information. By utilizing HTTP PATCH requests, it facilitates partial modifications to consent configurations. This functionality enhances flexibility and provides greater control over consent configurations. The flexible nature of these methods offers greater control over consent configurations and ensures that user consent is accurately managed and remains compliant with diverse data privacy regulations. • [Create consent types](https://docs.mypreferences.com/experience-api/consents/create-consent-types.md): Add one or more consents which you can associate with profiles. You can create profile-only consents which serve as global consents connected to the user profile or assign a specific channel to a consent. You can define versions, expiration settings, attributes, and a localized collection of consent language for each version to support multilingual customer experiences. • [Retrieve consent types](https://docs.mypreferences.com/experience-api/consents/retrieve-consent-types.md): This method allows you to retrieve a specific consent or all consent types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all consent types. If none of the consents have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Retrieve consent status](https://docs.mypreferences.com/experience-api/consents/retrieve-consent-status.md): This method retrieves consent statuses that are supported by MyPreferences. The following consent statuses are supported by MyPreferences. Granted (1), Denied (2), Revoked (3), NotSet (4). • [Update consent type](https://docs.mypreferences.com/experience-api/consents/update-consent-type.md): This method allows you to update a single consent type by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op, path , and value parameters. op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. from JSON pointer to the location to copy or move. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Contact Types](https://docs.mypreferences.com/experience-api/contact-types.md): Contact Types allow you to classify your contacts based on the context or purpose of their communication. By assigning specific contact types, such as "Home email," "Work email," "Home phone," or "Work phone," you can easily differentiate and organize your customer contacts according to their respective roles and usage as determined by the individual. The Name and Description fields on all Contact Types support localization which helps you configure them in any language to support multilingual customer experiences. Preferences on a profile are always associated with a Type. Types are broadly classified into two categories: Contact Element Types As the name suggests, contact element types are used for associating contacts for a specific communications channel, specifically Email , Phone , SMS , and Mail . Let's consider the example of email. Clients can define distinct email types, such as "Work," "Home," and "Emergency." By doing so, users can assign specific email addresses to each type and also store preferences or associate consents accordingly. Clients can define consent settings for each email type, indicating whether they allow or disallow certain types of communication or data sharing. For instance, a user may grant consent for work-related emails to be shared with colleagues within the company but restrict the sharing of personal emails with third parties. Identity Types Identity Types or Id Types include CustomerTypes , AlternateId Types , and Group Types . Customer Types are used to classify profiles based on the type of customer. For example, a contact can be classified as a Customer or a Prospect. It is a required data element on every profile. Preferences which are stored on a profile that are not connected to a contact element type are stored using the customer type. Alternate ID Types are used for associating additional identifiers that help you uniquely identify a profile across other systems. For example, customer identifiers from other applications such as Salesforce, Marketo, or Facebook can be stored as Alternate Ids. Alternate ID values are unique by Alternate ID Type across all profiles. • [Create address type](https://docs.mypreferences.com/experience-api/contact-types/create-address-type.md): Add one or more address types to associate postal addresses with profiles. These address types allow you to to link specific preferences and consents to each postal address. • [Retrieve address types](https://docs.mypreferences.com/experience-api/contact-types/retrieve-address-types.md): This method allows you to retrieve a specific address type or all address types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update address type](https://docs.mypreferences.com/experience-api/contact-types/update-address-type.md): This method allows you to update a single address type by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add, replace, remove, and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add , replace , remove , or test . path denotes the path of the target location on the resource to update. value denotes the value to apply. from JSON pointer to the location to copy or move. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Create alternate Id types](https://docs.mypreferences.com/experience-api/contact-types/create-alternate-id-types.md): Add one or more alternate Id types which can be used for adding additional identifiers on a profile. ID values associated with these types must be unique for a type across all profiles. • [Retrieve alternate Id types](https://docs.mypreferences.com/experience-api/contact-types/retrieve-alternate-id-types.md): This method allows you to retrieve a specific Alternate ID type or all Alternate Id types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update alternate Id type](https://docs.mypreferences.com/experience-api/contact-types/update-alternate-id-type.md): This method allows you to update a single alternate Id by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op, path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Create customer types](https://docs.mypreferences.com/experience-api/contact-types/create-customer-types.md): Add one or more customer types that can be assigned to profiles. The CustomerType is a required element on ever profile, and each profile will only have a single customer type. Any preferences stored in a profile that are not associated with a Contact Element Type are linked to the CustomerType. • [Retrieve customer types](https://docs.mypreferences.com/experience-api/contact-types/retrieve-customer-types.md): This method allows you to retrieve a specific customer type or all customer types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update customer type](https://docs.mypreferences.com/experience-api/contact-types/update-customer-type.md): This method allows you to update a single customer type by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations.In the JSON body of your request, send the op, path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Create email types](https://docs.mypreferences.com/experience-api/contact-types/create-email-types.md): Add one or more email types to associate email addresses on profiles. These email types allow you to link specific preferences and consents to each email address. • [Update email type](https://docs.mypreferences.com/experience-api/contact-types/update-email-type.md): This method allows you to update a single email type by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op, path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Retrieve email types](https://docs.mypreferences.com/experience-api/contact-types/retrieve-email-types.md): This method allows you to retrieve a specific email type or all email types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Create phone types](https://docs.mypreferences.com/experience-api/contact-types/create-phone-types.md): Add one or more phone types to associate phone numbers on profiles. These phone types allows you to to link specific preferences and consents to each phone number. • [Retrieve phone types](https://docs.mypreferences.com/experience-api/contact-types/retrieve-phone-types.md): This method allows you to retrieve a specific phone type or all phone types. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update phone type](https://docs.mypreferences.com/experience-api/contact-types/update-phone-type.md): This method allows you to update a single PhoneType specified by the TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op, path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Custom Fields](https://docs.mypreferences.com/experience-api/custom-fields.md): Custom Fields help you expand and enrich the collection of user profile data throughout the customer journey. A custom field can be one of the following types: Text , Numeric , DateTime , and SelectList . A picklist is required for SelectList custom fields When creating custom fields, you can mark them as required and designate update rules for each field. These update rules are enforced by the API when custom fields are added or updated on a profile. The following update rules are currently available for implementation. • Always (default) : Always updates the value • If Current Value Is Blank: Only updates if existing value on the custom field is blank. Once the value is added • If New Value Is Not Blank: Only updates if the incoming value is not blank • Never: Once added to a profile, the field cannot be updated or removed To present users with relevant groups, use the GET Custom Fields API to retrieve the list of all available custom fields. You can also retrieve custom fields associated with a specific data type. The custom field selection can be displayed as a dropdown or any other suitable UI component depending on your design needs and whether single or multiple selections are allowed. All Custom Fields APIs return metadata associated with each field, such as whether it's required, allows blank values, display name (for multilingual support), tooltip text, display order for UI placement, input masks, regular expressions, and minimum/maximum lengths to help deliver a more consistent and user-friendly experience. • [Create datetime custom fields](https://docs.mypreferences.com/experience-api/custom-fields/create-datetime-custom-fields.md): Add one or more custom fields of type datetime to capture date and/or time values on profiles. • [Retrieve datetime custom fields](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-datetime-custom-fields.md): This method allows you to retrieve a specific custom field or all custom fields of type datetime . Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all custom fields. If none of the custom fields have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Create numeric custom fields](https://docs.mypreferences.com/experience-api/custom-fields/create-numeric-custom-fields.md): Add one or more custom fields of type numeric to capture numeric values on profiles. • [Retrieve numeric custom fields](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-numeric-custom-fields.md): This method allows you to retrieve a specific custom field or all custom fields of type numeric . Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all custom fields. If none of the custom fields have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Create selectlist custom fields](https://docs.mypreferences.com/experience-api/custom-fields/create-selectlist-custom-fields.md): Add one or more custom fields of type SelectList to create interactive experiences where users can select one or more items from a predefined list. You must have at least one picklist created that you can associate with the SelectList custom field. • [Retrieve selectlist custom fields](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-selectlist-custom-fields.md): This method allows you to retrieve a specific custom field or all custom fields of type SelectList . Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all custom fields. If none of the custom fields have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Create text custom fields](https://docs.mypreferences.com/experience-api/custom-fields/create-text-custom-fields.md): Add one or more custom fields of type text to capture text data on profiles. • [Retrieve text custom fields](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-text-custom-fields.md): This method allows you to retrieve a specific custom field or all custom fields of type Text . Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all custom fields. If none of the custom fields have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Retrieve update rules](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-update-rules.md): This method will retrieve all update rules that can be applied on a custom field. Update rules specify how MyPreferences should update custom field values when adding or updating profiles. If you don't specify an update rule when creating a custom field, it defaults to always . The following update rules are available: • Always (default): Always updates the value • If Current Value Is Blank: Only updates if existing value on the custom field is blank • If New Value Is Not Blank: Only updates if the incoming value is not blank • Never: Once added to a profile, the field cannot be updated or edited • [Retrieve custom fields](https://docs.mypreferences.com/experience-api/custom-fields/retrieve-custom-fields.md): This method allows you to retrieve a specific custom field or all custom fields irrespective of their type. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all custom fields. If none of the custom fields have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update datetime custom field](https://docs.mypreferences.com/experience-api/custom-fields/update-datetime-custom-field.md): This method allows you to update a single custom field of type DateTime by providing the corresponding Id parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Update numeric custom field](https://docs.mypreferences.com/experience-api/custom-fields/update-numeric-custom-field.md): This method allows you to update a single custom field of type Numeric by providing the corresponding Id parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations.In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Update text custom field](https://docs.mypreferences.com/experience-api/custom-fields/update-text-custom-field.md): This method allows you to update a single custom field of type Text by providing the corresponding Id parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations.In the JSON body of your request, send the op, path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Update selectlist custom field](https://docs.mypreferences.com/experience-api/custom-fields/update-selectlist-custom-field.md): This method allows you to update a single custom field of type SelectList by providing the corresponding Id parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations.In the JSON body of your request, send the op , path, and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Groups](https://docs.mypreferences.com/experience-api/groups.md): Group Types are used for classifying Groups. For example, you can set up groups named “Family”, “Football Fans”, “Employee”, etc. which can be used to connect a set of user profiles based on collective interests and characteristics. When assigning a user profile to a Group, you pass in a Group Name and associate it with any of the available Group Types. You can also designate a profile as “Primary” within a group. When driving customer experiences, you can retrieve all profiles that are a part of a group using the Profile Id or any contact element of the primary profile associated with that group. To present users with relevant groups, use the GET Groups API to retrieve the list of all available groups. The group selection can be displayed as a dropdown or any other suitable UI component depending on your design needs and whether single or multiple selections are allowed. • [Create group types](https://docs.mypreferences.com/experience-api/groups/create-group-types.md): Add one or more group types to associate profiles to specific groups. When assigning a user profile to a group, you pass in a Group Name and associate it with any of the available group types. • [Retrieve group types](https://docs.mypreferences.com/experience-api/groups/retrieve-group-types.md): This method allows you to retrieve all group types or a specific group type by providing the corresponding Type Id parameter. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all Types. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Retrieve group names](https://docs.mypreferences.com/experience-api/groups/retrieve-group-names.md): This method retrieves group names across all group types. You can optionally use the Id parameter to filter results for a specific group type. • [Update group type](https://docs.mypreferences.com/experience-api/groups/update-group-type.md): This method allows you to update a single group type by providing the corresponding TypeId parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add , replace , remove , or test . path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Rename existing group](https://docs.mypreferences.com/experience-api/groups/rename-existing-group.md): This endpoint allows you to rename a group for a specific group type and name combination. Once the request is executed successfully, all profiles associated with the original group will now be associated with the new group. Additionally, we've included an AllowMerge field that must be set to true if the new group name already exists for the same group type. For example, if you have Group A and Group B under the same group type, and you rename Group A to Group B with AllowMerge set to true, profiles from Group A that aren't already in Group B will be moved to Group B, and Group A will be deleted. If AllowMerge is set to false, the API will reject the request. • [Picklists](https://docs.mypreferences.com/experience-api/picklists.md): Picklists are sets of name-value pairs that are associated with a SelectList custom field. The Name field within a picklist supports localization, enabling the creation of multilingual customer experiences. The corresponding value is stored along with the custom field. SelectList custom fields configured with a display type of “multi-select” can accommodate multiple values. Multiple values sent through the MyPreferences API are delimited using “::” double colon. • [Create picklists](https://docs.mypreferences.com/experience-api/picklists/create-picklists.md): This method will add new picklists that can be associated with SelectList custom fields. • [Retrieve picklists](https://docs.mypreferences.com/experience-api/picklists/retrieve-picklists.md): This method allows you to retrieve a specific picklist or all picklists. Use the optional query parameter locale to only retrieve the collection of localized fields for a specific locale across all picklists. If none of the Types have a localized field collection for the specified locale, the HTTP status code of 404-Not Found is returned. • [Update picklist](https://docs.mypreferences.com/experience-api/picklists/update-picklist.md): This method allows you to update a specific picklist specified by the Id parameter. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations.In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Tags](https://docs.mypreferences.com/experience-api/tags.md): Tags help you organize and categorize profiles based on specific pieces of information associated with your customer and non-customer profiles. For example, you can tag users as Influencers or Reward members and retrieve profiles that match on those specific values. Tags are unique and always exist within a context of a profile. You can add and delete tags without affecting other profile information. • [Retrieve tags](https://docs.mypreferences.com/experience-api/tags/retrieve-tags.md): This method will retrieve all tags configured within your MyPreferences account. • [Delete tags](https://docs.mypreferences.com/experience-api/tags/delete-tags.md): This method allows you to delete a tag by specifying the corresponding tagName . Upon successful execution, the tag is deleted from your MyPreferences account and is no longer associated with any active or inactive profiles. • [Preference Configuration](https://docs.mypreferences.com/experience-api/preference-configuration.md): The Preference Configuration API's allow you to retrieve preference configuration data with ease for driving personalized preference collection experiences across customer touchpoints. Using these API's, you can define and manage all aspects of preference configuration which includes the creation of Programs , Filters , Program Groups , Frequency Options , Preference Attributes , Custom Properties , and Locales . Typically, these API's are used in conjunction with Profile Configuration API's to create holistic zero-party data experiences that encompass customer demographics, psychographics, preferences, consents, feedback, and other data points. • [Program Groups](https://docs.mypreferences.com/experience-api/program-groups.md): Program Groups allow you to categorize your programs based on common characteristics such as product lines, region, business units, customer types, etc. The “Program Group” API allows you to retrieve program group information based on specific parameters. You can use the “Retrieve all Program Groups" method to retrieve the entire configuration for all program groups. You can use other methods to retrieve configuration for individual program groups or use the “Retrieve Program Groups (Include Matching)” and “Retrieve Program Groups (Include All)” methods to retrieve a dynamically generated set of program groups, programs, and filters based on your custom property criteria. These API's enable you to build multi-level preference communication hierarchies for driving granular preference management experiences at various levels. They are natively designed to return your preference communications and choices based on your hierarchy setup. Alternatively, they also support use cases where you can flatten a preference hierarchy into a single, consolidated view. Click here to watch a brief tutorial on program groups. • [Retrieve all program groups](https://docs.mypreferences.com/experience-api/program-groups/retrieve-all-program-groups.md): Retrieve configuration for all program groups. You can optionally specify localeId to only retrieve text tags for the specified locale. • [Retrieve a program group](https://docs.mypreferences.com/experience-api/program-groups/retrieve-a-program-group.md): Retrieve configuration for a specific program group. You can optionally specify localeId to only retrieve text tags for the specified locale. • [Retrieve program groups (Include Matching)](https://docs.mypreferences.com/experience-api/program-groups/retrieve-program-groups-include-matching.md): This method allows you to retrieve a specific set of program groups, programs, and filters that match the custom property criteria specified as query parameters in your request. It returns all program groups that match on the custom property criteria specified in the request, and only includes the nested program groups, programs, and filters that also match on the same custom property criteria. What are custom properties? Custom Properties are a collection of key-value pairs that can be attached to Program Groups, Programs, and Filters. The key is the name of the property and the value is the content. While the actual customer data, such as their choices, consents, preferences, etc. helps you deliver an individualized experience, custom properties allow you to personalize it for specific audience segments. For example, a first time visitor may want to see options related to onboarding, whereas an existing customer might get a highly personalized experience. You can define as many of these key-value pairs to support any level of specializations ranging from micro experiences to comprehensive preference centers and everything in between. Example: https://{Base URL}/{client_id}/ProgramGroups/IncludeMatching? Jurisdication=EU&OnlineOnly=True&CheckingProgram In this example, the API will return all program groups and only those associated nested program groups, programs, and filters where custom properties exist with the following values: "Jurisdiction" = EU, "OnlineOnly" = True, "CheckingProgram" exists with ANY value, because no value was supplied in the request. • [Retrieve program groups (Include All)](https://docs.mypreferences.com/experience-api/program-groups/retrieve-program-groups-include-all.md): This method allows you to retrieve a specific set of program groups that match the custom property criteria specified as query parameters in your request. It returns all program groups that match on the custom property criteria specified in the request, and includes all the nested program groups, programs, and filters irrespective of their match against the same custom property criteria. What are custom properties? Custom Properties are a collection of key-value pairs that can be attached to Program Groups, Programs, and Filters. The key is the name of the property and the value is the content. While the actual customer data, such as their choices, consents, preferences, etc. helps you deliver an individualized experience, custom properties allow you to personalize it for specific audience segments. For example, a first time visitor may want to see options related to onboarding, whereas an existing customer might get a highly personalized experience. You can define as many of these key-value pairs to support any level of specializations ranging from micro experiences to comprehensive preference centers and everything in between. Example: https://{Base URL}/{client_id}/ProgramGroups/IncludeAll? Jurisdication=EU&OnlineOnly=True&CheckingProgram In this example, the API will return all program groups where custom properties exist with the following values. All nested program groups, programs, and filters associated with the program groups will be returned even if they do not contain the specified custom property criteria. "Jurisdiction" = EU, "OnlineOnly" = True, "CheckingProgram" exists with ANY value, because no value was supplied in the request. • [Programs](https://docs.mypreferences.com/experience-api/experience-api-1.md): The Experience API's , also known as Configuration API's, are a suite of API's purpose-built for retrieving zero-party data configurations to drive highly personalized and relevant customer experiences. These APIs have built-in localization support and offer specific query parameters to retrieve customized consent, preference, and other zero-party data configurations. This grants you total control over your customers' experiences, covering everything from micro experiences to comprehensive preference centers and everything in between. These API's are classified as follows: Profile Configuration Preference Configuration • [Retrieve a program](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-a-program.md): Retrieve configuration for a specific program. You can optionally specify localeId to only retrieve text tags for the specified locale. This method will return all Filters and their associated configurations. It is typically used when driving experiences like opt-in forms and newsletter subscriptions, particularly when users are enrolling for a specific preference-oriented offering. • [Retrieve all programs](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-all-programs.md): Retrieve configuration for all programs. You can optionally specify localeId to only retrieve text tags for the specified locale. • [Retrieve a program by Program Group](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-a-program-by-program-group.md): Retrieve configuration for a specific program associated with a program group. You can optionally specify localeId to only retrieve text tags for the specified locale. This call will return the default preference values for the Filters as defined in the specified program group. • [Retrieve programs by Program Type](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-programs-by-program-type.md): Retrieve all programs that belong to a specific program type. You can optionally specify localeId to only retrieve text tags for the specified locale. This method will return all programs and their associated configurations for the specified program type. Supported program types are “Transactional”, “Marketing”, “Informational”, “Consent”, and “Do Not Contact (DNC)”. • [Retrieve programs (Include Matching)](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-programs-include-matching.md): This method allows you to retrieve a specific set of programs that match the custom property criteria specified as query parameters in your request. It returns all programs that match on the custom property criteria specified in the request, and only includes the filters that also match on the same custom property criteria. What are custom properties? Custom Properties are a collection of key-value pairs that can be attached to Program Groups, Programs, and Filters. The key is the name of the property and the value is the content. While the actual customer data, such as their choices, consents, preferences, etc. helps you deliver an individualized experience, custom properties allow you to personalize it for specific audience segments. For example, a first time visitor may want to see options related to onboarding, whereas an existing customer might get a highly personalized experience. You can define as many of these key-value pairs and associate them to a program group, program, and filter. Example: https://{Base URL}/{client_id}/Programs/IncludeMatching? J urisdication=EU&OnlineOnly=True&LifeCycleStage In this example, the API will return all programs and only those associated filters where custom properties exist with the following values: "Jurisdiction" = EU, "OnlineOnly" = True, "LifeCycleStage" exists with ANY value, because no value was supplied in the request. • [Retrieve programs (Include All)](https://docs.mypreferences.com/experience-api/experience-api-1/retrieve-programs-include-all.md): This method allows you to retrieve a specific set of programs that match the custom property criteria specified as query parameters in your request. It returns all programs that match on the custom property criteria specified in the request, and includes all the filters irrespective of their match against the same custom property criteria. What are custom properties? Custom Properties are a collection of key-value pairs that can be attached to Program Groups, Programs, and Filters. The key is the name of the property and the value is the content. While the actual customer data, such as their choices, consents, preferences, etc. helps you deliver an individualized experience, custom properties allow you to personalize it for specific audience segments. For example, a first time visitor may want to see options related to onboarding, whereas an existing customer might get a highly personalized experience. You can define as many of these key-value pairs and associate them to a program group, program, and filter. Example: https://{Base URL}/{client_id}/Programs/IncludeMatching? J urisdication=EU&OnlineOnly=True&LifeCycleStage In this example, the API will return all programs that match the custom property criteria specified below. It returns all Filters even if they do not contain the specified custom property criteria. "Jurisdiction" = EU, "OnlineOnly" = True, "LifeCycleStage" exists with ANY value, because no value was supplied in the request. • [Filters](https://docs.mypreferences.com/experience-api/filters.md): Programs contain Filters , which are channel-specific containers of preferences and preference-related data. They represent the enabling of a communication channel for a program. Each filter is unique and holds preference data and configuration settings for a specific channel within a program. Each Filter is required to be associated with a Channel Type. Supported channel types are Phone , Text/SMS , Email , Mail , and Solicit . Preferences set for contact channels require a contact element (e.g., phone number, email address, mailing address) available on a user’s profile. The Solicit channel represents any ID-based channel such as a social media app or an IoT device. Preferences stored for an ID-based channel are stored against the Customer Type associated with the user’s profile. To create and manage filters, log into MyPreferences and click Filters under the Orchestrate menu. • [Retrieve Filter](https://docs.mypreferences.com/experience-api/filters/retrieve-filter.md): Retrieve configuration for a specific Filter . You can optionally specify localeId to only retrieve text tags for the specified locale. When requiring consent for a preference, specify it in the RequiredPreferenceConsents collection on the Filter. The TypeName field is required and should contain the name of an active consent type configured in your account. The DisplayOrder field is optional and is used for determining the order in which consents are displayed on customer-facing user interfaces. Deactivating a consent removes it from the RequiredPreferenceConsents collection. Reactivating a previously deactivated consent type does not automatically marks it as required again. Additionally, when a consent is required, you cannot edit the ChannelId associated with it. • [Data API](https://docs.mypreferences.com/data-api.md): The Data API's facilitate the display and collection of zero-party data for individual profiles across customer touchpoints. When driving customer experiences, they work seamlessly in conjunction with the Experience API to ensure that the relevant data points are accurately displayed on user interfaces, delivering highly personalized customer experiences. Using the Data API's, you can use any data point on a profile to retrieve the profile. Please note that using contact elements , custom fields , groups , and tags to retrieve a profile may result in multiple matching profiles being returned. A suite of historical API's are also available as part of this API library. You can retrieve the entire history for any data point associated with a user's profile, including standard fields, contact elements, custom fields, preferences, consents, and more. The API responses and sample documents provided in the documentation are for illustrative purposes, helping users understand the API request and response format. Not all data attributes may be included. Developers should refer to the API description and specific callouts for comprehensive details on available properties, limitations, and usage guidelines. • [Profile](https://docs.mypreferences.com/data-api/profile.md): A Profile provides a unified view of a user across all channels and interactions. This user can be an individual, an application, or an IoT device. A profile record may include demographic and psychographic data, consents, preferences, group affiliations, device information, user feedback, and other zero-party data collected throughout the customer journey. • [Create profile](https://docs.mypreferences.com/data-api/profile/add-profile.md): This method allows you to submit a user’s profile , preference , and consent information in a single call to create a unique profile record. The response will include a system generated profileId that can be used to retrieve or edit the profile later. • [Retrieve profile by profile id](https://docs.mypreferences.com/data-api/profile/retrieve-profile-by-profile-id.md): This method will return a single user profile that matches the profileId specified in the request. The response will include all active consents , custom fields , groups , tags , and preferences for which you have permissions. Inactive data elements across all objects are not returned. • [Retrieve profile by alternate id](https://docs.mypreferences.com/data-api/profile/retrieve-profile-by-alternate-id.md): This method will return a single user profile that matches the AlternateId and alternateIdType combination specified in the request. The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. Inactive data elements across all objects are not returned. Set the matchInactive query parameter to true when retrieving a profile using an inactive AlternateId. Only AlternateIds deactivated on a profile via the Bulk Import API can be used to retrieve a profile. • [Retrieve profiles by phone](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-phone.md): This method will retrieve one or more profiles that match the phone number specified in the request. Use the optional query parameter phoneType to limit the returned results to a specific phone type. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve profiles by email](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-email.md): This method will retrieve one or more profiles that match the email address specified in the request. Use the optional query parameter emailType to limit the returned results to a specific email type. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve profiles by address](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-address.md): This method returns one or more profiles that have an exact match on the mailing address field values specified in the request. Passing minimal data in the parameters may result in multiple profiles being returned. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. To increase the likelihood of finding the desired profile, it is recommended to include all available address fields as query parameters. All fields passed in the request must match the corresponding values in the profile for the record to be returned. For example, if you are looking for a profile with the name Audrey Julia Michaels at an unknown address on a street named Jefferson Drive in Roswell , GA , use the request as shown below Plain text GET {clientId}/Profile/Address?address1=Jefferson Drive&city=Roswell&stateProvince=GA&addressType=Home&firstName=Audrey&middleName=Julia&lastName=Michaels&partialAddress1Match=true&partialNameMatch=true • [Retrieve profiles by name](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-name.md): This method will retrieve one or more profiles that have an exact match on the firstName , middleName and lastName values specified in the request. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve profiles by partial name](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-partial-name.md): This method will retrieve one or more profiles that have a partial match on the firstName , middleName , and lastName values specified in the request. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. For example, suppose we specify the lastName parameter as 'Smi'. In this case, the matching process will look for last names that contain the substring 'Smi'. As a result, last names like 'Smith' or 'Smilla' would be considered as matches because they contain the substring 'Smi'. However, last names such as 'Small' or 'Sampson' would not be considered as matches because they do not contain the exact substring 'Smi'. • [Retrieve profiles by custom fields](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-custom-fields.md): This method returns one or more profiles that meet the custom field criteria specified in the query string. It supports filtering on multiple custom fields, and the parameters are passed as an array. The first field and value combination start with index 0. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . All active consents , custom fields , groups , tags , and preferences for which you have permissions will be returned in the response. For example, if you are searching for a profile with the custom field "alpha" having a value of "couch" and the custom field "beta" having a value of "book," use the following request. Plain text GET {clientId}/Profile/CustomFields?customFields[0].Name=alpha&customFields[0].Value=couch&customFields[1].Name=beta&customFields[1].Value=book • [Retrieve profiles by SelectList custom fields](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-selectlist-custom-fields.md): This method enhances the capability to search for profiles based on custom fields by incorporating operators for each custom field. These operators, which includes, Equals , All of , or Any of , allow for greater flexibility in filtering the customFields.Value parameter and evaluating its values. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. For example: if you are looking for a profile with a custom field "alpha" with any of the values "couch, chair or table" use the following request: Plain text GET {clientId}/Profile/CustomFields/SelectList? customFields[0].OperatorId=3&customFields[0].Name=alpha&customFields[0].Value=couch:chair:table • [Retrieve profiles by tags](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-tags.md): This method allows you to retrieve one or more profiles that match the tag values specified in the request. Tag parameters are read as an array where the first tag value begins with index 0, followed by subsequent values. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve profiles by consent attributes](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-consent-attributes.md): This method returns one or more profiles that meet the consent attribute criteria specified in the query string. It supports filtering on multiple consent attributes, and the parameters are passed as an array. The first key and value combination start with index 0. This method can only return up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . All active consents , custom fields , groups , tags , and preferences for which you have permissions will be returned in the response. To illustrate, suppose you want to search for a profile with the consent attribute key "alpha" and a value of "couch," as well as another attribute key "beta" with a value of "book." In that case, you can use the following request as an example. Plain text GET {clientId}/Profile/Consent/Attributes?attributes[0].Key=alpha&attributes[0].Value=phone&attributes[1].Key=beta&attributes[1].Value=account • [Retrieve profiles by preference attributes](https://docs.mypreferences.com/data-api/profile/retrieve-profiles-by-preference-attributes.md): This method retrieves one or more profiles containing preferences that meet the specified attribute criteria. It selectively returns only those preferences that contain all of the specified attribute criteria. Moreover, this method facilitates filtering based on multiple preference attributes, with parameters passed as an array. The initial key and value combination commence with index 0. This method returns up to 50 profiles. If more than 50 matching profiles are found, the API returns a 403-Forbidden . All active consents , custom fields , groups , tags , and preferences for which you have permissions will be returned in the response. To illustrate, suppose you want to search for a profile with the preference attribute key "alpha" and a value of "couch," as well as another attribute key "beta" with a value of "book." In that case, you can use the following request as an example. Plain text GET {clientId}/Profile/Preference/Attributes?attributes[0].Key=alpha&attributes[0].Value=phone&attributes[1].Key=beta&attributes[1].Value=account • [Retrieve group profiles by profile id](https://docs.mypreferences.com/data-api/profile/retrieve-group-profiles-by-profile-id.md): This method will retrieve one or more profiles that are part of a group by using the profileId of the group’s primary profile. The response will include up to 50 profiles that belong to the group. If more than 50 profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve group profiles by alternate id](https://docs.mypreferences.com/data-api/profile/retrieve-group-profiles-by-alternate-id.md): This method will retrieve one or more profiles that are part of a group by using the alternateId and alternateIdType combination of the group's primary profile. The response will include up to 50 profiles that belong to the group. If more than 50 profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve group profiles by phone number](https://docs.mypreferences.com/data-api/profile/retrieve-group-profiles-by-phone-number.md): This method will retrieve one or more profiles that are part of a group by using the phoneNumber of a primary profile of the group. The response will include up to 50 profiles that belong to the group. If more than 50 profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve group profiles by email address](https://docs.mypreferences.com/data-api/profile/retrieve-group-profiles-by-email-address.md): This method will retrieve one or more profiles that are part of a group by using an emailAddress of the group's primary profile. The response will include up to 50 profiles that belong to the group. If more than 50 profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Retrieve group profiles by group name](https://docs.mypreferences.com/data-api/profile/retrieve-group-profiles-by-group-name.md): This method will retrieve one or more profiles that are part of a group by using the groupType and groupName combination of the group's primary profile. The response will include up to 50 profiles that belong to the group. If more than 50 profiles are found, the API returns a 403-Forbidden . The response will include all active consents , custom fields , groups , tags , and preferences for which you have appropriate permissions. • [Update profile (POST)](https://docs.mypreferences.com/data-api/profile/update-profile-post.md): Using this method, you can update a profile directly by utilizing the known profileId without the need to retrieve the profile beforehand. It performs an update operation on all data elements included in the request. Any properties that are not included in your request, but are already present on the profile, will remain unaffected and unchanged. • [Update profile (PUT)](https://docs.mypreferences.com/data-api/profile/update-profile-put.md): This method allows you to overwrite a profile by specifying the corresponding profileId . The original information contained in the profile will be overwritten by the information contained in the request. Properties and collections that are not included in the PUT request will be considered blank, and will no longer be included in the profile. • [Update profile (PATCH)](https://docs.mypreferences.com/data-api/profile/update-profile-patch.md): The PATCH method applies partial modifications to a single profile specified by the profileId parameter. The profile will only be updated with the information specified in the path and the values included in the request body. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: Please consider the following when using PATCH: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. When sending a PATCH request with both replace and remove operations, please ensure that replace comes before remove in the operation array. This order helps avoid unintended remove errors on fields that are about to be updated. • [Update profile by alternate id (POST)](https://docs.mypreferences.com/data-api/profile/update-profile-by-alternate-id-post.md): This method creates or updates a profile using the alternateId and alternateIdType provided in the request. If an existing profile is found with the specified alternateId and alternateIdType , that profile is updated with the data supplied in the request. If no matching profile exists, a new profile is created using the provided information. All matching is case-insensitive. Values for alternateId and alternateIdType fields are treated as case-insensitive. Alternate IDs that differ only by letter casing are considered the same. • [Update profile by alternate id (PUT)](https://docs.mypreferences.com/data-api/profile/update-profile-by-alternate-id-put.md): By using this method, you can completely replace a profile by matching on the alternateId and alternateIdType parameters. The existing profile data will be overwritten with the values provided in the request. All matching is case-insensitive. Values for alternateId and alternateIdType fields are treated as case-insensitive. Alternate IDs that differ only by letter casing are considered the same. It is important to note that properties and collections not included in the request are treated as blank and will be excluded from the updated profile. • [Update profile by alternate id (PATCH)](https://docs.mypreferences.com/data-api/profile/update-profile-by-alternate-id-patch.md): This method allows for partial modifications to be applied to a specific profile using the combination of the alternateId and alternateIdType parameters. The profile will only be updated with the information specified in the path and the values included in the request body. The HTTP PATCH request method applies partial modifications to a resource. Click here to learn about using PATCH. The MyPreferences API supports add , replace , remove , and test PATCH operations. The API does not support move and copy PATCH operations. In the JSON body of your request, send the op , path , and value parameters: op denotes the type of operation to execute such as add, replace, remove, or test. path denotes the path of the target location on the resource to update. value denotes the value to apply. Note: When removing multiple elements from an array object, send the remove operations in descending order to keep the indices intact. • [Archive preferences](https://docs.mypreferences.com/data-api/profile/archive-preferences.md): This method allows you to deactivate preferences on a profile across one or more Filters. You can deactivate preferences that are simply tied to the profile or preferences that are associated with contact elements. To deactivate all preferences across all filters on a profile, simply set the GlobalDeactivate parameter to true . Deactivated preferences are archived and are no longer returned via the MyPreferences API. You can create a segment to retrieve archived preferences using the MyPreferences Bulk Export API. • [Delete profile](https://docs.mypreferences.com/data-api/profile/delete-profile.md): This method allows you to permanently delete a profile and all its associated data. It's important to note that the delete operation is irreversible, so careful consideration is advised before proceeding. • [Historical API's](https://docs.mypreferences.com/data-api/profile/historical-api-s.md): Providing historical access to customer data is one of the hallmarks of MyPreferences. Through our comprehensive historical API library, you gain valuable insights into the evolution of customer preferences, consents, contact element changes, and both standard and custom field updates over time. Accessing this wealth of historical data is simple. You can effortlessly retrieve the history for any entity by either utilizing the profileId or an alternateId associated with the profile. Retrieving Contacts History The historical API's for retrieving contact history returns the current contact element along with all historical contact elements associated with each active Type on the profile. Consents associated with the contact elements are also returned. Along with the Profile ID, a collection of current Alternate IDs associated with the profile is also returned. Profile-only consents, custom fields, groups, tags, and preferences are not returned. Retrieving Standard Fields History Standard Fields allow you to collect basic profile information such as name, default language, registration confirmed status, and customer type. They also allow you to control the business rules around preserving preferences and consents, capturing reason code when deleting a profile, and the overall status of the profile. The following list includes all the standard fields available in MyPreferences: Prefix First Name Middle Name Last Name Suffix Default Locale Registration Confirmed (applicable in use cases where customer profile verification is performed) Customer Type PreservePreferences PreserveConsents ReasonCode IsActive The historical API's for retrieving standard field history offers a historical view of all standard field changes that happened over time on a user’s profile. You can retrieve the standard fields history by Profile ID or an Alternate ID associated with the profile. • [Retrieve historical standard fields by alternate id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-standard-fields-by-alternate-id.md): Using the combination of the alternateId and alternateIdType parameters, this method retrieves complete history of standard fields for a single profile. Consents , preferences , custom fields , groups , and tags will not be returned. Along with the profileId , a collection of current alternateIds is also included with each historical entry. • [Retrieve historical standard fields by profile id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-standard-fields-by-profile-id.md): This method will return complete history of standard fields for a specific profile using the profileId parameter. Only the basic profile information and standard field history will be returned. Elements like consents , custom fields , groups , tags , and preferences will not be included in the response. Standard field history will be returned in ascending order by Modified date . Along with the ProfileId , a collection of current AlternateIds is also included with each historical entry. • [Retrieve historical preferences by alternate id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-preferences-by-alternate-id.md): Using the combination of the alternateId and alternateIdType parameters, this method retrieves complete history of preferences for a single profile. Use the optional query parameter filterId to only retrieve the history for a specific Filter. Consents , custom fields , groups , and tags will not be returned. • [Retrieve historical preferences by profile id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-preferences-by-profile-id.md): This method will return current and historical preferences for a single profile using the profileId parameter. Only the basic profile information, contacts, and preference history will be returned. Custom fields , groups , tags , and consents will not be included in the response. • [Retrieve historical custom fields by alternate id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-custom-fields-by-alternate-id.md): Using the combination of the alternateId and alternateIdType parameters, this method retrieves complete history of custom fields for a single profile. Consents , custom fields , groups , tags , and preferences will not be returned. Custom field history will be returned in ascending order based on the Modified date . • [Retrieve historical custom fields by profile id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-custom-fields-by-profile-id.md): This method will return complete custom field history for a single profile using the profileId parameter. Only the basic profile information and custom field history will be returned. Elements like consents , groups , tags , and preferences will not be included in the response. Custom field history will be returned in ascending order based on the Modified date . • [Retrieve historical contact elements by alternate id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-contact-elements-by-alternate-id.md): Using the combination of the alternateId and alternateIdType parameters, this method retrieves complete history of contact elements for a single profile, including any attached consent associations. Profile-only consents , custom fields , groups , tags , and preferences will not be returned. • [Retrieve historical contact elements by profile id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-contact-elements-by-profile-id.md): This method retrieves the complete history of contact elements for a single profile, including any attached consent associations. Profile-only consents, custom fields , groups , tags , and preferences will not be returned. • [Retrieve historical consents by profile id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-consents-by-profile-id.md): This method will return complete consent history for a single profile using the profileId parameter. Only the basic profile information and consent history will be returned. Elements like custom fields, groups, tags, and preferences will not be included in the response. Consent history will be returned in ascending order by Consent Type , Version , and Modified date . • [Retrieve historical consents by alternate id](https://docs.mypreferences.com/data-api/profile/historical-api-s/retrieve-historical-consents-by-alternate-id.md): This method will return complete consent history associated with a specific profile using the combination of the alternateId and alternateIdType parameters. Only the basic profile information and consent history will be returned. Custom fields , groups , tags , and preferences will not be included in the response. Consent history will be returned in ascending order by Consent Type , Version , and Modified date . • [Integration API](https://docs.mypreferences.com/integration-api.md): The Integration API suite includes asynchronous RESTful APIs for bulk import/export operations and Event APIs for retrieving event data, along with webhook subscriptions for real-time updates. Bulk API The MyPreferences 3.0 Bulk API is a powerful and efficient asynchronous RESTful API that serves as a robust conduit for seamless data transfer between MyPreferences and various external systems within your enterprise. It ensures that you can effortlessly manage and exchange large datasets, streamlining the process of integrating zero-party data across your technology ecosystem. One of the primary advantages of the Bulk API lies in its ability to enable near-real time synchronization of customer data. This means that any updates or changes made within MyPreferences or other connected cloud-based or on-premise systems in your enterprise are swiftly propagated and reflected in the interconnected systems. As a result, your organization can maintain a consistent, up-to-date, and comprehensive view of customer data, which is essential for delivering relevant and compliant experiences. Events API Event APIs allow you to retrieve event data by account, subscription, profile, or specific event ID based on your webhook subscriptions. They facilitate experiences which enable customers to view their activity history, recent actions, and profile updates in real-time. By retrieving data based on webhook subscriptions, these APIs allow customers to track and review any changes or interactions they have made to their profiles, ensuring they have access to the most up-to-date information about their account activities. • [Export](https://docs.mypreferences.com/integration-api/export.md): Segments are at the core of the data export functionality. They enable users to build complex search queries using Search Criteria Rows (SCR) through a user-friendly interface. This allows for flexible and powerful filtering of data before export. Segment Groups enhance this capability by allowing you to combine or filter multiple segments using logical operators such as AND, OR, and EXCEPT. This makes it easier to define precise data sets based on multiple conditions and reuse segments across other export operations. The Bulk Export APIs support data retrieval for both Segments and Segment Groups. Both sets of APIs follow the same structure and usage pattern, ensuring a consistent developer experience regardless of which method you choose to work with. Using the Bulk Export API, you can establish near real-time integrations between MyPreferences and other systems, support audience-building use cases, or build an internal service that receives updates at specific intervals. In addition to retrieving data from segments and segment groups in full, incremental access is also supported by including lastdatetime when initiating the request. Workflow Define: Create a segment (or segment group) in MyPreferences that defines the dataset you want to retrieve. Invoke: Invoke the Initiate endpoint to request the generation of data. You can optionally supply a callback URL to be notified when the data is ready for retrieval. Status: Check the status of your export by polling the Status endpoint using the access token. Retrieve : Retrieve the data. All data export requests are processed sequentially. If you initiate two exports, the second export will not begin processing until the first one has finished. A maximum of five (5) export requests can be initiated concurrently. There is a configurable daily limit on the number of exports that can be processed. • [Segments](https://docs.mypreferences.com/integration-api/export/segment-bulk-api.md): Segments are at the core of data exports in MyPreferences. They enable you to create complex search queries by constructing Search Criteria Rows (SCRs), allowing you to retrieve targeted datasets for use in downstream distribution and activation systems. Segments can be generic or specific based on your needs. For example, you could build a generic segment that includes users who have subscribed to a preference offering, or a specific segment of users that have granted marketing consent, opted into your Special Offers program, are within the age group of 25-34, reside in New York or Los Angeles, prefer shopping online, and are interested in receiving coupons every Friday. When you first build your segment, the results will include all matching profiles, and depending on your settings, all associated Preferences, Consents, and/or Custom Fields. As you add filter criteria, the output becomes more refined and targeted. To learn more, log into MyPreferences and check out the Segments feature guide in our help assistant Helppier. • [Initiate](https://docs.mypreferences.com/integration-api/export/segment-bulk-api/initiate.md): Initiate request by specifying a segment name. Specify lastdatetime to retrieve data for a specific period. You can also specify MatchCriteria to retrieve data for specific profiles. ProfileID, AlternateID, EmailAddress, and PhoneNumber are the supported match criteria. When MatchCriteria is provided in a request, it is merged with the segment's predefined criteria to produce an output dataset that meets the segment configuration while including only the specified profiles. If MatchCriteria is not supplied, the API returns all profiles that match the search criteria defined in the segment. The MatchType parameter is required when MatchCriteria is set to AlternateID. For ProfileID, EmailAddress, and PhoneNumber, it is optional. When provided, it filters the results to include only profiles that match the specified type. If omitted, the API processes the request solely based on the Values specified in the request. When EmailAddress or PhoneNumber is used as the MatchCriteria , the MatchType can be a corresponding email or phone type. In this case, the returned data is filtered by the segment criteria but includes only the profiles from your request that also contain the specified email address or phone number. When ProfileID is used, MatchType can be a customer type. In this case, the returned data is filtered according to the segment group criteria, including only the requested profiles that include the given customer type. The LastDateTime field supports the following date formats: YYYY-MM-DDTHH:mm:ss.sssZ (ISO 8601 with UTC 'Z' suffix) YYYY-MM-DDTHH:mm:ss.sss (ISO 8601 without timezone designation) All data export requests are processed sequentially. If you initiate two exports, the second export will not begin processing until the first has finished. A maximum of five (5) export requests can be initiated concurrently. There is a configurable daily limit on the number of exports that can be processed. • [Retrieve status](https://docs.mypreferences.com/integration-api/export/segment-bulk-api/retrieve-status.md): Returns the status of your request. • [Retrieve data](https://docs.mypreferences.com/integration-api/export/segment-bulk-api/retrieve-data.md): Retrieve the data. You may iterate through multiple calls until all records are retrieved. The access token will expire automatically upon complete data retrieval. To retrieve data beyond the initial retrieval, set the keepAlive parameter to true. The default value is set to false , if not specified. Segments for deleted profiles will only output the ProfileID, the date of deletion and the reason code. No additional customer data from the profile will be included in the output. • [Commit](https://docs.mypreferences.com/integration-api/export/segment-bulk-api/commit.md): This endpoint should only be accessed if the keepAlive parameter was set to true when retrieving the data. Invoking this endpoint marks the data retrieval as “Complete” and expires the access token. • [Segment Groups](https://docs.mypreferences.com/integration-api/export/export-1.md): Segment Groups enable you to combine or filter your segments using search operators AND, OR, and EXCEPT. Additionally, a single segment can be used across multiple segment groups to output targeted datasets. To access segment group data, you can use the Bulk API or set up an Export Schedule. For detailed instructions on creating export schedules, log into MyPreferences and refer to the Data Export guide available in our help assistant Helppier. • [Initiate](https://docs.mypreferences.com/integration-api/export/export-1/initiate.md): Initiate request by specifying a Segment Group name. You can optionally pass lastdatetime to retrieve data for a specific period. You can also specify MatchCriteria to retrieve data for specific profiles. ProfileID, AlternateID, EmailAddress, and PhoneNumber are the supported match criteria. When MatchCriteria is provided in a request, it is merged with the segment group's predefined criteria to produce an output dataset that meets the segment group configuration while including only the specified profiles. If MatchCriteria is not supplied, the API returns all profiles that match the search criteria defined in the segment group. The MatchType parameter is required when MatchCriteria is set to AlternateId, ensuring precise identifier resolution. For ProfileID, EmailAddress, and PhoneNumber, MatchType is optional. When provided, it filters the results to include only profiles that match the specified type. If omitted, the API processes the request based solely on the Values specified in the request. When EmailAddress or PhoneNumber is used as the MatchCriteria , the MatchType can be a corresponding email or phone type. In this case, the returned data is filtered by the segment group criteria but includes only the profiles from your request that also contain the specified email address or phone number. When ProfileID is used as the MatchCriteria , MatchType can be a customer type. In this case, the returned data is filtered based on the segment group criteria, including only the requested profiles that match the given customer type. The LastDateTime field supports the following date formats: YYYY-MM-DDTHH:mm:ss.sssZ (ISO 8601 with UTC 'Z' suffix) YYYY-MM-DDTHH:mm:ss.sss (ISO 8601 without timezone designation) • [Retrieve status](https://docs.mypreferences.com/integration-api/export/export-1/returns-the-status-of-your-request-if-a-callback-url-is-provided-with-your-request-mypreferences-will-post-the-status-to-the-callback-url.md): Returns the status of your request. • [Retrieve data](https://docs.mypreferences.com/integration-api/export/export-1/retrieve-data.md): Retrieve the data. You may iterate through multiple calls until all records are retrieved. The access token will expire automatically upon complete data retrieval. To retrieve data beyond the initial retrieval, set the keepAlive parameter to true. The default value is set to false , if not specified. • [Commit](https://docs.mypreferences.com/integration-api/export/export-1/this-endpoint-should-only-be-accessed-if-the-keepalive-parameter-was-set-to-true-when-retrieving-the-data-invoking-this-endpoint-marks-the-data-retrieval-as-complete-and-expires-the-access-token-of-the-segment-group-export.md): This endpoint should only be accessed if the keepAlive parameter was set to true when retrieving the data. Invoking this endpoint marks the data retrieval as “Complete” and expires the access token. • [Import](https://docs.mypreferences.com/integration-api/import.md): The MyPreferences Import Bulk API is designed to simplify and accelerate how you bring data into your MyPreferences account. These APIs are purpose-built to automate large-scale imports with ease, helping you to automate and streamline data import processes. It also enables you to establish periodical imports to sync MyPreferences with customer data captured in other applications. Workflow Initiate : Request to initiate an import Stage : Stage data that you want to import using the access token. Depending on the size of your request, you may make multiple requests to stage your entire dataset to import Execute : Once all the data is staged, request to execute the import Status : Check the status of your import by polling the Status endpoint using the status token Retrieve (optional): Retrieve any validation failures and exceptions using the Exceptions endpoint. Rate Limiting & Usage Guidelines To ensure stable and efficient use of our API, we enforce a 24-hour rate limiting policy on import requests. Each account has a maximum daily import request limit, which is tracked over a rolling 24-hour period. Per-request data size: The default maximum payload size for a POST request (used to stage data) is 25 MB. The maximum allowed is 28 MB per request. Total staged data per import: A single bulk import operation can stage up to approximately 10 million records. Distribute requests evenly: We recommend spreading import jobs evenly throughout the day to stay within your allotted daily limit. . Optimize request size: If your data volume increases, consider sending more data per import to make the most of your quota. The total count of staged data can be up to ~ 10 million records in a single bulk import operation (i.e., per access token). Sequential imports: Once an import is executed, you can immediately commence a subsequent import operation without having to space them. Avoid parallel processing: We recommend processing one import job at a time. Running imports in parallel increases the risk of hitting rate limits and may lead to data conflicts. Handling limit exceedance: If you exceed your 24-hour limit, do not retry immediately. Instead, log the failure and queue the data for retry in the next available batch window. • [Initiate](https://docs.mypreferences.com/integration-api/import/initiate.md): The initiate step begins the process of bulk import. Valid requests receive an HTTPS 200 - OK response including an access token. The access token is required to stage, execute, and retrieve the status of the bulk import. It is also used for retrieving records that failed to import. This token is only active for six hours before it expires. Once expired, it cannot be used again for staging, executing, retrieving the import status or exceptions. Using Match Criteria for Imports MatchCriteria is an optional parameter that serves as a matching identifier when updating profiles. It can be used in scenarios where you want to update profiles using other unique identifiers instead of the ProfileId. Currently, AlternateIdType is the only supported match criteria. MatchValue must be provided with the match criteria. If MatchCriteria is not provided, the Import API will match on the ProfileId when performing updates. If ProfileId is not found, a new profile is created. The Bulk Import API also supports a set of refresh parameters that allows you to remove any existing piece of information from user profiles. When its value is set to true, information not included in the import request will be deactivated on the profile. When you set the RefreshContacts parameter to true, the following behavior is applied: Any existing contact element that is not included in your import request is deactivated. Any preferences associated with it are archived if PreservePreferences flag is set to false. Any consents associated with it are archived if PreserveConsents flag is set to false. Any existing information not included in the import request will not be updated. For example, if IsMobile or IsDefault property is not included in your request, it will remain intact. When matching contacts by AlternateId, you must allow the export to finish executing before staging additional data. This prevents inconsistencies or errors in the data import process and ensures that the profiles with the matching AlternateId's exist in the system before new records are imported. Deleting Profiles using Bulk Import API: To initiate a bulk deletion of profiles, set the value of the "ImportAction" parameter to "Delete" in your Initiate request, as shown below. Plain text { "Name”: “Weekly Leads", "DataStageDuration":"3", "ImportAction": "Delete", “MatchCriteria”: “AlternateIdType”, “MatchValue”: “SalesforceId” } Key points to remember: To perform a delete operation using the Bulk API, the API user must also have the “Delete Profiles” permission enabled within their user group. Upon execution, all matching profiles specified in the request are completely removed from the system. If you specify the MatchCriteria, profiles that include the matching AlternateIdType and the AlternateId value specified for that Type are removed from the system. The Bulk API will mark the records as Validation Failed if the AlternateId value does not match the Type specified. You can use the optional ReasonCode property to store the reason for deletion for audit purposes. Note: The delete operation must be executed with caution due to its irreversible nature. It is appropriate in situations such as honoring a “Right to be Forgotten” request or when a customer explicitly requests the removal of their data, among other applicable circumstances. • [Stage](https://docs.mypreferences.com/integration-api/import/stage.md): The staging step is the second step in the import process where the data gets staged for initial validation. The response for each staging request also includes the total number of records received, records that were validated successfully, and the records that failed the initial validation process. The ValidationFailed count represents the number of records that failed validation during the data staging process. User permissions are also validated during the staging process. Records that fail to validate against the Profile, Preference and Channel-level permissions get added to the ValidationFailed count. The staging step can be performed multiple times prior to executing an import, allowing you to stage large sets of data over time, as long as the access token remains active. For instance, you can initiate an import early in the morning and stage data at multiple intervals throughout several hours. When the execute request is triggered, the staged data will be imported into MyPreferences. During the bulk import process, all staged records are grouped together before being written to the database. In this stage, the system assigns a single create date to all newly imported profiles that do not exist, processing them collectively as a batch. When updating preferences tied to a prior version of consent, the AllowPriorConsents flag must be set to true. If this flag is not enabled, the API will reject the record and classify it as an exception. Alternatively, you may omit the previous consent details from the import payload and update only the preference information. • [Execute](https://docs.mypreferences.com/integration-api/import/execute.md): The execute step is the last step in the import process. Once all the data is staged, run the execute request to write the data from the staging area to the MyPreferences database. Only records that are reported back as "Validation Successful" during the staging process will be imported. Any records that failed validation or got returned as exceptions will be ignored. A summary of the import details is included in the response once the execution step is completed. Processed , Exceptions , and NotHonored count will not be available instantly upon execution. Depending on the record count, poll the the "Retrieve Status" endpoint at regular intervals until the status is returned as “Complete”. • [Retrieve status](https://docs.mypreferences.com/integration-api/import/retrieve-status.md): Use this method to retrieve the current status of an import. One of the following statuses will be returned. Initiated - The import has been defined and is ready to accept profile records. Staging - The data is being staged. More records may be added at this stage. Queued - The import has been executed and records have been queued. Processing - The records are being processed. Completed - The records have been imported. Failed - The import has failed to execute and none of the staged records were added into MyPreferences. • [Retrieve exceptions](https://docs.mypreferences.com/integration-api/import/retrieve-exceptions.md): During the staging process and import execution, exceptions may occur due to various factors, such as incorrect data or email addresses that do not conform to the regular expressions (RegEx) configured on your account. This same endpoint is used to retrieve records that encountered exceptions during either the staging or execution phase. Exception records retrieved during the staging process can be corrected and re-staged for import. • [Events](https://docs.mypreferences.com/integration-api/events.md): What are Events? Events are distinct actions performed within MyPreferences. They serve as triggers to notify external systems about specific activities or changes. Events provide real-time information to keep systems informed and enable integration with other tools and services through webhooks. An action may be system initiated or user initiated. For instance, it could involve updating the status of a consent or simply switching the IsMobile status on a phone number. These actions also encompass automated tasks executed by the system, such as propagating preferences and consents, as well as recording opt-outs triggered via the Status Manager integration. An event is synonymous with an Event Type , serving as a clear indicator of the type of action that occurred. Each event type is associated with an entity. An Entity represents an object which supports one or more event types. For example, the Preference entity supports the following event types. preference.added preference.updated preference.archived Types of Events Actions performed on profiles are referred to as Data Events, whereas actions performed exclusively on configuration objects to update, remove or modify configuration settings are referred to as Configuration Events . Currently, MyPreferences only supports data events and offers a wide range of events that cover various interactions and activities within the platform. The following list highlights all the Data events supported by MyPreferences. Title Title Description Title Description Title Entity Event Type ProfileActions profile.created profile.replaced profile.deactivated profile.reactivated profile.deleted profile.updated profile.updated full Preferences preference.added preference.updated preference.archived Consents consent.added consent.updated consent.deactivated consent.elementassociation.created consent.elementassociation.updated consent.elementassociation.deactivated consent.filterassociation.created consent.filterassociation.updated consent.filterassociation.deactivated Contacts contacts.email.added contacts.email.updated contacts.email.deleted contacts.phone.added contacts.phone.updated contacts.phone.deleted contacts.address.added contacts.address.updated contacts.address.deleted contacts.alternateid.added contacts.alternateid.updated contacts.alternateid.deleted contacts.customertype.updated StandardFields standardfield.defaultlocale.updated standardfield.registrationstatus.updated standardfield.prefix.added standardfield.prefix.updated standardfield.prefix.deleted standardfield.firstname.added standardfield.firstname.updated standardfield.firstname.deleted standardfield.middlename.added standardfield.middlename.updated standardfield.middlename.deleted standardfield.lastname.added standardfield.lastname.updated standardfield.lastname.deleted standardfield.suffix.added standardfield.suffix.updated standardfield.suffix.deleted CustomFields customfield.added customfield.updated customfield.deleted Groups group.added group.updated group.deactivated Tags tag.added tag.deleted Data imported via the Bulk import API is out of scope. The Events Webhook framework does not track or generate events for profile upserts and deletes carried out via Bulk API imports. Subscribing to Events To receive notifications about specific events, MyPreferences clients can subscribe to one or more event types of interest. This involves setting up a webbook subscription, which allows MyPreferences to send event data as an HTTP POST request to an external endpoint that you specify in your subscription request. Click here to access the Create Subscriptions API. Authentication Authentication is crucial to ensure the security and integrity of webbook interactions. MyPreferences webhooks support signature validation that allows receiving endpoints to validate webhook's authenticity, i.e., verify that the data is being posted by MyPreferences. Applications receiving event notifications shall provide a secret key which is configurable on all MyPreferences accounts. All webhook notifications except the initial validation handshake message include a MyPreferences-Webhook header which contains two parameters, Timestamp and Signature . The Timestamp parameter is part of the header and is also used when generating the signature. Therefore, during signature validation by the receiving system, any modification to the Timestamp field should result in the rejection of the POST request. The issued Timestamp field is a valid ISO8601 formatted timestamp. The Signature parameter is generated using a hash-based message authentication code (HMAC) using SHA2 -512. The hash signature is included in the request (authorization) header on each POST request delivered by the webhook. These parameters are generated and included each time an event is dispatched to a receiving endpoint. In situations where the event is retried due to a failure, a new signature and timestamp is generated for each new attempt. Plain text "WebhookSignature": "Timestamp:2025-07-29T16:47:05Z Signature:7TioN/SDE46JWvF1OHc9VQuQ+j/hv8UQugoRhP+eGLXp6xrZzS0hkanuhmWB+uCfCYTyXd9Oa5rk/jWgbrWWrw==" "WebhookSignature": "Timestamp:2025-07-29T16:47:05Z Signature:7TioN/SDE46JWvF1OHc9VQuQ+j/hv8UQugoRhP+eGLXp6xrZzS0hkanuhmWB+uCfCYTyXd9Oa5rk/jWgbrWWrw==" The ClientId, EventsClientSignatureUserId, Timestamp, and a Hashkey are used to construct a SHA512 HTMAC hash. This is similar to generating a hash using the custom authorization scheme to access the MyPreferences REST API. Your receiving application consuming the webhooks is expected to extract the timestamp from the header and use the ClientId, EventsClientSignatureUserId, and Hashkey to reconstruct the signature using SHA512. Your re-computed signature (converted to UTF-8 bytes and then to BASE64) must match the Signature included in the header. If it doesn't, the message must be considered as altered and should be rejected. Please reach out to our support team to retrieve the value for the EventsClientSignatureUserId. Initial Handshake For all webhook subscriptions, the receiving application needs to participate in a validation handshake. Once the subscription is created, MyPreferences will issue a unique token to the receiving URL before any actual data is delivered. The schema of this event is similar to an actual data event and is shown below. The data portion of this event includes a validationCode property. Your application verifies that the validation request is for an expected event subscription, and returns the validation code in the response synchronously. Once the handshake is established, your endpoint is authenticated, and it can continue receiving webhook notifications without needing to repeat the token exchange. This ensures secure and seamless communication between MyPreferences and your receiving application. Plain text { "data": { "validationCode": "056C6FF4-3929-42AC-8E94-C6E021FD1C7B", "validationUrl": "https://rp-eastus.eventgrid.azure.net:553/eventsubscriptions/53286-1-7f396aa65cda44338b7763091cc02608-221/validate?id=056C6FF4-3929-42AC-8E94-C6E021FD1C7B&t=2024-07-24T14:09:00.9068770Z&apiVersion=2022-06-15&token=mUTqCc6C6t30ij3vEictNyEP%2baZlJ0cqe8RgeqB%2fo74%3d" }, "dataVersion": "2", "eventTime": "2024-07-24T14:09:00.9069218Z", "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent", "id": "dfd3c295-0a8b-43c8-be7f-bee71f9842e9", "metadataVersion": "1", "subject": "", "topic": "/subscriptions/1ba4431b-6125-4da0-b908-a890a2e39206/resourceGroups/rgroupdnc29/providers/microsoft.eventgrid/domains/eventgriddomainstaging01/topics/53286-1-7f396aa65cda44338b7763091cc02608" } { "data": { "validationCode": "056C6FF4-3929-42AC-8E94-C6E021FD1C7B", "validationUrl": "https://rp-eastus.eventgrid.azure.net:553/eventsubscriptions/53286-1-7f396aa65cda44338b7763091cc02608-221/validate?id=056C6FF4-3929-42AC-8E94-C6E021FD1C7B&t=2024-07-24T14:09:00.9068770Z&apiVersion=2022-06-15&token=mUTqCc6C6t30ij3vEictNyEP%2baZlJ0cqe8RgeqB%2fo74%3d" }, "dataVersion": "2", "eventTime": "2024-07-24T14:09:00.9069218Z", "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent", "id": "dfd3c295-0a8b-43c8-be7f-bee71f9842e9", "metadataVersion": "1", "subject": "", "topic": "/subscriptions/1ba4431b-6125-4da0-b908-a890a2e39206/resourceGroups/rgroupdnc29/providers/microsoft.eventgrid/domains/eventgriddomainstaging01/topics/53286-1-7f396aa65cda44338b7763091cc02608" } To prove endpoint ownership, send back the validation code in the validationResponse property as shown below: Plain text { "validationResponse": "056C6FF4-3929-42AC-8E94-C6E021FD1C7B056C6FF4-3929-42AC-8E94-C6E021FD1C7B" } { "validationResponse": "056C6FF4-3929-42AC-8E94-C6E021FD1C7B056C6FF4-3929-42AC-8E94-C6E021FD1C7B" } You must return an HTTP 200-OK response status code. 202-Accepted isn't recognized as a valid response. The HTTP request must complete within 30 seconds. If the operation doesn't finish within 30 seconds, it will be canceled and can be reattempted after 5 seconds. If all the attempts fail, it will be treated as validation handshake error. Please take note that in the validation handshake request, the data object is specified as ‘data’ in camel case, whereas in the actual event payload, it is specified as 'Data' in pascal case. Asynchronous handshake If you cannot return the validationCode in your response synchronously, a validationUrl property is also included in the data portion of the subscription validation event. To complete the handshake, find that URL in the event data and do a GET request to it. You can use either a REST client or your web browser. The provided URL is valid for 5 minutes. During that time, the provisioning state of the event subscription is AwaitingManualAction . If you don't complete the manual validation within 5 minutes, the provisioning state is set to Failed . You'll have to create the event subscription again before starting the manual validation. This method of authentication also requires the webhook endpoint to provide an HTTP status code of 200 . This confirms the acceptance of the POST request for the validation event, which is a prerequisite before transitioning into manual validation mode. If the endpoint returns a 200 status code but fails to provide a validation response in a synchronous manner, the system will switch to manual validation mode. Furthermore, if a GET request is made to the validation URL within a 5-minute timeframe, the validation handshake is deemed successful. Your application's readiness to manage and return the validation code suggests that you've set up the event subscription and are ready to receive events. Securing Events with mTLS Events support Mutual Transport Layer Security (mTLS) which brings an extra layer of security between our system and the clients receiving the webhook notifications. With mTLS, both the webhook consumer (receiving systems subscribed to our webhooks) and the webhook producer (our server) engage in mutual authentication, establishing a secure and efficient communication channel. mTLS also ensures data integrity protecting sensitive data from unauthorized access and tampering. Your receiving endpoint must be setup to handle mTLS, including initiating the validation handshake. mTLS authentication relies on digital certificates, therefore, clients must obtain digital certificates from a trusted Certificate Authority (CA) or an internal PKI (Public Key Infrastructure) before the handshake process. To enable mTLS support, you must collaborate closely with our support team and follow the steps listed below. Generate Client Certificate: Obtain a digital certificate for your receiving endpoint from a trusted Certificate Authority (CA). Ensure that the certificate includes the necessary identifying information and is signed by a trusted CA. Webhook endpoint configuration: Configure your receiving endpoint to present its certificate to the server during the handshake process. MyPreferences Configuration: The MyPreferences Support team will configure your client certificate on our server for authentication. Trust Server Certificate: Ensure that your receiving endpoint trusts the certificate provided by MyPreferences. Test Connection: Test the connection between your receiving endpoint and MyPreferences to ensure that mTLS authentication is setup and functioning correctly. You will closely collaborate with our support team throughout the setup procedures. Should you encounter any issues during the setup process, reach out to our support team for assistance. Receiving Events The system expects a HTTP 200-OK response from the webhook URL. Any other response codes (3xx, 4xx, or 5xx) are treated as a failure. Once the handshake is established, no content is required in the response body from the target webhook URL. When receiving events, the receiving URLs must not exclusively rely on the delivery order. Use the EventTime parameter that gets returned with each event notification to process the events in an orderly manner. The MaxConcurrentRequests and Duration settings manage the events throughput. The MaxConcurrentRequests determines how many events the event delivery service will try to send in one cycle. The Duration determines how long it will wait between each cycle. Though we do not track the exact amount of events that are generated via the event handler service, it is a precautionary measure to maintain optimal delivery rate and frequency. These settings are managed at the account-level and apply to all webbook subscriptions configured within your MyPreferences account. MinValue for MaxConcurrentRequests is 50. MaxValue for MaxConcurrentRequests is 5000. Default is 500. MinValue for Duration is 1. MaxValue for Duration is 300. Default is 1. To update these settings on your account, send a request to support@possiblenow.com with your desired configuration values. Creating and managing event subscriptions MyPreferences provides a set of Subscription APIs to manage webhook subscriptions: POST /subscriptions: Create a new subscription by specifying the desired event types and the target webhook URL. GET /subscriptions: Retrieve a list of active subscriptions along with their details. PUT /subscriptions/{subscription_id}: Update the configuration of an existing subscription, such as updating the list of event types. DELETE /subscriptions/{subscription_id}: Deactivate and remove a subscription, stopping notifications for selected event types. Event Payload When an event occurs, MyPreferences sends an HTTP POST request to the subscribed endpoint. The payload contains information about the event, including its type, timestamp, and relevant data associated with the event. Subscription Payload The subscription payload includes details about the subscription itself, such as the ID, webhook URL, and subscribed event types. This information helps identify the source of incoming requests and the event types being monitored. Check out our Event Payload Samples page for a comprehensive collection of sample payloads. Failures and retries MyPreferences expects a 200-OK response to mark the request as success. All configured webhook URLs shall return a 200-OK response immediately upon receiving the event. The system waits 30 seconds for a response after delivering a message. After 30 seconds, if the endpoint hasn’t responded, the message is queued for retry. It uses an exponential backoff retry policy for event delivery. The retries are performed based on the following schedule on a best effort basis: If the endpoint responds within three minutes, the message distribution service attempts to remove the event from the retry queue on a best effort basis, but duplicates may still be received. It adds a small randomization to all retry steps and may opportunistically skip certain retries if an endpoint is consistently unhealthy, down for a long period, or appears to be overwhelmed. The service supports the following retry configurations. An event is dropped if either of the limits of the retry policy is reached. Plain text 10 seconds 30 seconds 1 minute 5 minutes 10 minutes 30 minutes 1 hour 3 hours 10 seconds 30 seconds 1 minute 5 minutes 10 minutes 30 minutes 1 hour 3 hours Maximum number of attempts: The value must be an integer between 1 and 30. The default value is 30. Event time-to-live (TTL): The value must be an integer between 1 and 240. The default value is 240 minutes. An event is sent to the dead letter queue if it is not delivered within the time-to-live period or the number of retries limit is reached. If we receive a 400 (Bad Request) or 413 (Request Entity Too Large) response code, the event is immediately scheduled for dead-lettering. These response codes indicate delivery of the event will never succeed. The time-to-live expiration is checked only at the next scheduled delivery attempt. So, even if time-to-live expires before the next scheduled delivery attempt, event expiry is checked only at the time of the next delivery and then subsequently dead-lettered. Once the event is sent to the dead-letter queue, the event delivery is abandoned. Our event failure notification service picks up the record from the queue, extracts the details, including the appropriate http status returned, failure reason. and sends out email alerts to the list of recipients configured to receive event failure alerts. The alerts are sent based on the alert criteria configuration described below. Alerts Alerts are not sent during the retry process. Once the event is sent to the dead-letter queue, the alert notifications are triggered based on the settings detailed below. Alert Frequency: This represents the rate at which alerts are generated within a specific duration. It indicates how often an alert is triggered based on the occurrence of an event that failed to deliver. It contains the following settings: Alert Frequency (Min): This setting defines the minimum time between alerts. It ensures that once an alert is triggered, there is a designated gap before another alert can be generated. This prevents MyPreferences from generating excessive alerts and creating unnecessary noise. Default setting is 5 minutes. It supports values more than 0. Alert Frequency (Max): This setting defines the maximum rate at which alerts are triggered when the webhook fails. For example, if the max frequency is set to 5 minutes, the system will not generate more than one alert every 5 minutes. Default setting is 30 minutes. Alert Threshold: This represents the count/number of errors or failures that must occur within a designated time period to trigger an alert. It ensures that only significant issues are flagged for immediate attention. It works in conjunction with “Alert Frequency” settings. It contains the following settings: Alert Threshold (Min): This is the minimum number of errors/failures that must occur within a designated time-frame to trigger an alert. It works in conjunction with “Alert Frequency”. Only values greater than "0" are supported for this setting. The default value is set to "1". Min value cannot exceed "100". For example, if it is is set to 5 consecutive failures, an alert will be generated only if the webhook fails to send notifications for 5 consecutive attempts. Alert Threshold (Max): This is the maximum allowable number of errors/failures within a defined duration before generating an alert. It helps prevent excessive alerting for less severe issues. It sets the maximum number of failures that are allowed before the system stops generating alerts. Works in conjunction with “Alert Frequency”. Only values greater than "5" are supported. The default value is set to "15". Max value cannot exceed "1000". These settings are managed at the account-level and can be enabled on webhook subscriptions individually. To update these settings on your account, send a request to support@possiblenow.com with desired configuration values. In order to start receiving alert notifications, email the MyPreferences Support team with the list of email addresses along with the subscriptions for which you want to activate alert notifications. All requests must include your MyPreferences Account Id , Environment (Sandbox or Production), and Webhook Subscription Names . Usage and Recommendations Utilizing webhooks effectively requires careful consideration of event selection and implementing best practices. One approach is to selectively subscribe to specific event types that align with your needs. For instance, subscribing to profile.created or profile.replaced event types can be advantageous as they provide comprehensive profile information by returning the entire profile. By choosing these events, you can streamline data retrieval while reducing unnecessary traffic. The Events webhook framework is primarily designed for time-sensitive integrations where immediate or real-time data updates are required. For integration scenarios, where timing is less critical, using the Bulk API may be more appropriate. Using webhooks for all integrations can have performance implications, especially in high-volume scenarios. The profile.replaced event is specifically generated when a PUT operation is performed to overwrite the profile. MyPreferences will not send any other events when profile.created or profile.replaced events are triggered. To receive profile update notifications, subscribe to the profile.updated event to be alerted when a profile changes, or to the profile.updatedfull event to receive the complete profile data in the event payload. When subscribing to Preference events, you can specify the Filters for which you want to receive events. You can specify AllFilters to receive events for all filters. When subscribing to Consent events, you can specify the Consent Types for which you want to receive events. You can specify AllConsents to receive events for all consent types configured in your MyPreferences account. The same applies to Groups , Contacts , and Custom Fields. Events for Standard Fields and Tags are applied globally across all profiles. For example, if you subscribe to standardfield.firstname.updated event type, a webhook notification is triggered anytime the first name field gets updated on any active profile. Multiple actions = Multiple events Often times, a simple operation on a profile may trigger multiple events. For example, a user adds an email address to their profile, updates a communication preference, and grants a consent. This action will result in the following event types being generated, each indicating the exact operation performed on customer's data. profile.updated contacts.email.added preference.added consent.filterassociation.created Each event represents an independent action. You must pay close attention to elements such as OriginalEventTime , EventTime , ProfileId , and associated data to correctly sequence the updates made to a user's profile. The OriginalEventTime property denotes the date and time when the event occurred. The EventTime property represents the date and time when the event was queued for distribution. These dates are designed to help you determine the processing order as well as identify the lag between the time it took to receive the event from its initial capture. The Data property includes the updated customer data associated with the event and makes it available for immediate use. The EventType property specifies the actual event. Tracking Changes with Previous Data Collection Webhook payloads for Standard Fields, Custom Fields, Customer Types, Contacts, and AlternateIds include both the current and previous values of updated fields. Alongside the Data object, a PreviousData object is also returned. This allows for precise change tracking, auditing, and improved synchronization by clearly showing what has changed. By leveraging MyPreferences Events and Subscriptions framework, clients can stay informed about crucial activities within the platform and seamlessly integrate MyPreferences with external systems to enhance their workflow and decision-making processes. • [Event Payload Samples](https://docs.mypreferences.com/integration-api/events/event-payload-samples.md): The Webhook Payload Samples section provides a curated collection of sample payloads designed to help you understand the structure and content of the data sent through our webhooks. Whether you're integrating with MyPreferences for the first time or seeking to optimize your existing integrations, these examples serve as valuable references to ensure seamless communication between your applications and MyPreferences. We have designed a streamlined event structure to efficiently communicate changes to profiles that occur within MyPreferences. Understanding the different types of events and their payloads is essential for effective integration and processing of profile updates. The payload samples are thoughtfully categorized, with each entity having its dedicated page containing events specific to that entity. The following events include a PreviousData collection, which contains the information as it existed before the event occurred. The current or updated information is available in the main Data collection. contacts.phone.updated contacts.email.updated contacts.address.updated contacts.alternateid.updated contacts.customertype.updated standardfield.defaultlocale.updated standardfield.firstname.updated standardfield.middlename.updated standardfield.lastname.updated customfield.updated By default, the webhook event payload includes a static text for Name and Description fields for each event type. Presently, these cannot be programmatically updated, and requests for updates specific to each event type must be made through our support team. If your webhook subscription is set up with an AlternateIdType, the ProfileId in the event payload will be replaced with the AlternateId associated with the AlternateIdType specified in your webhook subscription request. • [ProfileActions](https://docs.mypreferences.com/integration-api/events/event-payload-samples/profileactions.md): Profile Created and Replaced: Subscribing to this event type provides you with the entire profile record whenever a new profile is created or an existing profile is replaced with updated information using the Update Profile method . This comprehensive payload contains all the fields associated with the profile as specified in the create or update request. Profile Deactivated, Reactivated, and Deleted: For these events, you will receive a basic payload containing only the unique identifier (ProfileId or AlternateId) of the profile that has been deactivated or deleted. This minimalist approach ensures that you are informed of the action taken without unnecessary data overhead. Profile Updated: Whenever any property on a profile is modified, such as last name, email address or a phone number, you will receive the profile.updated event indicating the update. This event will be in addition to any specific event to which you are subscribed. For example, if you subscribe to profile.updated and contacts.email.added events, you will receive two events respectively. Similar to deactivation and deletion events, the payload will consist of the profile ID along with basic event information. The webhook system will produce only one profile.updated event per operation to minimize unnecessary notifications. For instance, if you execute a single API call to add or modify multiple fields on a profile, you'll receive events for individual updates according to your webhook subscriptions, but only one profile.updated event for the entire operation. This rule applies to all updates made through the Data API. Additionally, updates carried out by Status Manager on enabled accounts are also included in this process. Profile Created: The profile.created event is triggered when a new profile is added. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "Y1HTRLXHsw17V8X2Bk93CadK/jNWkdBWnMpJy2JT", "WebhookProxyHashSignature": "RAiHKo7VrXIYXFLeF0Y/+TS7UWl+5T/rP1qNUZ6HRfis8/zzfZIDGpGogcibMV7BculPX8N5S3hVfUXQsNQ9xQ==", "WebhookSignature": "Timestamp:2024-03-25T22:58:13Z Signature:6d9yhI6D2eBX/iW5hM91UclHRuzlQGuc9JTVeIAWXjPqzfTOj5VYEo/qrj8+JBtnMOB/Xj/BEF+fft8m2B4kPg==", "EventId": 162943000, "EventType": "profile.created", "Subject": "profile.created", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.created", "Description": "profile.created Description", "ProfileId": 726175, "Data": { "Consents": [ { "ConsentType": "Data Processing Consent", "ConsentVersion": "version1.0", "Locale": "en_US", "ConsentStatus": 1, "ConsentDate": "2021-06-20T04:00:00.000Z", "Expired": false, "SourceId": "Default", "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" }, "UpdatedVersionPending": false, "IsActive": true } ], "CustomFields": [ { "Name": "Occupation", "Value": "Designer", "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } } ], "Groups": [ { "GroupType": "Employee", "IsPrimary": false, "GroupName": "Marketing", "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } }, { "GroupType": "Employee", "IsPrimary": false, "GroupName": "Product", "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } } ], "Emails": [ { "EmailAddressType": "Home", "EmailAddress": "johnnydoe@example.com", "IsDefault": false, "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } }, { "EmailAddressType": "Work", "EmailAddress": "brian@example.com", "IsDefault": true, "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } } ], "IsActive": true, "Edited": { "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" }, "RegistrationConfirmed": true, "CustomerType": "Subscriber", "PreserveConsents": true, "PreservePreferences": true, "CustomerName": { "FirstName": "Brian", "MiddleName": "f", "LastName": "Johnson" }, "DefaultLocale": "es", "UpdateStatus": "Complete" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T23:29:53.693Z", "EventTime": "2024-03-25T22:58:12.720Z", "CreateDate": "2024-03-25T22:58:12.703Z", "CreatedBy": "My Accounts Page" } ] Profile Replaced: The profile.replaced event is only generated when a PUT operation is performed on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "w7PZEk+kQE8+UjucYnaiAWXR7+jg4a8/CFLM", "WebhookProxyHashSignature": "FNrSQtpf+0EK21C6TuBz0B1Zbw1n5mQwYSAOVgDJ5lEz8bfJEScZoWtV2eFwVf31KbGlSZ1x3tBHZ0pUspJLw==", "WebhookSignature": "Timestamp:2024-04-02T16:07:47Z Signature:r7uEzl0dQIvSfbNwlYI7Y9xdB3dwayem2Xc0FHAWcrWL+Hof1SFLmRcUFJmhwWZlukcu4e2ZIV3bnU48lJ6AA==", "EventId": 177457000, "EventType": "profile.replaced", "Subject": "profile.replaced", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.replaced", "Description": "", "ProfileId": 18807, "Data": { "Consents": [ { "ConsentType": "ExpressConsent", "ConsentVersion": "version1.0", "Locale": "en_US", "ConsentStatus": 3, "ConsentDate": "2024-04-01T20:27:10.000Z", "Expired": false, "SourceId": "Default", "Edited": { "CreateDate": "2021-08-25T17:36:13.167Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" }, "UpdatedVersionPending": false, "IsActive": true } ], "CustomFields": [ { "Name": "Occupation", "Value": "Marketing and Creative Manager", "IsActive": true, "Edited": { "CreateDate": "2024-03-21T22:34:24.200Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } }, { "Name": "Interests", "Value": "Online Gaming::Camping and Outdoors", "IsActive": true, "Edited": { "CreateDate": "2024-03-21T22:43:04.043Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } } ], "Groups": [ { "GroupType": "Employee", "IsPrimary": false, "GroupName": "Marketing", "IsActive": true, "Edited": { "CreateDate": "2024-03-26T21:13:17.203Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } } ], "ProfileTags": [ { "Name": "frequent visitor" }, { "Name": "rewards member" } ], "Emails": [ { "EmailPreferences": [ { "ProgramId": "Product Offers and Promotions", "ChannelId": "Email", "MatchType": "Expressed", "ReasonCode": "", "PreferenceStatus": "Active", "LastModifiedDate": "2024-04-02T16:07:46.660Z", "UserId": "My Accounts Page", "SourceId": "Default", "FilterId": "EM_Product Offers and Promotions", "PreferenceType": 2, "FrequencyId": "Default", "CustomerDate": "2024-04-02T15:21:38.000Z" } ], "EmailAddressType": "Home", "EmailAddress": "john.doe@example.com", "IsDefault": false, "Consents": [ { "ConsentType": "EmailConsent", "ConsentVersion": "version1", "Locale": "en", "ConsentStatus": 1, "ConsentDate": "2024-04-02T16:00:11.000Z", "Expired": false, "SourceId": "Default", "Edited": { "CreateDate": "2024-04-02T16:00:16.173Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" }, "UpdatedVersionPending": false, "IsActive": true } ], "IsActive": true, "Edited": { "CreateDate": "2021-08-25T17:36:13.167Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } }, { "EmailAddressType": "Alternate", "EmailAddress": "johnny2@gmail.com", "IsDefault": false, "IsActive": true, "Edited": { "CreateDate": "2024-03-25T21:52:28.130Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } } ], "PhoneNumbers": [ { "PhoneType": "Home", "PhoneNumber": "7702551020", "PhoneNumberNumeric": 7702551020, "IsDefault": false, "IsMobile": false, "IsActive": true, "Edited": { "CreateDate": "2024-03-18T14:44:29.013Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } }, { "PhoneType": "Work", "PhoneNumber": "4049092300", "PhoneNumberNumeric": 4049092300, "IsDefault": false, "IsMobile": true, "IsActive": true, "Edited": { "CreateDate": "2024-03-25T21:57:08.480Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" } } ], "IsActive": true, "Edited": { "CreateDate": "2021-08-25T17:36:13.167Z", "CreatedBy": "My Accounts Page", "ModifiedDate": "2024-04-02T16:07:46.660Z", "ModifiedBy": "My Accounts Page" }, "RegistrationConfirmed": true, "CustomerType": "Subscriber", "PreserveConsents": false, "PreservePreferences": true, "CustomerName": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "Doe", "Prefix": "Mr." }, "DefaultLocale": "en_US", "UpdateStatus": "Complete", "ReasonCode": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T23:29:53.693Z", "EventTime": "2024-04-02T16:07:46.700Z", "CreateDate": "2024-04-02T16:07:46.660Z", "CreatedBy": "My Accounts Page" } ] Profile Deactivated: The profile.deactivated event is triggered when an existing profile is deactivated. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "gDQSrcVCq5VP0hlaDKAPjyl7lIlA4PEipSt+BItAyPylz/QI/X8D", "WebhookProxyHashSignature": "BcNeRujPfWoePmnxThR9d7IBhou6qY09iWx9JYyYH+stjpoSun9AWRmJB13/JkeCW4ztiplqHstnhOk9gRbz8g==", "WebhookSignature": "Timestamp:2024-03-25T23:15:34Z Signature:LDoIB2WZc/GeMlokaNFwZwHcGIFXvEDwtIAAXb0WLy9Jsw3WG/VUypwFhTW8h2HfTgUTue0kworrfTh2N3Traw==", "EventId": 163012000, "EventType": "profile.deactivated", "Subject": "profile.deactivated", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.deactivated", "Description": "profile.deactivated Description", "ProfileId": 726175, "Data": { "ReasonCode": "Past customer", "ProfileDeactivated": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T23:29:53.693Z", "EventTime": "2024-03-25T23:15:33.937Z", "CreateDate": "2024-03-25T23:15:33.923Z", "CreatedBy": "My Accounts Page" } ] Profile Reactivated: The profile.reactivated event is triggered when a deactivated profile is reactivated. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "dLJbZ20ltp8wCAJhmjJyZvk3uqXVMDp44dxkR8VBBME=", "WebhookProxyHashSignature": "jIeEn36AmHXgn08grjxwyCAt+vBkcv3/Zk2PGOvewCFNaWQRgt0wfFrSikzbm7K2rxBvv0wYjjyTOPWq6OrmtA==", "WebhookSignature": "Timestamp:2024-03-25T23:17:35Z Signature:7QM6Le7lx50AIBtoHMbGx4oCUms0/RkOV9IyMa3MaA8V6cuaUQ9K9QQlWZLCMjUaKEphD7KBypbq6sYirn/00g==", "EventId": 163066000, "EventType": "profile.reactivated", "Subject": "profile.reactivated", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.reactivated", "Description": "profile.reactivated Description", "ProfileId": 726175, "Data": { "ProfileReactivated": true }, "AppVersion": 1, "EventTime": "2024-03-25T23:17:34.257Z", "CreateDate": "2024-03-25T23:17:34.117Z", "CreatedBy": "My Accounts Page" } ] Profile Deleted: The profile.deleted is triggered when a contact is permanently removed from MyPreferences. Subscribing to these events proves valuable in scenarios where there's a necessity to receive notifications regarding data erasure requests as mandated by regulations such as GDPR or other privacy policies. This allows you to maintain compliance and honor customer's request to permanently remove their personal data. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "rXU14sWEqxX/SWLqbSpfI78yipk+zb0+DW89svYi", "WebhookProxyHashSignature": "bsoHc9lGEZqNWK+8KLqntspXe//OVReoWUZwM86wNuTkAE8/9TAzSAxlimWntU0tUbj8bAVP/bKxc+4X/Ki4CA==", "WebhookSignature": "Timestamp:2024-03-25T23:29:54Z Signature:VvuIlLQjZygMNmN3B/1Iu6K3sKkkxdcRwWXCLAMRrifGwJesSJ63To3MYd48FFUIWI7jwmO1AwaeYKFeCc+Fyg==", "EventId": 163120000, "EventType": "profile.deleted", "Subject": "profile.deleted", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.deleted", "Description": "profile.deleted Description", "ProfileId": 726175, "Data": { "ReasonCode": "Fulfillment of deletion request", "ProfileDeleted": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T23:29:53.693Z", "EventTime": "2024-03-25T23:29:54.693Z", "CreateDate": "2024-03-25T23:29:54.690Z", "CreatedBy": "My Accounts Page" } ] Profile Updated: The profile.updated event is an informational event that's generated each time a profile is updated. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "g7U2IW+KCfsq//zuUIDQCnfkWtk6K2+6ZpYslXsuTl+rKOJJ9cNtGVZmWrIM", "WebhookProxyHashSignature": "Tf/AabnOi1SunM/L1gRNOPCGDS0SkfIU4No+fZ410Jch7jz2Uf+bLj9R4wcO/5Yeihzw240EEyezKUpBsYkV2Q==", "WebhookSignature": "Timestamp:2024-03-26T20:35:06Z Signature:yVznlNGG5zA0YMdXGF/nI46jrWQhm68ofj3DzCwAmkjFAb3lrpbhlPw+Oi9iqGindFXNHS4HzZWCj4ePsJnn8A==", "EventId": 172614000, "EventType": "profile.updated", "Subject": "profile.updated", "Entity": "Profile", "SubscriptionId": 41, "Name": "profile.updated", "Description": "profile.updated Description", "ProfileId": 18807, "Data": {}, "AppVersion": 1, "OriginalEventTime": "2024-03-25T23:29:53.693Z", "EventTime": "2024-03-26T20:35:05.350Z", "CreateDate": "2024-03-26T20:35:05.327Z", "CreatedBy": "My Accounts Page" } ] • [Preferences](https://docs.mypreferences.com/integration-api/events/event-payload-samples/preferences.md): Preferences play a pivotal role in personalizing user experiences and tailoring interactions to individual preferences. In a dynamic digital landscape, it's essential to have real-time insights into changes in user preferences to enhance engagement and satisfaction. Our preferences webhook events offer a seamless way to stay updated on these changes, ensuring your systems are always aligned with the latest user preferences. Preference events are only triggered for Filters associated with your webhook subscription. To receive events across all Filters, specify " AllFilters ” when creating your webhook subscription. { "Entity": "Preferences", "EventType": "preference.added", "Filters": [ "AllFilters" ] } Preference Added: The preference.added event is triggered any time a new preference gets added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "I5Fd7XrQnfFVeagC46is/feg33HzuOL3y9I4Z8827R4x0Q==", "WebhookProxyHashSignature": "ylvRjgE2A2NSTzIgcmxhxKMa0vE9fzxOcswcz1HqR6ZpiVEKUXiyXhbO2bJRxvWYLaYeNaHypr+Yyw==", "WebhookSignature": "Timestamp:2025-10-25T01:17:24Z Signature:ljmRMfWwggsxNdat0NZdh2moKKL55403957WkB1CacLvybHOEWNTvUVqDnysuFGKQu6Ks50z0aE0r1v0g==", "EventId": 561377000, "EventType": "preference.added", "Subject": "preference.added", "Entity": "Preferences", "SubscriptionId": 41, "Name": "preference.added", "Description": "preference.added", "ProfileId": 3521, "Data": { "MissingRequiredConsents": false, "FilterID": "EM_Financial Planning", "PreferenceType": "Opt-In", "FilterName": "Financial Planning Webinars", "TypeName": "Home", "LastModifiedDate": "2025-10-25T01:17:23.060Z", "CustomerDate": "2025-10-25T01:17:21.000Z", "SourceId": "Default", "Frequency": "Weekly", "Channel": "Email", "ProgramId": "Finanical Planning", "ProgramName": "Finanical Planning", "EmailAddress": "john.doe@example.com", "IsDefault": false, "ReasonCode": "", "MatchType": "Expressed", "ExpirationDate": "2026-10-25T01:17:21", "PreferenceStatus": "Active" }, "AppVersion": 1, "EventTime": "2025-10-25T01:17:24.180Z", "OriginalEventTime": "2025-10-25T01:17:23.097Z", "CreateDate": "2025-10-25T01:17:23.060Z", "CreatedBy": "Mobile App" } ] Preference Updated: The preference.updated event is triggered each time a preference record is updated. This not only include updates to the preference type or preference status, but also updates to preference attributes, frequencies and other fields that are a part of the preference. Preference events do not account for consent associations with preferences. You must subscribe to consent.filterassociation events to receive updates when a consent gets associated with a preference. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "ffvN83/UnmVmu1J3QhvZMa0eE2dlQEFSLmB2numkjFyuzMCj", "WebhookProxyHashSignature": "C+uVQyYLzFBl5oDTG1A6/S4CSEAK9Hg6kmPDOItXH8Ovz7weN3OsBczoL6UkPWLP7LcTidzEjuFE1b1gSAaxSA==", "WebhookSignature": "Timestamp:2024-03-30T03:37:09Z Signature:onEV+qdOoy5XGUy5HaCBU21IU5A5Ju05YLAfKXDa9Fqhn8C8pPIKAJR2a+c7dq4AqW1H274pQJmmYE7cK4ntyQ==", "EventId": 175648000, "EventType": "preference.updated", "Subject": "preference.updated", "Entity": "Preferences", "SubscriptionId": 41, "Name": "preference.updated", "Description": "preference.updated Description", "ProfileId": 18807, "Data": { "FilterID": "EM_PROD_INSIGHTS", "PreferenceType": "Opt-In", "FilterName": "Product Insights and Updates", "TypeName": "Home", "LastModifiedDate": "2024-03-30T03:37:09.573Z", "CustomerDate": "2024-03-30T03:37:02.000Z", "SourceId": "Default", "Frequency": "Weekly", "Channel": "Email", "ProgramId": "PROD_INSIGHTS", "ProgramName": "Product Insights and Updates", "EmailAddress": "john.doe@example.com", "IsDefault": false, "ReasonCode": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-30T03:37:09.613Z", "EventTime": "2024-03-30T03:37:09.613Z", "CreateDate": "2024-03-30T03:37:09.573Z", "CreatedBy": "My Accounts Page" } ] Preference Archived: The preference.archived event is triggered each time a preference is archived within MyPreferences. Preference archival occurs for various reasons, such as when a contact element is removed with PreservePreferences flag set to false, or the consent associated with the preference gets revoked. Additionally, changing the IsMobile value on a phone number from true to false will also archive any SMS preferences associated with that phone number. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "vqY2Sd1aktmoAQnUJVS0nOeVzR+8hnUN1t8Xxnu/0Q==", "WebhookProxyHashSignature": "KUg6Qe7PCWRVvG25iPdcYxMWq+k8NQR0cyFU4tkNrHT/7E6amPnZdf9YZYnVSQ1nFfo8dk8bKCD4xXoyqY/2hg==", "WebhookSignature": "Timestamp:2024-03-29T20:17:56Z Signature:SQMZc9w8L44OfHis0ytcnIffF08/nz7jK/iWcJPyfClqHKQWvE++9uLBWFSOLlGmqlRLy1NUhhDmzyF0W7Jp/A==", "EventId": 175073000, "EventType": "preference.archived", "Subject": "preference.archived", "Entity": "Preferences", "SubscriptionId": 41, "Name": "preference.archived", "Description": "preference.archived Description", "ProfileId": 18807, "Data": { "FilterID": "EM_PROD_INSIGHTS", "PreferenceType": "Opt-In", "FilterName": "Product Insights and Updates", "TypeName": "Home", "LastModifiedDate": "2024-03-29T20:11:04.777Z", "CustomerDate": "2024-03-29T20:11:03.000Z", "SourceId": "Default", "Frequency": "Default", "Channel": "Email", "ProgramId": "PROD_INSIGHTS", "ProgramName": "Product Insights and Updates", "EmailAddress": "john.doe@example.com", "IsDefault": false, "ReasonCode": "Deactivated due to Revocation of Consent" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T20:17:54.270Z", "EventTime": "2024-03-29T20:17:55.270Z", "CreateDate": "2024-03-29T20:11:04.777Z", "CreatedBy": "My Accounts Page" } ] • [Consents](https://docs.mypreferences.com/integration-api/events/event-payload-samples/consents.md): Consent is pivotal in modern data-driven interactions, ensuring user privacy and regulatory compliance. Our consent webhook events offer concise updates on changes in user consents throughout their customer journey, providing essential insights for regulatory compliance and user privacy management. Consent events are only triggered for consents associated with your webhook subscription. To receive events across all consents, specify " AllConsents ” when creating your webhook subscription. { "Entity": "Consents", "EventType": "consent.status.updated", "ConsentTypes": [ "AllConsents" ] } Consent Added: The consent.added event is triggered when a consent is added to a profile. Plain text [ { "Topic": "4173-1-2521c7003493478aa79f269f8df4d30c", "WebhookProxyRandomValue": "VNxyYU7Y9rZlf1tz135BctADK8MmxDCk6aC2i02n5ByzebjBtioV=", "WebhookProxyHashSignature": "seyeOsAiDraj5ZtLdT1mrIqga28GvqvhBl7tbtNS4poOs/NKBH4vDw==", "WebhookSignature": "Timestamp:2023-07-12T21:07:28Z Signature:XXb0K2L5I/d6KU+VVeVMXbX+Zm3jHiYtrVFNZluJWJQWu+57HY/V8WrL8nTkaf9uX3oo+Kv0gdNCxC+jcMX/XQ==", "EventId": 3687410030, "EventType": "consent.added", "Subject": "consent.added", "Entity": "Consents", "SubscriptionId": 1019, "Name": "Consent Added Notification", "Description": "Consent has been added to a profile", "ProfileId": 18807, "Data": { "ConsentType": "Data Processing Consent", "ConsentVersion": "v2.0", "ConsentStatus": "Granted", "Locale": "en_US", "ConsentDate": "2023-09-12T16:10:34", "ExpirationDate": "2024-09-11T23:59:59", "ReasonCode": null, "ConsentAttributes": [ { "Key": "Purpose of Processing", "Value": "Research and Analytics" }, { "Key": "Applicable Jurisdictions", "Value": "North America" } ] }, "AppVersion": 1, "OriginalEventTime": "2023-07-12T21:06:51.963", "EventTime": "2023-07-12T21:06:52.963", "CreateDate": "2023-09-12T12:10:43.910Z", "CreatedBy": "John.Doe" } ] Consent Updated: The consent.updated event is triggered when a consent is updated on a profile. This includes updates to the consent status, consent attributes, etc. Additionally, if you opt-out of a preference associated with the consent, the consent.updated event is generated resulting in the consent status update from Granted to Revoked . Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "LWCmAWP7VO6MNv1hpHrad+cHGxQamxTVwFUfb0iraPMxEGYQCYUztLGG3qEaPajsdcg=", "WebhookProxyHashSignature": "KIhTX8umjn+OOr8jjhutwfSfbODU1V2aQFHC3y1dFTT1vTyas/66JtGJR4QD2uUyy1bo6cFC542j4r/YRYHEJg==", "WebhookSignature": "Timestamp:2024-03-28T16:53:43Z Signature:tHWi8TrW4d4jUUAjomEkFP027R55mwnarAKjqnD1kBvRRVoWCLXicoEMf4FeHjFVrResl7gl5r/iMem0bkhBIA==", "EventId": 173393000, "EventType": "consent.updated", "Subject": "consent.updated", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.updated", "Description": "consent.updated Description", "ProfileId": 18807, "Data": { "ConsentType": "Data Sharing", "ConsentVersion": "version1.0", "ConsentStatus": "Revoked", "Locale": "en_US", "ConsentDate": "2024-03-28T16:53:38.000Z" }, "AppVersion": 1, "OriginalEventTime": "2024-03-28T16:53:41.727Z", "EventTime": "2024-03-28T16:53:42.727Z", "CreateDate": "2024-03-28T16:53:42.647Z", "CreatedBy": "My Accounts Page" } ] Consent Deactivated: The consent.deactivated event is triggered when a consent gets deactivated on a profile. This situation often arises when you attempt to add an already existing consent but with a different locale. As a result, the previous consent is deactivated. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "KDZiqPyCnjihXPUW0IGj009HFRMOIprghBgw75uAdlTW/0ITpYsXICz2z+vXN8kJAWE=", "WebhookProxyHashSignature": "ZrgyCc5cKjdWmdCVzi4b4VshhFr9zb2DugTLRIHF/IcpP6Szg3n8NdnX1fSg7EZcRjwgOSkciBqIx/KAn5UcCg==", "WebhookSignature": "Timestamp:2024-04-02T16:52:09Z Signature:D4pV61G0+T1AZ6mis3rSCrkVyNgiYrnB1u/vEGhzQMKXhrzU1Pk9XrK6g6U8l3ldqKZYQlfVUZsxxiEKwhPaMw==", "EventId": 178186000, "EventType": "consent.deactivated", "Subject": "consent.deactivated", "Entity": "Consents", "SubscriptionId": 55, "Name": "consent.deactivated", "Description": "consent.deactivated", "ProfileId": 726193, "Data": { "ConsentType": "Data Processing Consent", "ConsentVersion": "v1", "ConsentStatus": "Granted", "Locale": "en_US", "ConsentDate": "2024-04-02T16:52:09Z" }, "AppVersion": 1, "OriginalEventTime": "2024-04-02T16:52:08.353Z", "EventTime": "2024-04-02T16:52:09.353Z", "CreateDate": "2024-04-02T16:52:09.32Z", "CreatedBy": "My Account Portal" } Consent Element Association Created: The consent.elementassociation.created event is triggered when a consent gets associated with a contact element for the first time. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "fvh4W/n82bqqxEoYBWaVmDzvB/RDPNPYSTHKfOJXvAQSgCt7U2k=", "WebhookProxyHashSignature": "JQT4vyHwRuO1oZPWYxAfclXM/Gh0YsJ10DkrELyo92KSHNKsHM2b1Emj+mavNnFfUtBVRXpCNGu++zbXVFxOhA==", "WebhookSignature": "Timestamp:2024-04-01T16:02:20Z Signature:cPGHtqCmunjBdKmo21qBnUN2BlYPkmnl/A6t1juqjqdzv5N59sdbOUy0um7zUrEUN0Ws3lF0quNvBCxbbQyFVA==", "EventId": 176203000, "EventType": "consent.elementassociation.created", "Subject": "consent.elementassociation.created", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.elementassociation.created", "Description": "consent.elementassociation.created Description", "ProfileId": 18807, "Data": { "ConsentType": "EmailMarketingConsent", "ConsentVersion": "v1", "TypeName": "Work", "ConsentStatus": "Granted", "Locale": "en_US", "ConsentDate": "2024-04-01T16:02:18.000Z", "EmailAddress": "johnny@example.com", "IsDefault": false }, "AppVersion": 1, "OriginalEventTime": "2024-04-01T16:02:19.133Z", "EventTime": "2024-04-01T16:02:20.133Z", "CreateDate": "2024-04-01T16:02:20.113Z", "CreatedBy": "My Accounts Page" } ] Consent Element Association Updated: The consent.elementassociation.updated event is triggered when a consent associated with a contact element is updated. This happens when you update the associated consent by changing its status, updating consent attributes, etc. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "DTJ0o8RAoGnw0/wHE1RET5mY2kfn0+z1JRs=", "WebhookProxyHashSignature": "ybnE9gYraojX+Yf5JVs0OzvJ3heLgM1z0xIgZ67dVNKq1M43oZB4Iz8ByeL1C1X19mzEi4Eb0mmjhxcOJZ5ncg==", "WebhookSignature": "Timestamp:2024-04-01T16:05:10Z Signature:bNacjU1tGyUSFc6Re1mbRJrP/PP9c6kAaXfhtqzghG724dFQ+bCZzXE1/rT45EfJh6KXWB23gYI466ouH90LKw==", "EventId": 176306000, "EventType": "consent.elementassociation.updated", "Subject": "consent.elementassociation.updated", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.elementassociation.updated", "Description": "", "ProfileId": 18807, "Data": { "ConsentType": "EmailMarketingConsent", "ConsentVersion": "v1", "TypeName": "Work", "ConsentStatus": "Granted", "Locale": "en_US", "ConsentDate": "2024-04-01T16:05:01.000Z", "EmailAddress": "johnny@example.com", "IsDefault": false }, "AppVersion": 1, "OriginalEventTime": "2024-04-01T16:05:09.317Z", "EventTime": "2024-04-01T16:05:10.317Z", "CreateDate": "2024-04-01T16:05:10.290Z", "CreatedBy": "My Accounts Page" } ] Consent Element Association Deactivated: The consent.elementassocation.deactivated event is triggered when a consent associated with the contact element is deactivated. This happens when you update the contact element value associated with the consent and the PreserveConsents flag is set to false . Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "Kx9sPAiMYYRmBbjfEky25rotZVGzqF4soYj3", "WebhookProxyHashSignature": "oA4Im1R2b/EYAD853YtByOE9NVNH9guX7k03Wfjk3QqAIaqzQ94F9rsIDhwb7qLls7FRVH2yYKIZ2TspW0mT/Q==", "WebhookSignature": "Timestamp:2024-04-01T16:05:50Z Signature:ZLxxapmsKl0cwUjgjGJMvuHxpjvlGp50pC/9Qc0cwQVh85mRhU6u/bHvwcGgm3uWOxGQLQnKdBcF1gZLWiWDiA==", "EventId": 176359000, "EventType": "consent.elementassociation.deactivated", "Subject": "consent.elementassociation.deactivated", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.elementassociation.deactivated", "Description": "consent.elementassociation.deactivated Description", "ProfileId": 18807, "Data": { "ConsentType": "EmailMarketingConsent", "ConsentVersion": "v1", "TypeName": "Work", "ConsentStatus": "Granted", "Locale": "en_US", "ConsentDate": "2024-04-01T16:05:01.000Z", "EmailAddress": "johnny@example.com", "IsDefault": false }, "AppVersion": 1, "OriginalEventTime": "2024-04-01T16:05:40.390Z", "EventTime": "2024-04-01T16:05:50.390Z", "CreateDate": "2024-04-01T16:05:50.377Z", "CreatedBy": "My Accounts Page" } ] Consent Filter Association Created: The consent.filterassociation.created event is triggered when a consent gets associated with a preference for the first time. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "fXiYT+mnSgu/Ih0Jz7O6OR+ys098XIOVTDYdLoGTlvxXO5dEgdmmy+uFbtQ=", "WebhookProxyHashSignature": "eDAWMzXMQLvpZEx91Uos6FODUghGwo877RvVw2Q+67kWv4JiJ+Z166A5sEzagPCBwvk3LdKjjaZRCm4g/mYcGw==", "WebhookSignature": "Timestamp:2024-03-28T23:13:07Z Signature:z/sbrJeAfFQXiDNAAZTiD63SfxWPypu/WWao88hdfH2Ph7Yi2FNbmIHhJRjqKeDj0kQRwyufIrUuUD4HCQhIwg==", "EventId": 173490000, "EventType": "consent.filterassociation.created", "Subject": "consent.filterassociation.created", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.filterassociation.created", "Description": "consent.filterassociation.created Description", "ProfileId": 18807, "Data": { "ConsentVersion": "version1.0", "ConsentType": "DataSharingProducts", "FilterID": "EM_PROD_INSIGHTS", "PreferenceType": "Opt-In", "TypeName": "Home", "Channel": "Email", "FilterName": "Product Insights and Updates", "EmailAddress": "john.doe@example.com", "IsDefault": false, "Locale": "en_US", "ConsentStatus": "Granted" }, "AppVersion": 1, "OriginalEventTime": "2024-03-28T23:13:05.720Z", "EventTime": "2024-03-28T23:13:06.720Z", "CreateDate": "2024-03-28T23:13:06.700Z", "CreatedBy": "My Accounts Page" } ] Consent Filter Association Updated: The consent.filterassociation.updated event is triggered when a consent associated with a preference is updated. This happens when you update the associated consent by changing its status, updating consent attributes, etc. Moreover, should a preference that was once linked with a consent becomes dissociated and subsequently re-associated, the consent.filterassociation.updated event is generated. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "i71DkxBtHC4zK2Z+HlqOfTk4ThlQ5uFM9DBOoerMataQSvsokyzelFVv", "WebhookProxyHashSignature": "MJrpK4TqFxZjYx7h0/2JFz5M8cN8g57vRfeJzymIVzN37lmVn5d+3uGxlE/dePZRUsCyhGK6ig7QxBUo2CEPLw==", "WebhookSignature": "Timestamp:2024-03-29T20:11:05Z Signature:I4wp+3+rPXdRHAsuAARVW0bF/r3yGBPm7BmcNvPWvEqGl80IfrKx2OBwtoFJ7ekNR2BqkLyd19aLCt1aiB9+vg==", "EventId": 174979000, "EventType": "consent.filterassociation.updated", "Subject": "consent.filterassociation.updated", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.filterassociation.updated", "Description": "", "ProfileId": 18807, "Data": { "ConsentVersion": "version1.0", "ConsentType": "DataSharingProducts", "FilterID": "EM_PROD_INSIGHTS", "PreferenceType": "Opt-In", "TypeName": "Home", "Channel": "Email", "FilterName": "Product Insights and Updates", "EmailAddress": "john.doe@possiblenow.com", "IsDefault": false, "Locale": "en_US", "ConsentStatus": "Granted" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T20:11:05.813Z", "EventTime": "2024-03-29T20:11:04.813Z", "CreateDate": "2024-03-29T20:11:04.777Z", "CreatedBy": "My Accounts Page" } ] Consent Filter Association Deactivated: The consent.filterassociation.deactivated event is triggered when a consent associated with a preference is revoked eliminating the preference association. Additionally, if subscribed, you will also receive the preference.archived event. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "DdYxPYvi58C9R2JxUzXRd4iy5qJyCG4B9BgXdZQ=", "WebhookProxyHashSignature": "NswsEropiChuxSdNobkk7NN+9xHE1ZiGkfc91QWrUu/UwStFAr9V05Z8yLTcC14G1tpcb8LoYZXLiWWQKN1RMA==", "WebhookSignature": "Timestamp:2024-03-29T20:17:56Z Signature:SQMZc9w8L44OfHis0ytcnIffF08/nz7jK/iWcJPyfClqHKQWvE++9uLBWFSOLlGmqlRLy1NUhhDmzyF0W7Jp/A==", "EventId": 175069000, "EventType": "consent.filterassociation.deactivated", "Subject": "consent.filterassociation.deactivated", "Entity": "Consents", "SubscriptionId": 41, "Name": "consent.filterassociation.deactivated", "Description": "consent.filterassociation.deactivated Description", "ProfileId": 18807, "Data": { "ConsentVersion": "version1.0", "ConsentType": "DataSharingProducts", "FilterID": "Product Insights and Updates", "PreferenceType": "Opt-In", "TypeName": "Home", "Channel": "Email", "FilterName": "EM_PROD_INSIGHTS", "EmailAddress": "john.doe@example.com", "IsDefault": false, "Locale": "en_US", "ConsentStatus": "Revoked" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T20:17:54.270Z", "EventTime": "2024-03-29T20:17:55.270Z", "CreateDate": "2024-03-29T20:17:55.233Z", "CreatedBy": "My Accounts Page" } ] • [Contacts](https://docs.mypreferences.com/integration-api/events/event-payload-samples/contacts.md): Contact webhook events are designed to empower you with timely insights into the evolution of contact information on your customer and non-customer profiles. Whether an email is added, updated, or deleted, or if changes occur in phone numbers or addresses, you can subscribe to receive notifications for these updates, covering the essential contact details that drive communication and engagement with your audience. Additionally, the Contacts entity also cover events for Alternate Ids and Customer Types . Contacts events are only triggered for contact types associated with your webhook subscription. To receive events across all contact types, specify " AllContactTypes ” when creating your webhook subscription. { "Entity": "Contacts", "EventType": "contacts.email.added", "ContactTypes": [ "AllContactTypes" ] } Email Added: The contacts.email.added event is triggered when an email address is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "EO5KzQp9CeeD8GpMsVP3j7B8dA19DILy6OzJjWS5t9An6j6jWajAprVwKpolw6I=", "WebhookProxyHashSignature": "AXLZ1mYkIb75+XfspaRfes+ldZCn6Ptoz2n4bzzMH/u8V4HkS1/OQCk9VfyO2mt6l75B3LOLYr6HQMRt6tkhFA==", "WebhookSignature": "Timestamp:2024-03-25T16:26:37Z Signature:W3TWFHaXNUI92lbROlk7wXZoIXail4yoea0b9H9aOcr7OcRbsXO8HUP1CWH/BrarHUpbq2bRwHxveqy53zV5qg==", "EventId": 130987000, "EventType": "contacts.email.added", "Subject": "contacts.email.added", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.email.added", "Description": "contacts.email.created Description", "ProfileId": 18807, "Data": { "EmailAddress": "john.doe@example.com", "EmailAddressType": "Work", "IsDefault": false }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T16:26:36.297Z", "EventTime": "2024-03-25T16:26:37.297Z", "CreateDate": "2024-03-25T16:26:37.280Z", "CreatedBy": "Preference Center" } ] Email Updated: The contacts.email.updated event is triggered when the email address or its associated properties are updated on a profile. Switching an email address from one email type to another will result in email.updated and email.added events respectively. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "F/5ukiK/P2xKlra6F6tb5Rwxf0jC22mOJtjKL8zu03INa4sfQRuWdSnC8My7RlyOuqU=", "WebhookProxyHashSignature": "mijc+bFSw94khn8IMO6BDHCNbhcb8HtVr41G2K44D26CYuNLUdv2YoMS/Q4y5SvBApu4p8jupfDaHWnVRxgFGw==", "WebhookSignature": "Timestamp:2025-07-29T16:30:41Z Signature:m4s1zDdG0MNYxUVy93ouMAjCHDgSKxrFyuXurJ4Lk2+/zS1KjGwbwr98IgEQzmf0B6WcY8Y5PbxbiMpotpwyWA==", "EventId": 473297000, "EventType": "contacts.email.updated", "Subject": "contacts.email.updated", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.email.updated", "Description": "contacts.email.updated", "ProfileId": 4851, "Data": { "EmailAddress": "johnny.doe@example.com", "EmailAddressType": "Home", "IsDefault": false }, "PreviousData": { "EmailAddress": "john.doe@example.com", "EmailAddressType": "Home", "IsDefault": false }, "AppVersion": 1, "EventTime": "2025-07-29T16:30:41.604Z", "OriginalEventTime": "2025-07-29T16:30:41.060Z", "CreateDate": "2025-07-29T16:30:41.047Z", "CreatedBy": "agent_outbound_889@example.com" } ] Email Deleted: The contacts.email.deleted event is triggered when an email address is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "JtPu7K7k3K3OHQ5t5FZdj4yoSsV4zngNnZ3K6XrQbYc9NmAik+UQgVCORQ==", "WebhookProxyHashSignature": "LrXjQvEWCbttP+2p5bgG1yGmzaOMvKTQ7yJGDBVM3Jz1WL2l14GaeocrZZ5WCp7PLUbwbLFY63iIHHDEJ5OOvA==", "WebhookSignature": "Timestamp:2024-03-25T21:54:58Z Signature:Iw40juQO2r7W66wsvPTifxP31beYebqYK4b5b7AuQB2o3+W68UBccgwtFIEkdjeFtlGNgK41ArNaz+xgvHRufg==", "EventId": 162850000, "EventType": "contacts.email.deleted", "Subject": "contacts.email.deleted", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.email.deleted", "Description": "contacts.email.deleted Description", "ProfileId": 18807, "Data": { "EmailAddress": "johnnathan.doe@example.com", "EmailAddressType": "Alternate", "IsDefault": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T21:54:57.333Z", "EventTime": "2024-03-25T21:54:58.333Z", "CreateDate": "2024-03-25T21:54:58.307Z", "CreatedBy": "My Accounts Page" } ] Phone Added: The contacts.phone.added event is triggered when a phone number is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "/YoiddDa12Cio/4/oUwtB9+CKQpUIHP2J5Q+iJyl4QOMv+tgrJxdv5s+tKwNv50=", "WebhookProxyHashSignature": "R5iNw9JbjI7rhDKMfSfJzgbbyqMgQ7Bp/gc9iLrl08FuDTWoGALOoi7y4n6Ekl3cbwj3T1fE/ODBw8QkxwtNGQ==", "WebhookSignature": "Timestamp:2024-03-25T21:57:08Z Signature:0DDRpiaCBHil/pOAC0GkiKQ4WeWfm4cbk6lnfVC/TcMiY8uQqxA8V9BN3OZ18jFDFKR92Z8E5GoxxDOR/s8oDg==", "EventId": 162924000, "EventType": "contacts.phone.added", "Subject": "contacts.phone.added", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.phone.added", "Description": "contacts.phone.created Description", "ProfileId": 18807, "Data": { "PhoneNumberNumeric": 7702551020, "PhoneNumber": "7702551020", "PhoneType": "Work", "IsDefault": false, "IsMobile": false }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T21:57:07.510Z", "EventTime": "2024-03-25T21:57:08.510Z", "CreateDate": "2024-03-25T21:57:08.480Z", "CreatedBy": "My Accounts Page" } ] Phone Updated: The contacts.phone.updated event is triggered when a phone number or its associated properties are updated a profile. Switching a phone number from one phone type to another will result in phone.updated and phone.added events respectively. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "x9qAY9ENF472lYyBMujzh+JX2db5b1RydKCcLHac6UC0ASvVMeBnTg==", "WebhookProxyHashSignature": "0wqPLsum8EzcioomdHRquDjcezyEzy4e0Q5/fswK8BJKDQ3nBzp3np08Rl4Sm2ZN6D2jHTHOqsiFZ8P9mzsUvg==", "WebhookSignature": "Timestamp:2025-08-01T19:58:52Z Signature:K3eZN0xWpCkJ0xXF1iE2lOUWQRhGpfNhYEi3NSCaqUWyNH5Oi3Lk+xDqXmu34lHDa/jg9uwfTjCVl6kbITvp2w==", "EventId": 473345000, "EventType": "contacts.phone.updated", "Subject": "contacts.phone.updated", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.phone.updated", "Description": "contacts.phone.updated", "ProfileId": 4851, "Data": { "PhoneNumberNumeric": 7702551021, "PhoneNumber": "7702551021", "PhoneType": "Work", "IsDefault": false, "IsMobile": false }, "PreviousData": { "PhoneNumberNumeric": 7702551020, "PhoneNumber": "7702551020", "PhoneType": "Work", "IsDefault": false, "IsMobile": false }, "AppVersion": 1, "EventTime": "2025-08-01T19:58:52.741Z", "OriginalEventTime": "2025-08-01T19:58:51.790Z", "CreateDate": "2025-08-01T19:58:51.763Z", "CreatedBy": "msmith@possiblenow.com" } ] Phone Deleted: The contacts.phone.deleted event is triggered when a phone number is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "0g5ut9qUNem28Zgxah6vETM4ZFcEpnO88nYkAdHIPoLy", "WebhookProxyHashSignature": "kZk6Y4nSL+KaM1OBABnnSZVHd9zdxnKMukQx5W9wS79oezlx5rXdL6CMUwj00njqmcGjLKbXSqhRoWElQABayQ==", "WebhookSignature": "Timestamp:2024-03-26T20:35:06Z Signature:yVznlNGG5zA0YMdXGF/nI46jrWQhm68ofj3DzCwAmkjFAb3lrpbhlPw+Oi9iqGindFXNHS4HzZWCj4ePsJnn8A==", "EventId": 172647000, "EventType": "contacts.phone.deleted", "Subject": "contacts.phone.deleted", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.phone.deleted", "Description": "contacts.phone.deleted Description", "ProfileId": 18807, "Data": { "PhoneNumberNumeric": 4043557092, "PhoneNumber": "4043557092", "PhoneType": "Work", "IsDefault": true, "IsMobile": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-26T20:35:06.363Z", "EventTime": "2024-03-26T20:35:05.363Z", "CreateDate": "2024-03-26T20:35:05.327Z", "CreatedBy": "My Accounts Page" } ] Address Added: The contacts.address.added event is triggered when a mailing address is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "/n9o0Ub1nvjLmzd809iUtUD8a7QOLAYOxINzSPMFVA==", "WebhookProxyHashSignature": "ZvNg/T6zN53R+0XVBHhJ46VLJRTghJ0ogfqKASnpaNcp4+0fX5s9uDp2iHeEddfpT76wa4cSpr0cYslT7n6dqw==", "WebhookSignature": "Timestamp:2024-03-26T20:39:55Z Signature:suQoowdSxAxsa/fLD3+suY74W7txUSja5bIizRUtQCTfwCFL+HplkZ1yGLuXSVR9GYzFxA0vjNyMj5U+CKF9Jw==", "EventId": 172674000, "EventType": "contacts.address.added", "Subject": "contacts.address.added", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.address.added", "Description": "contacts.address.created Description", "ProfileId": 18807, "Data": { "IsDefault": false, "Address1": "4400 River Green Pkwy", "Address2": "", "City": "Duluth", "StateProvince": "GA", "PostalCode": "30096-2549", "AddressType": "Home", "CountryName": "United States of America", "CountryAlpha2Code": "US", "CountryAlpha3Code": "USA", "CountryNumericCode": "840" }, "AppVersion": 1, "OriginalEventTime": "2024-03-26T20:39:54.643Z", "EventTime": "2024-03-26T20:39:55.643Z", "CreateDate": "2024-03-26T20:39:55.633Z", "CreatedBy": "My Accounts Page" } ] Address Updated: The contacts.address.updated event is triggered when a mailing address is updated a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "A9TJaRVnKGTVOF45XsHzd3r7BuD29tTBjAeQ+g==", "WebhookProxyHashSignature": "vvff06H9UCIJ/6y+6WYAEt7uVWIrv60ZHA7SPX0Tog89/glVxtwUzXYOGwNW98segtI4JHb0Ilhokg+MexoYlg==", "WebhookSignature": "Timestamp:2025-08-01T19:59:22Z Signature:q+Dzeq+v0zVA7LIQEB1c7qlQl/D2aimpT2Wmntm61agVI0muKYpwMk+qa4q6/E5wZq2TOU2/rIlka2FTSIpr4A==", "EventId": 473347000, "EventType": "contacts.address.updated", "Subject": "contacts.address.updated", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.address.updated", "Description": "contacts.address.updated", "ProfileId": 4851, "Data": { "IsDefault": false, "Address1": "2200 Gardner Dr", "City": "Alpharetta", "StateProvince": "GA", "PostalCode": "30009", "AddressType": "Home", "CountryName": "United States of America", "CountryAlpha2Code": "US", "CountryAlpha3Code": "USA", "CountryNumericCode": "840" }, "PreviousData": { "IsDefault": false, "Address1": "4400 River Green Pkwy", "Address2": "", "City": "Duluth", "StateProvince": "GA", "PostalCode": "30096", "AddressType": "Home", "CountryName": "United States of America", "CountryAlpha2Code": "US", "CountryAlpha3Code": "USA", "CountryNumericCode": "840", "CassStreetPreDirectional": "", "CassStreetNumber": "4400", "CassStreetName": "RIVER GREEN", "CassStreetSuffix": "PKWY", "CassStreetPostDirectional": "", "CassStateProvince": "GA", "CassSuite": " ", "CassStatus": "Y", "CassZip": 30096, "CassZip4": 2531, "CassAddress1": "4400 RIVER GREEN PKWY", "CassPostalCode": "30096-2531" }, "AppVersion": 1, "EventTime": "2025-08-01T19:59:22.314Z", "OriginalEventTime": "2025-08-01T19:59:21.787Z", "CreateDate": "2025-08-01T19:59:21.773Z", "CreatedBy": "msmith@possiblenow.com" } ] Address Deleted: The contacts.address.deleted event is triggered when a mailing address is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "2Nzxo6VJl9MmkGIYfAjFy8WFuW0ig+OwYKFgro13UquCqVCUXZ9oBIXfu8w=", "WebhookProxyHashSignature": "LgGTvadp4MhssL1orBKcdLpeO1IRXHnxX8C63ZgxBiGLoJ/ePB1kx/bgXp7c6PqTziiDj2/hL1bUOnwT79vFHQ==", "WebhookSignature": "Timestamp:2024-03-26T20:43:55Z Signature:6/rnyukBLnKbo6Pw2B4R6lrfhnkcpDvT/d5UzTQWwzW89U9lWOTu0CaeYAsBJx6pnoY45AV+EQ5led7Y3R71Jg==", "EventId": 172781000, "EventType": "contacts.address.deleted", "Subject": "contacts.address.deleted", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.address.deleted", "Description": "contacts.address.deleted Description", "ProfileId": 18807, "Data": { "IsDefault": true, "Address1": "4400 River Green Pkwy", "Address2": "", "City": "Duluth", "StateProvince": "GA", "PostalCode": "30096-2549", "AddressType": "Home", "CountryName": "United States of America", "CountryAlpha2Code": "US", "CountryAlpha3Code": "USA", "CountryNumericCode": "840" }, "AppVersion": 1, "OriginalEventTime": "2024-03-26T20:43:54.817Z", "EventTime": "2024-03-26T20:43:55.817Z", "CreateDate": "2024-03-26T20:43:55.803Z", "CreatedBy": "My Accounts Page" } ] AlternateId Added: The contacts.alternateid.added event is triggered when an alternate Id is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "qzj+sf1HDrHSX6VHBVIYgp6epDxkA6hm4HVWePkQ7iM=", "WebhookProxyHashSignature": "E0462pv6eMQF2JXY/mowrfDUzPOFFLbnQDsI8v0rHuxEVIUuyEDoCii/hyCkfmxU8m2J/9kR8Ssler8ncBI7dg==", "WebhookSignature": "Timestamp:2024-03-26T20:58:56Z Signature:+00zmrsUHnYgBtDHe27uKFoHyej03ZS88D7p/4JKWhCFANdxJnHA0nL45i8JHu88w8hEY/TK63NYAAt3lFihMA==", "EventId": 172850000, "EventType": "contacts.alternateid.added", "Subject": "contacts.alternateid.added", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.alternateid.added", "Description": "contacts.alternateid.added Description", "ProfileId": 18807, "Data": { "AlternateId": " 0015500000WO1ZiAAL", "AlternateIdType": "SalesforceId" }, "AppVersion": 1, "OriginalEventTime": "2024-03-26T20:58:57.557Z", "EventTime": "2024-03-26T20:58:56.557Z", "CreateDate": "2024-03-26T20:58:56.520Z", "CreatedBy": "My Accounts Page" } ] AlternateId Updated: The contacts.alternateid.updated event is triggered when an alternate Id is updated a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "1oIzNQPRappscR0OTrrf8j4C+FTDXxYJujCOO0I6lc=", "WebhookProxyHashSignature": "R0LRneIXtN3KZv6GP2rP3dKyPc00kgkv+db5FE5oHBQd1x0ZDf1fvL/ofTS5c8wDr+5OIot0qnGtqM68mDSRQ==", "WebhookSignature": "Timestamp:2025-08-01T19:55:42Z Signature:V1QdZ9A0+EVtwwApbJujQumHldXZqPfGu3SIdKiaWdpiildYNNrmf0MKsv5BIVz74VKH6LO//E+c2QrmQ0MciQ==", "EventId": 473343000, "EventType": "contacts.alternateid.updated", "Subject": "contacts.alternateid.updated", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.alternateid.updated", "Description": "contacts.alternateid.updated", "ProfileId": 3521, "Data": { "AlternateId": "00X9989082REERFDKDJDS8879", "AlternateIdType": "SalesforceId" }, "PreviousData": { "AlternateId": "00XAKDJFDKDJDS8879", "AlternateIdType": "SalesforceId" }, "AppVersion": 1, "EventTime": "2025-08-01T19:55:42.179Z", "OriginalEventTime": "2025-08-01T19:55:41.667Z", "CreateDate": "2025-08-01T19:55:41.660Z", "CreatedBy": "marksmith@ymail.com" } ] AlternateId Deleted: The contacts.alternateid.deleted event is triggered when an alternate Id is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "lTKxytfD700YIe55vCeI3gg2q/HzQLww7HsC/7lWG31smLZ3x4ec/AFUMhNTti4=", "WebhookProxyHashSignature": "wHXYtpAJCEN7fgFnAK3FHb4hbXYFgbQd9MZEWqk5jb4ri5vn6FjaP4+q+cvlONCWNfx7OPlO+Gd/6zjDT+kUNA==", "WebhookSignature": "Timestamp:2024-03-26T21:00:37Z Signature:j1sRJKUHAURykW0txKLZKSwfH1w2/1HJfogjObl0AOvfR7fQ2q/E6QFc4u8h0dh8FGFd3AL81Tj5hpmCFv/bEw==", "EventId": 172957000, "EventType": "contacts.alternateid.deleted", "Subject": "contacts.alternateid.deleted", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.alternateid.deleted", "Description": "contacts.alternateid.deleted Description", "ProfileId": 18807, "Data": { "AlternateId": " 0015500000WO1ZlAAL", "AlternateIdType": "SalesforceId" }, "AppVersion": 1, "OriginalEventTime": "2024-03-26T21:00:36.233Z", "EventTime": "2024-03-26T21:00:37.233Z", "CreateDate": "2024-03-26T21:00:37.193Z", "CreatedBy": "My Accounts Page" } ] CustomerType Updated: The contacts.customertype.updated event is triggered when a customer type is updated a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "qvLv/OOVj7TW2YUS1UAKt+yP/XxyhFTbw3EPJ0E9", "WebhookProxyHashSignature": "B1QAoD33N9KzlDQJo//RZc3GtJpuO3ek3Xq66j66WFXXcXKtgIEHYjWsNO+cKm5ODq6Wwk7i7iakbeTKdMpQ==", "WebhookSignature": "Timestamp:2025-08-01T19:45:01Z Signature:U9saTcGGZLo9obK5QCUx1E+6h13tfO5hN3Vi2va4s3MlLai0V6ht/eqgS9110op8RCAFXzDEg3PIuy2PsPcA==", "EventId": 473334000, "EventType": "contacts.customertype.updated", "Subject": "contacts.customertype.updated", "Entity": "Contacts", "SubscriptionId": 41, "Name": "contacts.customertype.updated", "Description": "contacts.customertype.updated", "ProfileId": 3521, "Data": { "CustomerType": "Subscriber" }, "PreviousData": { "CustomerType": "Lead" }, "AppVersion": 1, "EventTime": "2025-08-01T19:45:01.500Z", "OriginalEventTime": "2025-08-01T19:45:01.143Z", "CreateDate": "2025-08-01T19:43:41.003Z", "CreatedBy": "john.doe@example.com" } ] • [Standard Fields](https://docs.mypreferences.com/integration-api/events/event-payload-samples/standard-fields.md): Standard fields serve as essential building blocks for profile records, enabling accurate identification, communication, and customization of interactions based on individual preferences and linguistic needs. The Events Webhook framework supports tracking of updates to standard contact fields, empowering you to stay informed about changes to essential contact details. Below is an overview of the webhook events generated for standard fields. Default Locale Updated: The standardfield.defaultlocale.updated event is triggered when the default locale on a profile is updated. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "MbOTruECfZJgGDg6/JwgbF9iO6ENoq8Gjtw=", "WebhookProxyHashSignature": "sipU5IQzR1iP2qwBHnDqzVoxCSZYCn9Lg0nCQBPCARXnc/obfTO15YSY0bbLt62O7WA5zrIOmLegymCcjzVEyg==", "WebhookSignature": "Timestamp:2025-08-01T19:43:41Z Signature:enrCiAPgbu27vUMajcRKyt+yeUAHLCzChDugxJgUciR74SpSvccna1J/aYzUUPtUmedY65Ai+2gwwFAsHS/vjA==", "EventId": 473333000, "EventType": "standardfield.defaultlocale.updated", "Subject": "standardfield.defaultlocale.updated", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.defaultlocale.updated", "Description": "standardfield.defaultlocale.updated", "ProfileId": 3521, "Data": { "DefaultLocale": "en_GB" }, "PreviousData": { "DefaultLocale": "en_US" }, "AppVersion": 1, "EventTime": "2025-08-01T19:43:41.683Z", "OriginalEventTime": "2025-08-01T19:43:41.060Z", "CreateDate": "2025-08-01T19:43:41.003Z", "CreatedBy": "johndoe@example.com" } ] Registration Status Updated: The standardfield.registrationstatus.updated event is triggered when the Registration Confirmed status on a profile is updated. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "1b3V6NqLX/ga4fluo9yb+7V/6Y5ZicvpIFe2NRWr6uCGozPK2KY5bzMjqyNMTaA=", "WebhookProxyHashSignature": "Htq4mH5ArppSvBWGyd7WJ+lNzsfJXJNWB3xD1P9m29KYFarFm98nv/8Dkzq1gzLzCu91M9Nu3/GMfYOnW2FrAw==", "WebhookSignature": "Timestamp:2024-03-25T19:58:36Z Signature:NECA1ERzMndiWbJbuJChh0j2Rx81Es7taM/Ig3Wbcynu6pNoTAjUNFX2Z+RGgBi4LMAD/POrXXIZ5nalMcu29Q==", "EventId": 162263000, "EventType": "standardfield.registrationstatus.updated", "Subject": "standardfield.registrationstatus.updated", "Entity": "StandardFields", "SubscriptionId": 55, "Name": "standardfield.registrationstatus.updated", "Description": "standardfield.registrationstatus.updated", "ProfileId": 726172, "Data": { "RegistrationConfirmed": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T19:57:35.927Z", "EventTime": "2024-03-25T19:58:35.927Z", "CreateDate": "2024-03-25T19:58:35.903Z", "CreatedBy": "My Accounts Page" } Prefix Added: The standardfield.prefix.added event is triggered when a prefix is added to the CustomerName collection on a profile. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "jWPfR1Ouv2mc8gfZJanNdfxtdUjjeeNAPxIIudNSQvA=", "WebhookProxyHashSignature": "juLDuq5UFunudF1lnMMZiwYvgsjB60FQNrKMDMI/8kTWs3Us1DKbbHrorrPJvIQhrTP0IMtgpNQvEET/6ZRJ1g==", "WebhookSignature": "Timestamp:2024-03-25T19:44:23Z Signature:GF35QSz8DUHIud5z2QbzQNqVvZRtalzXKRSx2y07iYbp6vAS6zBd0CSTVPeFouvmYRzTIo363pfK9x/mJafnMQ==", "EventId": 162041000, "EventType": "standardfield.prefix.added", "Subject": "standardfield.prefix.added", "Entity": "StandardFields", "SubscriptionId": 55, "Name": "standardfield.prefix.added", "Description": "standardfield.prefix.added", "ProfileId": 726172, "Data": { "FirstName": "", "MiddleName": "", "LastName": "", "Prefix": "Mr", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T19:44:22.207Z", "EventTime": "2024-03-25T19:44:23.207Z", "CreateDate": "2024-03-25T19:44:23.193Z", "CreatedBy": "My Accounts Page" } Prefix Updated: The standardfield.prefix.updated event is triggered when a prefix is updated on the CustomerName collection on a profile. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "jWPfR1Ouv2mc8gfZJanNdfxtdUjjeeNAPxIIudNSQvA=", "WebhookProxyHashSignature": "juLDuq5UFunudF1lnMMZiwYvgsjB60FQNrKMDMI/8kTWs3Us1DKbbHrorrPJvIQhrTP0IMtgpNQvEET/6ZRJ1g==", "WebhookSignature": "Timestamp:2024-03-25T19:44:23Z Signature:GF35QSz8DUHIud5z2QbzQNqVvZRtalzXKRSx2y07iYbp6vAS6zBd0CSTVPeFouvmYRzTIo363pfK9x/mJafnMQ==", "EventId": 162041001, "EventType": "standardfield.prefix.updated", "Subject": "standardfield.prefix.updated", "Entity": "StandardFields", "SubscriptionId": 55, "Name": "standardfield.prefix.updated", "Description": "standardfield.prefix.updated", "ProfileId": 726172, "Data": { "FirstName": "", "MiddleName": "", "LastName": "", "Prefix": "Ms.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T19:44:22.207Z", "EventTime": "2024-03-25T19:44:23.207Z", "CreateDate": "2024-03-25T19:44:23.193Z", "CreatedBy": "My Accounts Page" } Prefix Deleted: The standardfield.prefix.deleted event is triggered when a prefix is removed from the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "WDg6V4TQCB6+A6ORC7/pEgP6ru4/MMWzml0niR0Yc2hgF2MrJ0KF6YsiFrfV89k=", "WebhookProxyHashSignature": "ws6bB1uqa7NX71f4JZcz3aAn38T/f4yZBiZT8JBcvKeceh6f0B425p0k2/HyWpcWVeddLnGazcjt7Stx4dCBbQ==", "WebhookSignature": "Timestamp:2024-04-03T17:45:12Z Signature:EEmJKA4iy+SS2ZktA2ntFxexQ1Z59DSow0nd9mD6wkeCAmGDuOPsJoXrkTl5s+K6I5+u79ACguhPgLugpYuV3g==", "EventId": 178265000, "EventType": "standardfield.prefix.deleted", "Subject": "standardfield.prefix.deleted", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.prefix.deleted", "Description": "standardfield.prefix.deleted", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "Doe", "Prefix": "", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-04-03T17:44:12.650Z", "EventTime": "2024-04-03T17:45:12.650Z", "CreateDate": "2024-04-03T17:45:12.640Z", "CreatedBy": "My Accounts Page" } ] First Name Added: The standardfield.firstname.added event is triggered when a first name is added to the CustomerName collection on a profile. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "QKAYtnj8KfEOuM3IUn+epNyecU1Q7e4SjA0pOcZopXNdllh/Jn0=", "WebhookProxyHashSignature": "nPI63G8OzBAHvw1SgjrkOM/G0nN/6KsqORSmxQVi4EccXB50ovKr7DOXi4JZlUsn+FN2wpBapwFTLNiUfpI1yw==", "WebhookSignature": "Timestamp:2024-03-25T19:45:38Z Signature:NL/7YlAiMBHzOLKB6H9CkNt0pdJxT2wCTHhwc9xrrxDv5Vv8Qj5XYuvywuuXqDDxHm8B8zeHgCQTZI4/ilZZog==", "EventId": 162096000, "EventType": "standardfield.firstname.added", "Subject": "standardfield.firstname.added", "Entity": "StandardFields", "SubscriptionId": 55, "Name": "standardfield.firstname.added", "Description": "standardfield.firstname.added", "ProfileId": 726172, "Data": { "FirstName": "John", "MiddleName": "", "LastName": "Doe", "Prefix": "Mr", "Suffix": "Sr" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T19:45:37.237Z", "EventTime": "2024-03-25T19:45:38.237Z", "CreateDate": "2024-03-25T19:45:38.217Z", "CreatedBy": "My Accounts Page" } First Name Updated: The standardfield.firstname.updated event is triggered when a first name is updated on the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "eNxNLxdrINom69sYVDpoXkqpYSquD1RxAh8gKK4m1CN68Gqferozzi6j", "WebhookProxyHashSignature": "e0EAIBgEKmkZnPFCHKZsODG3DXqy3/Yz6shhS1p3v3vUbjHJK5rTlvQcfLFsKlkejo3M63+mbNU8IHRToGJEIg==", "WebhookSignature": "Timestamp:2025-08-01T19:09:29Z Signature:Nf879a+0Y0PgQHViOTciT0UwzynnAC5dLKsLZKzdsWNz5Wgfc0hF9UWBDg6xRNK0J3TYRFBXKwuVpQq9dx7OsA==", "EventId": 473323000, "EventType": "standardfield.firstname.updated", "Subject": "standardfield.firstname.updated", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.firstname.updated", "Description": "standardfield.firstname.updated", "ProfileId": 3521, "Data": { "FirstName": "Michael", "MiddleName": "Nicholas", "LastName": "Smith" }, "PreviousData": { "FirstName": "Mark", "MiddleName": "Nicholas", "LastName": "Smith", "Prefix": "", "Suffix": "" }, "AppVersion": 1, "EventTime": "2025-08-01T19:09:29.918Z", "OriginalEventTime": "2025-08-01T19:09:29.370Z", "CreateDate": "2025-08-01T19:09:29.363Z", "CreatedBy": "john.doe@example.com" } ] First Name Deleted: The standardfield.firstname.deleted event is triggered when a first name is removed from the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "PR/CtVZtrqffHcSlimumOHlDKCBZczC04Veu2KpwfQ/8Z5o=", "WebhookProxyHashSignature": "Qt+fqrGospnUBDIsmiZRgK9RFtmzgiGlZinMg9seHPO6w+5Pt9e3vZWQz0eIR6OQ3rsVtIsX7G5BSLVU1b3bdA==", "WebhookSignature": "Timestamp:2024-03-28T15:20:59Z Signature:zgnJrbhV09IQUJsIiot9YbmKdWjx924C0AcYwsFU8Xk1095A6gRnfA7U7Og2EPvH9vDrsCUx7MpXx9URg3VmIQ==", "EventId": 173291000, "EventType": "standardfield.firstname.deleted", "Subject": "standardfield.firstname.deleted", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.firstname.deleted", "Description": "standardfield.firstname.deleted", "ProfileId": 18807, "Data": { "FirstName": "", "MiddleName": "", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-28T15:20:57.200Z", "EventTime": "2024-03-28T15:20:58.200Z", "CreateDate": "2024-03-28T15:20:58.170Z", "CreatedBy": "My Accounts Page" } ] Middle Name Added: The standardfield.middlename.added event is triggered when a middle name is added to the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "kpdk11xLyZkec1voLKcPjDG3PdWsWF6KWkz9a3zk34jL", "WebhookProxyHashSignature": "gR5Zk6JFX2cTGKuSxUOwQp1zO9MnJkq7OcyyhPnCpEQ91qTRz4aCD1MWhL8C0nec/ViusjzKj86c7G3GP+2bzg==", "WebhookSignature": "Timestamp:2024-03-29T19:46:13Z Signature:+bJJxQznXV63tqGmARqcqIOcSpsBAXbNtVfCT+PCxeAh44YAvXSuXt1eQAQ9A4lz9WicPX8atO6ZMr3azPzYdA==", "EventId": 174275000, "EventType": "standardfield.middlename.added", "Subject": "standardfield.middlename.added", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.middlename.added", "Description": "standardfield.middlename.added Description", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronald", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:45:13.500Z", "EventTime": "2024-03-29T19:46:13.500Z", "CreateDate": "2024-03-29T19:46:13.460Z", "CreatedBy": "My Accounts Page" } ] Middle Name Updated: The standardfield.middlename.updated event is triggered when a middle name is updated on the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "L9hPwdPLKppQIQVESKzdr3TA4Q0eq/CFS0cg+j0gpoEos8OxlqClh6O", "WebhookProxyHashSignature": "fcz1dVzDDZ9N+A3DYS5Wo586REBf8nWkMMwpszj4fbilGVCEKgQ4rgYu8CV/ExPSq/P+h3bUHHiElivg56ZQ==", "WebhookSignature": "Timestamp:2025-08-01T19:11:20Z Signature:OSRmN4sjuH3derlrCUrv9e0Omjqpez1xv3OIPXbUABMLZyChjhS7a5zK7fjipkrbmpb4vChxqVS+KmGoxuUA==", "EventId": 473325000, "EventType": "standardfield.middlename.updated", "Subject": "standardfield.middlename.updated", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.middlename.updated", "Description": "standardfield.middlename.updated", "ProfileId": 3521, "Data": { "FirstName": "Michael", "MiddleName": "Nick", "LastName": "Smith" }, "PreviousData": { "FirstName": "Michael", "MiddleName": "Nicholas", "LastName": "Smith", "Prefix": "", "Suffix": "" }, "AppVersion": 1, "EventTime": "2025-08-01T19:11:20.119Z", "OriginalEventTime": "2025-08-01T19:11:19.450Z", "CreateDate": "2025-08-01T19:11:19.447Z", "CreatedBy": "john.doe@example.com" } ] Middle Name Deleted: The standardfield.middlename.deleted event is triggered when a middle name is removed from the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "5YkwCcBa5Ko3fzlqwBoWwEvFQuYln8QpQVIqSzd1M2c3nGsRaB/XwA==", "WebhookProxyHashSignature": "vjhaxCIGNSh02IeDj86cqX5n7gHHwVGN8lkuG054AXDSlyIPb42CjFFSAwee4eYS6qIkNiMj3RJbgeGTdr6eAw==", "WebhookSignature": "Timestamp:2024-03-29T19:45:54Z Signature:EuKFMttXLfDdnLEYqz3ma4qBLb+orvxWRMIOPG/szchsp6FmH9qVlaeC0T3665NKVIAYVlmW+9pcE5SfYUGs8A==", "EventId": 174220000, "EventType": "standardfield.middlename.deleted", "Subject": "standardfield.middlename.deleted", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.middlename.deleted", "Description": "standardfield.middlename.deleted", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:45:53.203Z", "EventTime": "2024-03-29T19:45:54.203Z", "CreateDate": "2024-03-29T19:45:54.187Z", "CreatedBy": "My Accounts Page" } ] Last Name Added: The standardfield.lastname.added event is triggered when a last name is added to the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "g71PoO6YWf8Ic7VNdz2mU1OzZc3n8Zb/Az1KLZpVTHHmcTruh3Qq", "WebhookProxyHashSignature": "gRu8tX5phX9XO112I3+8AMETuTmmYFV5sqwCVP/k0Vci56pziSHtZ/A6JPPlUZZl84ju5d8ji3vvxZY5yCBVuA==", "WebhookSignature": "Timestamp:2024-03-29T19:51:53Z Signature:DNlhin66bzdK32I+Rk9BFUtfIPfSJdqRPJ6vwswyVXgwVV8eru6rUixjYrA3lktodUDG8ebxjYrGSA5DR80KpA==", "EventId": 174550000, "EventType": "standardfield.lastname.added", "Subject": "standardfield.lastname.added", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.lastname.added", "Description": "standardfield.lastname.added Description", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:51:52.767Z", "EventTime": "2024-03-29T19:51:53.767Z", "CreateDate": "2024-03-29T19:51:53.757Z", "CreatedBy": "My Accounts Page" } ] Last Name Updated: The standardfield.lastname.updated event is triggered when a last name is updated on the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "Myo1bYF+aDrMEpiHkXGDhu0/nGjPQqy4sTLU4wheqdF19EgNpIp0aIUon/upsA=", "WebhookProxyHashSignature": "MZ3vPkHs3lkrRFO8+/gImt/rsAA07bwE1pCD0NUOQ/z3oT3MIDkuJ0EnqUFXcRAaet96FwdWjqDZu1JQtpLQ==", "WebhookSignature": "Timestamp:2025-08-01T19:12:50Z Signature:lBQsyfv+uj8bfkIIS/nvhtSeUjpYB0CGZTimTvhS4CcqRvwS7Ouv7cKvknFQGZjKKpfTvl5MXvcmLcoB9Q==", "EventId": 473327000, "EventType": "standardfield.lastname.updated", "Subject": "standardfield.lastname.updated", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.lastname.updated", "Description": "standardfield.lastname.updated", "ProfileId": 3521, "Data": { "FirstName": "Michael", "MiddleName": "Nick", "LastName": "Dawson" }, "PreviousData": { "FirstName": "Michael", "MiddleName": "Nick", "LastName": "Smith", "Prefix": "", "Suffix": "" }, "AppVersion": 1, "EventTime": "2025-08-01T19:12:50.183Z", "OriginalEventTime": "2025-08-01T19:12:49.537Z", "CreateDate": "2025-08-01T19:12:49.523Z", "CreatedBy": "johndoe@example.com" } ] Last Name Deleted: The standardfield.lastname.deleted event is triggered when a last name is removed from the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "o2olyQuUKFW2cn24Timu/oVgL9tZmMnj6K1XduwfiYbIa1adqkNih5yNgruy", "WebhookProxyHashSignature": "SKQ2MkNicU+9Z81B4+sd9Vt5YJHsBLpy5zQFN3kLFEesYYi2g07cyv/aQIZqbp5MYWJSMmMZIWIfOktLT4Y8Pg==", "WebhookSignature": "Timestamp:2024-03-29T19:51:14Z Signature:gPtktEQHq25FTNBqkgQjBszuRpwGa2/Rbk2x1HwQDITpwp7f0TyFY/+bv1QmK9wzAKcedve0/5sZ3WesTgkUoQ==", "EventId": 174495000, "EventType": "standardfield.lastname.deleted", "Subject": "standardfield.lastname.deleted", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.lastname.deleted", "Description": "standardfield.lastname.deleted", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:50:13.753Z", "EventTime": "2024-03-29T19:51:13.753Z", "CreateDate": "2024-03-29T19:51:13.743Z", "CreatedBy": "My Accounts Page" } ] Suffix Added: The standardfield.suffix .added event is triggered when a suffix is added to the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "KIc2/RF9QwR3I6Jpz++3r/hRrVRjfru0VF6sQHhzyjezwKIgkbKq+ftDrQ==", "WebhookProxyHashSignature": "U7oQ6J6LVltfiYsdN8fOUvIJgs55eqe1X2poEZJTbungcaw/YtLa3cgfbQR02BB1zELsn+rY550F26QCdQ1AsA==", "WebhookSignature": "Timestamp:2024-03-29T19:48:54Z Signature:tZ/bXnhLEH/m7s5daA4kfuAQAoqS5zF1Y5rpA/+FmYP4hfEG8sdv/TH2qCivmFcfHjsuSXMlEM8P2KrbZKrA6w==", "EventId": 174385000, "EventType": "standardfield.suffix.added", "Subject": "standardfield.suffix.added", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.suffix.added", "Description": "standardfield.suffix.added Description", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "Sr." }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:47:53.677Z", "EventTime": "2024-03-29T19:48:53.677Z", "CreateDate": "2024-03-29T19:48:53.613Z", "CreatedBy": "My Accounts Page" } ] Suffix Updated: The standardfield.suffix.updated event is triggered when a suffix is updated on the CustomerName collection on a profile. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "5tjvQsfy2uHwNn6rrpU+mcufuQ0EididafGsCFySo5dTXQwH85sJe5y7AgE+wKq2", "WebhookProxyHashSignature": "JvJkYEBEgQQ+VSnMTb+4uyVfB3SVMk9NFgLAOFnWQVFfJLqM1mHqkiypUrxrggQH/nVh93WgkxLHvthi611oWg==", "WebhookSignature": "Timestamp:2024-03-27T20:55:11Z Signature:vaxHX3CgNTlS7+lfkPserqFhV5ydnnv55DLyk9XvsprhklWnfNhcHULSzN9s88aHoi5Oqj4KUoOjfnk9jnbykw==", "EventId": 173236000, "EventType": "standardfield.suffix.updated", "Subject": "standardfield.suffix.updated", "Entity": "StandardFields", "SubscriptionId": 55, "Name": "standardfield.suffix.updated", "Description": "standardfield.suffix.updated", "ProfileId": 726186, "Data": { "FirstName": "Peter", "MiddleName": "", "LastName": "Parker", "Prefix": "Sir", "Suffix": "II" }, "AppVersion": 1, "EventTime": "2024-03-27T20:55:11.087Z", "CreateDate": "2024-03-27T20:55:11.08Z", "CreatedBy": "Preference Center" } Suffix Deleted: The standardfield.suffix.deleted event is triggered when a suffix is removed from the CustomerName collection on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "jBaHBfIEyFgnci6rRAxwFR/PCcAQ3qGROUMF39k2gfo=", "WebhookProxyHashSignature": "zGKNjAAIifRt2LtXpXVQOAvRnXqmNEhtNS9UQgoR6e+gqZli/pGyYwt/7CWYn5QVCdpQJifLA+qfYKyyhSTZqA==", "WebhookSignature": "Timestamp:2024-03-29T19:49:53Z Signature:C2H8LQAQFS/gSYJtDVh7D42PfwaTAmZFNGlHLNta6oLV3kUWCg7zvjDtridThZa3uIcrznZblRzZHwGBjgJ3TA==", "EventId": 174440000, "EventType": "standardfield.suffix.deleted", "Subject": "standardfield.suffix.deleted", "Entity": "StandardFields", "SubscriptionId": 41, "Name": "standardfield.suffix.deleted", "Description": "standardfield.suffix.deleted", "ProfileId": 18807, "Data": { "FirstName": "John", "MiddleName": "Ronaldinho", "LastName": "Doe", "Prefix": "Mr.", "Suffix": "" }, "AppVersion": 1, "OriginalEventTime": "2024-03-29T19:49:52.687Z", "EventTime": "2024-03-29T19:49:53.687Z", "CreateDate": "2024-03-29T19:49:53.680Z", "CreatedBy": "My Accounts Page" } ] • [Custom Fields](https://docs.mypreferences.com/integration-api/events/event-payload-samples/custom-fields.md): Custom fields are user-defined data fields that allow you to tailor data storage and organization according to your specific customer experience use cases. These fields can be customized to capture various types of information, such as text, numbers, dates, or selections from predefined lists. Custom fields provide the flexibility needed to enrich your customer profiles through continuous zero-party data collection efforts. The custom field events enable real-time notifications for actions involving custom fields. Whether you're adding, updating, or removing a custom field, our webhooks ensure you stay informed instantly, facilitating seamless integration and data management within your systems. Custom Field Added: The customfield.added event is triggered when a custom field is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "cyZ1umebkGA6VPMv0xEJPvCz18GbLOGw3OsWZxEpJ+kWyP/svR7PR6XU", "WebhookProxyHashSignature": "HUJHo6ElxDTuU+GhbD0uhbGg4qZoUHEmna470/UIYdaq7md3d0ZtyAzmiKLzsB3AWfMXUODhJkPmlpbdNQ56uA==", "WebhookSignature": "Timestamp:2024-03-21T22:34:24Z Signature:UlHFBwoW9QhYTHOuPRZMdH/bGiO+Y8UczCkgkIvhqnxQuHfqF1omsmwn/IUFdFg4Q8xz5jOKBoXhOQ2CEKtjjQ==", "EventId": 127959000, "EventType": "customfield.added", "Subject": "customfield.added", "Entity": "CustomFields", "SubscriptionId": 41, "Name": "customfield.added", "Description": "customfield.added Description", "ProfileId": 18807, "Data": { "CustomFieldName": "Occupation", "CustomFieldType": "Text", "CustomFieldValue": "Designer" }, "AppVersion": 1, "OriginalEventTime": "2024-03-21T22:34:23.223Z", "EventTime": "2024-03-21T22:34:24.223Z", "CreateDate": "2024-03-21T22:34:24.200Z", "CreatedBy": "Preference Center" } ] Custom Field Updated: The customfield.updated event is triggered when the value of a custom field is updated on a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "mkbXjSVvn62no0M0Yh4MYNaIb/Hxwq8w1EmKC+bHEiwUhJwh", "WebhookProxyHashSignature": "yQXxD5U7hDrDE9sdKZCkanrRszlcd14p046hlI2+Qoi/oZBSxaGk9XdJjtjLqjtu8PLoSJkEYjb2pmIe3ewAfw==", "WebhookSignature": "Timestamp:2025-08-01T19:54:12Z Signature:SdLdiia5eprAH2E+hRUjKs71LOxU9I1tKYU8rAvT6THP1C8ghC4A2lp/Tl8VKbg9xoaIRqSHxmYNIi0DqdOMXQ==", "EventId": 473339000, "EventType": "customfield.updated", "Subject": "customfield.updated", "Entity": "CustomFields", "SubscriptionId": 41, "Name": "customfield.updated", "Description": "customfield.updated", "ProfileId": 3521, "Data": { "CustomFieldName": "Interests", "DisplayType": "MultiSelect", "CustomFieldType": "Select List", "CustomFieldValue": "Social Networking::Online Gaming::Shopping::Camping and Outdoors", "IsExtension": false }, "PreviousData": { "CustomFieldName": "Interests", "CustomFieldType": "Select List", "CustomFieldValue": "Online Gaming::Shopping", "IsExtension": false }, "AppVersion": 1, "EventTime": "2025-08-01T19:54:12.223Z", "OriginalEventTime": "2025-08-01T19:54:11.617Z", "CreateDate": "2025-08-01T19:54:11.600Z", "CreatedBy": "john.doe@example.com" } ] Custom Field Deleted: The customfield.deleted event is triggered when a custom field is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "cyZ1umebkGA6VPMv0xEJPvCz18GbLOGw3OsWZxEpJ+kWyP/svR7PR6XU", "WebhookProxyHashSignature": "HUJHo6ElxDTuU+GhbD0uhbGg4qZoUHEmna470/UIYdaq7md3d0ZtyAzmiKLzsB3AWfMXUODhJkPmlpbdNQ56uA==", "WebhookSignature": "Timestamp:2024-03-21T22:34:24Z Signature:UlHFBwoW9QhYTHOuPRZMdH/bGiO+Y8UczCkgkIvhqnxQuHfqF1omsmwn/IUFdFg4Q8xz5jOKBoXhOQ2CEKtjjQ==", "EventId": 127959000, "EventType": "customfield.deleted", "Subject": "customfield.deleted", "Entity": "CustomFields", "SubscriptionId": 41, "Name": "customfield.deleted", "Description": "customfield.deleted", "ProfileId": 18807, "Data": { "CustomFieldName": "Occupation", "CustomFieldType": "Text", "CustomFieldValue": "Architect" }, "AppVersion": 1, "OriginalEventTime": "2024-03-21T22:34:23.223Z", "EventTime": "2024-03-21T22:34:24.223Z", "CreateDate": "2024-03-21T22:34:24.200Z", "CreatedBy": "Preference Center" } ] • [Groups](https://docs.mypreferences.com/integration-api/events/event-payload-samples/groups.md): Groups are used to connect a set of profiles based on collective interests and characteristics. The group events enable real-time notifications for actions involving groups. Whether you're adding, updating, or removing a group, our webhooks ensure you stay informed instantly, facilitating seamless integration and data management within your systems. Below is an overview of the webhook events generated for groups. Group Added: The group.added event is triggered when a group is added to a profile or when the group name is modified using the POST Update method where the AllowMerge parameter is set to true. It is accompanied by a group.deactivated event when the group name is modified under the same circumstances (i.e., the old group name is then deactivated). Plain text [ { "Topic": "4173-1-2521c7003493478aa79f269f8df4d30c", "WebhookProxyRandomValue": "VNxyYU7Y9rZlf1tz135BctADK8MmxDCk6aC2i02n5ByzebjBtioV=", "WebhookProxyHashSignature": "seyeOsAiDraj5ZtLdT1mrIqga28GvqvhBl7tbtNS4poOs/NKBH4vDw==", "WebhookSignature": "Timestamp:2023-07-12T21:07:28Z Signature:XXb0K2L5I/d6KU+VVeVMXbX+Zm3jHiYtrVFNZluJWJQWu+57HY/V8WrL8nTkaf9uX3oo+Kv0gdNCxC+jcMX/XQ==", "EventId": 368741000, "EventType": "group.added", "Subject": "group.added", "Entity": "Groups", "SubscriptionId": 1019, "Name": "group.added", "Description": "group.added", "ProfileId": 193282, "Data": { "GroupName": "Liverpool", "GroupType": "Football Fans", "IsPrimary": false }, "AppVersion": 1, "OriginalEventTime": "2023-07-12T21:06:52.963", "EventTime": "2023-07-12T21:06:52.963", "CreateDate": "2023-09-07T15:19:47Z", "CreatedBy": "My Account Portal" } ] Group Updated: The group.updated is generated when you update the IsPrimary flag on the group. It is also generated when the IsActive flag is set to true , indicating that a previously deactivated profile-group association has been reactivated. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "g/9HObvVlEQQVf5rGoCnQvVy4CW2PMpW91T5TWV01BxSh3oij6tv", "WebhookProxyHashSignature": "LhzANL+HjVe7wg1ookE+1c2m1M7ZGV6Q343L008PNdo7PYnhcbotcIohvwvrs+PDo25Xr+ku1HWxC1QWPty0uA==", "WebhookSignature": "Timestamp:2024-03-21T19:01:13Z Signature:D6CtHcibZiJ7INPWXgq/YNCbwdmua7/VJnkkRgGT+4CRt/WMab5bCJswi4wowurnLBCJuncYmtw4hmNQBEcRww==", "EventId": 127575000, "EventType": "group.updated", "Subject": "group.updated", "Entity": "Groups", "SubscriptionId": 55, "Name": "group.updated", "Description": "group.updated", "ProfileId": 193282, "Data": { "GroupType": "Insurance", "GroupName": "HDHP-INSURANCE", "IsPrimary": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-21T19:01:13.34Z", "EventTime": "2024-03-21T19:01:13.34Z", "CreateDate": "2024-03-21T19:01:13.31Z", "CreatedBy": "My Accounts Portal" } Group Deactivated: The group.deactivated event is triggered when a group is removed from a profile. Plain text { "Topic": "58180-1-adcbbde7d88d48c9aeba3ddb4c1c0d3d", "WebhookProxyRandomValue": "g/9HObvVlEQQVf5rGoCnQvVy4CW2PMpW91T5TWV01BxSh3oij6tv", "WebhookProxyHashSignature": "LhzANL+HjVe7wg1ookE+1c2m1M7ZGV6Q343L008PNdo7PYnhcbotcIohvwvrs+PDo25Xr+ku1HWxC1QWPty0uA==", "WebhookSignature": "Timestamp:2024-03-21T19:01:13Z Signature:D6CtHcibZiJ7INPWXgq/YNCbwdmua7/VJnkkRgGT+4CRt/WMab5bCJswi4wowurnLBCJuncYmtw4hmNQBEcRww==", "EventId": 127575000, "EventType": "group.deactivated", "Subject": "group.deactivated", "Entity": "Groups", "SubscriptionId": 55, "Name": "group.deactivated", "Description": "group.deactivated", "ProfileId": 193282, "Data": { "GroupType": "Insurance", "GroupName": "HDHP-INSURANCE", "IsPrimary": true }, "AppVersion": 1, "OriginalEventTime": "2024-03-21T19:01:12.34Z", "EventTime": "2024-03-21T19:01:13.34Z", "CreateDate": "2024-03-21T19:01:13.31Z", "CreatedBy": "My Accounts Portal" } • [Tags](https://docs.mypreferences.com/integration-api/events/event-payload-samples/tags.md): Tags help you organize your profiles based on specific pieces of information associated with a profile. The tag events enable real-time notifications for actions involving tags. Whether you're adding, updating, or removing a tag, our webhooks ensure you stay informed instantly, facilitating seamless integration and data management within your systems. Below is an overview of the webhook events generated for tags. Tag Added: The tag.added event is triggered when a tag is added to a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "7wFtiTy18A3nCQuvrkWDZj7IXUy2N8YXqxlAv7HxUCjwlK9J0kM2duaFD7U=", "WebhookProxyHashSignature": "DUiuWxeKGey36Pxg95tNNmRup1TzcIVaWfjP5XV1cQ0vqH0uMkOW8aqW1tRpwh9izkhsVG7rjFTwF98wJP8RwQ==", "WebhookSignature": "Timestamp:2024-03-25T21:45:57Z Signature:DQUa8ln2ICMTYhYs8bNEPzs5DrIUQ3Rx3YG2nDucKleFaukViFoq7xn7C+84n9LYVMh4QlhIBcetLYH65xiD8g==", "EventId": 162658000, "EventType": "tag.added", "Subject": "tag.added", "Entity": "Tags", "SubscriptionId": 41, "Name": "tag.added", "Description": "tag.added Description", "ProfileId": 18807, "Data": { "Name": "Frequent Visitor" }, "AppVersion": 1, "EventTime": "2024-03-25T21:45:57.770Z", "CreateDate": "2024-03-25T21:45:57.740Z", "CreatedBy": "My Accounts Page" } ] Tag Deleted: The tag.deleted event is triggered when a tag is removed from a profile. Plain text [ { "Topic": "57167-1-77e37ab924ad4350bb994d3dc7fe7a9e", "WebhookProxyRandomValue": "N8udCHhINamofzOnYKRz/GwPcGOOIHicM1QrFiPHvwaBxb1WrF9n9fEflCg6QA==", "WebhookProxyHashSignature": "8QbmokTyMfq2ll5kMVtBzmoBbOquH2krTIJzYFgqkAIGZGjh88/WZVGmxbpOoL+y+B7xa4syPc4GQ9OITyh0Ow==", "WebhookSignature": "Timestamp:2024-03-25T21:44:28Z Signature:B6s4IAIknnjWnGj4yJrGGfGG5BN/vjIMaKsX6oO+xrRyVN31VBPgYhp9RyEXdmYp7bBX9Q92lCS0NpBPkP48gA==", "EventId": 162603000, "EventType": "tag.deleted", "Subject": "tag.deleted", "Entity": "Tags", "SubscriptionId": 41, "Name": "tag.deleted", "Description": "tag.removed Description", "ProfileId": 18807, "Data": { "Name": "Frequent Visitor" }, "AppVersion": 1, "OriginalEventTime": "2024-03-25T21:44:28.373Z", "EventTime": "2024-03-25T21:44:28.373Z", "CreateDate": "2024-03-21T22:55:04.987Z", "CreatedBy": "My Accounts Page" } ] • [Create new subscription](https://docs.mypreferences.com/integration-api/events/create-new-subscription.md): This method allows you to create a new webhook subscription. You can subscribe to one or more of the available event types associated with the supported entities. Click here to see the complete list of supported event types. Before creating a webhook subscription, you must contact support to enable Events on your account. Once enabled, your receiving endpoint must respond with the expected validation payload to complete the handshake process and begin accepting incoming event notifications. Refer to the sample window on the right for subscription examples across different entities. Using the same webhook URL to subscribe to the same event in multiple subscriptions is not allowed. Doing so will result in the API returning a 409-Conflict status code. Sample Webhook Subscription Request The following sample demonstrates how to submit an event subscription request. It's important to note that certain entities support event generation across all their instances. For example, to receive notifications whenever a preference is added to any filter in your MyPreferences account, include 'AllFilters' in the Filters array when subscribing to the preference.added event. If you prefer to receive events for only specific filters, provide the corresponding filter IDs in the Filters array instead. Preferences : [AllFilters] Consents : [AllConsents] Contacts : [AllContactTypes] Groups : [AllGroups] Custom Fields : [AllCustomFields] Plain text { "Name": "Webhook - Consent and Preference Updates", "Description": "consent and preference data updates", "LocaleID": "en_US", "Url": "https://eowju7xe3jismp9.m.mywehookURL.net/", "Subscriptions": [ { "Entity": "Contacts", "EventType": "contacts.alternateid.added", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Consents", "EventType": "consent.added", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.deactivated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.elementassociation.created", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.elementassociation.updated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.filterassociation.created", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.filterassociation.updated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.elementassociation.deactivated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.filterassociation.deactivated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Consents", "EventType": "consent.updated", "ConsentTypes": [ "AllConsents" ] }, { "Entity": "Contacts", "EventType": "contacts.address.added", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.address.deleted", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.address.updated", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.email.added", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.email.deleted", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.email.updated", "ContactTypes": [ "AllContactTypes" ] }, { "Entity": "Contacts", "EventType": "contacts.phone.updated", "ContactTypes": [ "Personal", "Work" ] }, { "Entity": "CustomFields", "EventType": "customfield.added", "CustomFields": [ "AllCustomFields" ] }, { "Entity": "CustomFields", "EventType": "customfield.deleted", "CustomFields": [ "AllCustomFields" ] }, { "Entity": "CustomFields", "EventType": "customfield.updated", "CustomFields": [ "AllCustomFields" ] }, { "Entity": "Groups", "EventType": "group.added", "Groups": [ "AllGroups" ] }, { "Entity": "Groups", "EventType": "group.deactivated", "Groups": [ "AllGroups" ] }, { "Entity": "Groups", "EventType": "group.updated", "Groups": [ "AllGroups" ] }, { "Entity": "Preferences", "EventType": "preference.added", "Filters": [ "AllFilters" ] }, { "Entity": "Preferences", "EventType": "preference.archived", "Filters": [ "AllFilters" ] }, { "Entity": "Preferences", "EventType": "preference.updated", "Filters": [ "AllFilters" ] }, { "Entity": "ProfileActions", "EventType": "profile.created" }, { "Entity": "ProfileActions", "EventType": "profile.updated" }, { "Entity": "ProfileActions", "EventType": "profile.deleted" }, { "Entity": "Tags", "EventType": "tag.added" }, { "Entity": "Tags", "EventType": "tag.deleted" }, { "Entity": "StandardFields", "EventType": "standardfield.defaultlocale.updated" }, { "Entity": "StandardFields", "EventType": "standardfield.registrationstatus.updated" } ], "IsMinimized": false, "State": "Active", "IsActive": true } • [Update subscription](https://docs.mypreferences.com/integration-api/events/update-subscription.md): This method allows you to update an existing webhook subscription by specifying the subscriptionId as the path parameter in your request. Deactivating a subscription by setting the IsActive property to false will result in its deletion. Please deactivate a subscription only when you no longer wish to receive event notifications. If you wish to temporarily pause event notifications, you can achieve this by using the 'State' parameter and setting it to 'Paused'. Utilizing this method replaces the entire webhook subscription with the subscription details provided in your request. To ensure accurate updates, remember to incorporate all properties, including the subscriptions you intend to retain, within your PUT request. If any properties are omitted, they will be considered as empty during the subscription update process. • [Retrieve subscriptions](https://docs.mypreferences.com/integration-api/events/retrieve-subscriptions.md): This method allows you to retrieve all webhook subscriptions. You can specify the SubscriptionId as a query parameter to retrieve a specific subscription. Subscriptions that have been paused will also be returned. • [Delete subscription](https://docs.mypreferences.com/integration-api/events/delete-subscription.md): This method deletes the webhook subscription identified by the subscriptionId parameter. Deleting the subscription is currently an irrevocable operation. This means that you cannot reinstate the webhook subscription. This operation should only be performed if the subscription is no longer needed. To pause or temporarily turn off webhook notifications, set the State property to either Paused or Inactive using the Update Subscription method. • [Update webhook settings](https://docs.mypreferences.com/integration-api/events/update-webhook-settings.md): This method allows you to update webhook message delivery settings. The MaxConcurrentRequests determines the maximum number of messages that the EventsPublisherService will process in a single service cycle. It reads up to this specified number of messages and then sends them to the designated receiving URLs configured across all active webhook subscriptions. Following the processing of these messages, the service engages in a "pause" based on the time specified under the Duration property. This means that after handling the specified number of messages, the service takes a break for the duration indicated before it resumes its cycle and processes additional messages. The default settings for Max Concurrent Requests is "500", and Duration (in seconds) is "1". The Min value for "Max Concurrent Requests" can be set to "50". The Min value for "Duration (in seconds)" can be set to "1". The Max value for "Max Concurrent Requests" can be set to "5000". The Max value for "Duration (in seconds)" can be set to "300". This setting is an account-level setting and applies to all webhook subscriptions within your MyPreferences account. • [Retrieve webhook settings](https://docs.mypreferences.com/integration-api/events/retrieve-webhook-settings.md): This method allows you to retrieve webhook message delivery settings. This setting is an account-level setting and applies to all webhook subscriptions in your MyPreferences account. • [Retrieve events](https://docs.mypreferences.com/integration-api/events/retrieve-events.md): This method allows you to retrieve events across all webhook subscriptions associated with your MyPreferences account. It offers an optional query parameter locale that returns the event name and description for the specified locale id. Contact support@possiblenow.com with localized names and description for locales you want to use. If the localized name and description is not configured for the specified locale, the API will return the event name and description in your account's default locale. A future update will provide an API for programmatic management of these updates. The startAt parameter must be set before endAt and should not exceed the MaxEventHistoryDays setting of 15 days. If the startAt parameter is not specified, the API defaults it to MaxEventHistoryDays . All API users must have the Event Data - > View Permission enabled within their User Groups. • [Retrieve events by subscription id](https://docs.mypreferences.com/integration-api/events/retrieve-events-by-subscription-id.md): This method allows you to retrieve events associated with a specific subscriptionId . It offers an optional query parameter locale that returns the event name and description for the specified locale id. Contact support@possiblenow.com with localized names and description for locales you want to use. If the localized name and description is not configured for the specified locale, the API will return the event name and description in your account's default locale. A future update will provide an API for programmatic management of these updates. The startAt parameter must be set before endAt and should not exceed the MaxEventHistoryDays setting of 15 days. If the startAt parameter is not specified, the API defaults it to MaxEventHistoryDays . All API users must have the Event Data - > View Permission enabled within their User Groups. • [Retrieve events by profile id](https://docs.mypreferences.com/integration-api/events/retrieve-events-by-profile-id.md): This method allows you to retrieve events for a specific profile. It is designed to facilitate customer experiences that display recent actions performed by an individual on their profile. It provides a range of optional query parameters, enabling you to filter events based on a specific event type, the source capturing the event, the event's date and time, and the locale. EventType : Returns events for the specified event type. Example: EventType=profile.deleted . StartAt and EndAt : Returns events for the dates specified. Including StartAt returns events equal to or greater than than the provided date. Including EndAt returns events equal to or less than the provided date. If both values are provided, the search will return the events between the specified values. If both values are not provided, the search is inclusive of all dates. The startAt parameter must be set before endAt and should not exceed the MaxEventHistoryDays setting of 15 days. If the startAt parameter is not specified, the API defaults it to MaxEventHistoryDays . SourceGroupIds : Returns events for the specified Source Group Id's. Use this parameter if you are interested in receiving events that were recorded by a specific data source. Example: Cookie Preference Center. Locale : Returns the event name and description in the specified locale. Contact support@possiblenow.com with the list of localized names and description for locales you want to use. A future update will provide an API for programmatic management of these updates. All API users must have the Event Data - > View Permission enabled within their User Groups. Sample Events Request The sample below illustrates an events retrieval request for a profile Id. The results are returned based on the events associated with the profile and also account for any optional query parameters specified. Plain text [ { "EventId": "178319000", "EventType": "profile.created", "Subject": "profile.created", "Entity": "Profile", "SubscriptionId": 14987, "Name": "profile.created", "Description": "profile.created", "ProfileId": 726195, "Data": { "ProfileId": 726195, "IsActive": true, "Edited": { "CreateDate": "2024-04-03T18:32:47.137Z", "CreatedBy": "My Accounts Page" }, "RegistrationConfirmed": false, "CustomerType": "Lead", "PreserveConsents": true, "PreservePreferences": true, "CustomerName": {}, "DefaultLocale": "en_US", "UpdateStatus": "Complete" }, "OriginalEventTime": "2024-04-03T18:32:47.190", "EventTime": "2024-04-03T18:32:47.190", "CreateDate": "2024-04-03T18:32:47.137", "CreatedBy": "My Accounts Page" }, { "EventId": "178387000", "EventType": "contacts.customertype.updated", "Subject": "contacts.customertype.updated", "Entity": "Contacts", "SubscriptionId": 13935, "Name": "contacts.customertype.updated", "Description": "contacts.customertype.updated", "ProfileId": 726195, "Data": { "CustomerType": "Customer" }, "OriginalEventTime": "2024-04-03T18:32:47.190", "EventTime": "2024-04-03T18:33:02.640", "CreateDate": "2024-04-03T18:32:47.137", "CreatedBy": "My Accounts Page" }, { "EventId": "178388000", "EventType": "profile.updated", "Subject": "profile.updated", "Entity": "Profile", "SubscriptionId": 196754, "Name": "profile.updated", "Description": "profile.updated", "ProfileId": 726195, "OriginalEventTime": "2024-04-03T18:32:47.190", "EventTime": "2024-04-03T18:33:02.640", "CreateDate": "2024-04-03T18:33:02.603", "CreatedBy": "My Accounts Page" }, { "EventId": "178461000", "EventType": "contacts.email.added", "Subject": "contacts.email.added", "Entity": "Contacts", "SubscriptionId": 115587, "Name": "contacts.email.added", "Description": "contacts.email.added", "ProfileId": 726195, "Data": { "EmailAddress": "john.doe@example.com", "EmailAddressType": "Personal", "IsDefault": false }, "OriginalEventTime": "2024-04-03T18:32:47.190", "EventTime": "2024-04-03T19:36:35.857", "CreateDate": "2024-04-03T19:36:35.810", "CreatedBy": "My Accounts Page" } ] • [Retrieve event by event id](https://docs.mypreferences.com/integration-api/events/retrieve-event-by-event-id.md): This method allows you to retrieve a specific event by specifying the EventId . It is designed to facilitate event playbacks for verification and audit purposes. It offers an optional query parameter locale that returns the event name and description for the specified locale id. Contact support@possiblenow.com with localized names and description for locales you want to use. If the localized name and description is not configured for the specified locale, the API will return the event name and description in your account's default locale. A future update will provide an API for programmatic management of these updates. All API users must have the Event Data - > View Permission enabled within their User Groups. • [User Management](https://docs.mypreferences.com/user-management.md): The User Management API provides endpoints for creating, updating, and retrieving users. While users are typically created via the MyPreferences UI, these APIs provide a programmatic way to manage user accounts and facilitate system integrations that require direct user management. The User Management APIs can only be accessed by users who belong to the Administrator User Group. • [Create user](https://docs.mypreferences.com/user-management/create-user.md): This method allows you to create a new user account in MyPreferences. It supports specifying user details such as username, email address, source group, user group, and other details required for onboarding. The API creates a new user if one does not already exist. If a matching user is found and is inactive, the user will be reactivated. In both cases, the same response is returned. • [Update user](https://docs.mypreferences.com/user-management/update-user.md): The method allows you to overwrite the details of an existing user in MyPreferences. Properties not included in the request will be treated as blank, and will not be retained in the updated user account. • [Retrieve users](https://docs.mypreferences.com/user-management/retrieve-user.md): The method retrieves a list of all existing users in MyPreferences.