# Welcome

This is your central resource for configuring, analyzing, and governing your privacy operations directly from the Didomi console.&#x20;

<table data-header-hidden><thead><tr><th width="314"></th><th></th></tr></thead><tbody><tr><td><strong>Organization and Account</strong></td><td>Manage your organization's settings, users, roles, and access controls.</td></tr><tr><td><strong>Consent Management Platform (CMP)</strong></td><td>Configure and publish consent notices across your websites and apps to collect end-user consent in compliance with global privacy regulations.</td></tr><tr><td><strong>Preference Management Platform (PMP)</strong> </td><td>Set up preferences widgets that empower your end-users to control their communication, marketing, and data sharing choices.</td></tr><tr><td><strong>Compliance Report and Advanced Compliance Monitoring</strong> </td><td>Track and audit your compliance posture across domains, regulations, and vendors.</td></tr><tr><td><strong>Privacy Requests</strong></td><td>Manage end-user data subject access requests (DSARs) by configuring intake forms, routing requests to the right teams, and tracking their resolution</td></tr><tr><td><strong>Analytics</strong></td><td>Monitor consent rates, user preferences, and compliance performance through your Didomi Console dashboards.</td></tr><tr><td><strong>Integrations</strong></td><td>Connect the Didomi console with your existing tools and third-party services to synchronize consent and preferences across your stack.</td></tr></tbody></table>

### **New to Didomi**

Start by setting up your organization's account, then follow the guides for the products included in your plan. Each section walks you through configuration steps directly in the Didomi Console.


# General


# Scale and performance

In this article, we will cover how the Didomi platform is designed to scale to your organization's needs and how optimize our technology to perform on your websites and applications.

* [Didomi platform scaling](#didomi-platform-scaling)
* [Didomi platform performance](#didomi-platform-performance)

***

### Didomi platform scaling

In the sections below, we outline ways in which parts of the Didomi platform scales its technologies:

<table data-header-hidden><thead><tr><th width="195.6666259765625"></th><th></th></tr></thead><tbody><tr><td><strong>Script</strong></td><td><p></p><ul><li>Didomi JavaScript code is statically hosted on AWS S3 and served through Amazon Cloud Front with replication in all their points of presence in the world (including Spain). Didomi does not have any single server in that path, and we are confident that Cloud Front can scale without an issue.</li><li>The banner, the pop-up, and the tag management (firing any third-party tag that requires consent, the IAB CMP API, etc.) all happen without any server requests (consent is cached locally in a cookie) so that your organization's end-user experience is not impacted.</li></ul></td></tr><tr><td><strong>Back-end servers</strong></td><td><p></p><ul><li>Didomi sends HTTP requests when consent is collected or for counting page views (we sample the number of page views by counting between 10% - 20%). These requests are asynchronous and always happen after all the front-end operations so that, even if they were to fail, it would not impact the end-user. This also means that if Didomi servers were to be unavailable, the experience of your end-users would not be impacted and consent is stored locally and sent to our servers later on.</li><li>Back-end servers are monitored 24 hours a day, 7 days a week with alerting through New Relic and AWS CloudWatch to ensure that Didomi is notified if there is any issue. We auto-scale these servers to ensure that we add (or remove) servers to our stack as needed throughout the day or when we sign up new clients. </li><li>Typically, Didomi does not monitor clients individually (we might do it exceptionally from time to time) as we focus on making sure that all our infrastructure is elastic, can scale without any human intervention, and that our servers being down does not impact the critical path of collecting/managing consent for end-users. We know we can handle 10 times more traffic than we do today without any issue (and that growth has happened a few times over the last few months).</li></ul></td></tr><tr><td></td><td></td></tr></tbody></table>

### Didomi platform performance

The general rule at Didomi is an imperative to minimize the impact of our presence on websites. In order to achieve this we have implemented the following measures:

* Use a CDN (AWS CloudFront) and aggressively cache our SDK to make sure that it is distributed as fast as possible anywhere in the world with local points of presence.
* Minimize the number of HTTP requests that we send to our servers. The initial load (the first time an end-user loads our SDK) typically takes two HTTP requests and subsequent loads of the SDK do not require HTTP requests for consent management. We embed the geolocation of the end-user as well as any specific configuration for your websites into a website-specific version of our SDK to avoid extra round trips.
* Cache all the consent information in cookies locally to ensure that we can answer consent requests on the page immediately. This means that we do not delay loading your ad tags by loading data from our servers.&#x20;
* For non-EU publishers, we stay out of the way for non-EU end-users as much as possible and immediately fire all the tags that we might be in charge of without any request to our servers. We load a specific version of our SDK that does not include all the UI components to be lighter in these cases: its only job is to fire all the tags as fast as possible. With some additional configuration, we can also avoid loading our SDK for non-EU end-users completely and have you setup Google Tag Manager in a way so there is no delay/condition for non-EU end-users.
* The Didomi SDK is deployed with the "async" attribute to ensure that it does not block your content.


# Consent storage

End-user consent is stored on the client-side and server-side. However, Didomi does not send HTTP requests to determine the end-user's consent status since we keep a local cache of this data in a cookie (`didomi_token` or `didomi_dcs`).

{% hint style="info" %}
[Click here](/get-started/general/didomi-consent-string-dcs-and-signature) to learn more about the cookie stored client-side (`didomi_dcs`)
{% endhint %}

Didomi will perform the following:

1. Check the client-side cookie for consent information.
2. If the information is missing, Didomi will show your organization's consent notice configured for the website.
3. Collected end-user consent will be stored in a client-side cookie and also sent to Didomi servers for long-term storage.


# Cookies and local storage

Review the table below for more information on cookies and/or local storage items that Didomi may store on end-user's devices:

<table><thead><tr><th width="140">Key</th><th width="106">Status</th><th>Description</th></tr></thead><tbody><tr><td><code>didomi_dcs</code></td><td>Active</td><td>The Didomi Consent String (DCS) <code>didomi_dcs</code> is an alternative to <code>didomi_token</code> as the mechanism used to store end-user consent. Allows your organization to not only support TCF vendors and purposes but also custom vendors and purposes, Authorized Technology Providers (ATPs), etc. in a single, lightweight, and privacy-compliant format. <a href="/pages/ti4kqkczqKkPqdOQ10Pu">Click here</a> for more information.</td></tr><tr><td><code>euconsent-v2</code></td><td>Active</td><td>Contains the IAB TCF consent string (TC String) and consent information for all the standard IAB vendors and purposes. <a href="https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md#the-core-string">Click here</a> for the technical specification of the TC String.<br><br>The TC string can be decoded using the <a href="https://iabtcf.com/#/decode">TC String decoder</a>.</td></tr><tr><td><code>didomi_token</code></td><td>Active</td><td><p>Consent information for custom purposes and vendors, as well as Didomi-specific information (e.g. user ID). The token can be decoded using a <a href="https://www.base64decode.org/">base64 decoder</a>.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Note</strong>: Token used specifically to store end-user consent related to GDPR. </p></div><p>The data included in the token includes:</p><ul><li><strong>updated</strong>: last consent update date</li><li><strong>vendors.enabled</strong>: list of custom vendors enabled on the consent legal basis</li><li><strong>vendors.disabled</strong>: list of custom vendors disabled on the consent legal basis</li><li><strong>purposes.enabled</strong>: list of custom purposes enabled on the consent legal basis</li><li><strong>purposes.disabled</strong>: list of custom purposes disabled on the consent legal basis</li><li><strong>vendors_li.enabled</strong>: list of custom vendors enabled on the legitimate interest legal basis</li><li><strong>vendors_li.disabled</strong>: list of custom vendors disabled on the legitimate interest legal basis</li><li><strong>purposes_li.enabled</strong>: list of custom purposes enabled on the legitimate interest legal basis</li><li><strong>purposes_li.disabled</strong>: list of custom purposes disabled on the legitimate interest legal basis</li><li><strong>version</strong>: TCF version used</li></ul></td></tr><tr><td><code>didomi_token_&#x3C;regulation></code></td><td>Active</td><td><p>Consent information for purposes and vendors for non-GDPR regulations supported by Didomi. The token can be decoded using a <a href="https://www.base64decode.org/">base64 decoder</a>. <br><br>For each regulation where the end-user's consent information is stored, the token will be suffixed with name of the regulation (e.g. <code>didomi_token_cpra</code> or <code>didomi_token_tdpsa</code>). <a href="/pages/PV4LF5v98dPxq8XyJfaW">Click here</a> for more information on supported regulations. <br></p><p>The data included in the token includes:</p><ul><li><strong>updated</strong>: last consent update date</li><li><strong>vendors.enabled</strong>: list of custom vendors enabled on the consent legal basis</li><li><strong>vendors.disabled</strong>: list of custom vendors disabled on the consent legal basis</li><li><strong>purposes.enabled</strong>: list of custom purposes enabled on the consent legal basis</li><li><strong>purposes.disabled</strong>: list of custom purposes disabled on the consent legal basis</li><li><strong>vendors_li.enabled</strong>: list of custom vendors enabled on the legitimate interest legal basis</li><li><strong>vendors_li.disabled</strong>: list of custom vendors disabled on the legitimate interest legal basis</li><li><strong>purposes_li.enabled</strong>: list of custom purposes enabled on the legitimate interest legal basis</li><li><strong>purposes_li.disabled</strong>: list of custom purposes disabled on the legitimate interest legal basis</li><li><strong>version</strong>: TCF version used</li><li><strong>dns</strong>: Boolean value for if end-user has opted out of sale/share of data (only available for <code>didomi_token_cpra</code>)</li><li><strong>dnsd</strong>: Timestamp for when the opt-out notice was shown to the end-user (only available for <code>didomi_token_cpra</code>)</li></ul></td></tr></tbody></table>


# Didomi Consent String (DCS) & Signature

{% hint style="info" %}
The Didomi Consent String (DCS) `didomi_dcs` is an alternative to the `didomi_token`  as the mechanism used to store end-user consent. [Click here](/get-started/general/migrate-to-didomi-consent-string-dcs) for more information on migrating your consent notices so that use the Didomi Consent String.
{% endhint %}

The Didomi Consent String (DCS) is a compact and modern consent string format that is designed to offer full flexibility in representing an end-user's privacy choices. It is fully supported on both web and mobile platforms includes all of Didomi SDKs for websites, iOS, and Android applications. In this article, we will cover the following:

* [Didomi Consent String (DCS) overview](#didomi-consent-string-dcs-overview)
* [`didomi_dcs`](#didomi_dcs-cookie)
* [Didomi Consent String (DCS) encoding ](#didomi-consent-string-dcs-encoding)
* [Didomi Signature](#didomi-signature)
* [Decode Didomi Consent String (DCS)](#decode-didomi-consent-string-dcs-1)

***

### &#x20;Didomi Consent String (DCS) overview

The Didomi Consent String (DCS) is a foundational component of privacy infrastructure that is highly performant and enables legal compliance. It exceeds the scope of traditional solutions by enabling organizations to encode and store all types of consent data in a single binary string.

Inspired by the Interactive Advertising Bureau's (IAB) TC String, an industry standard for Transparency and Consent Framework (TCF) vendors, the DCS allows your organization to not only support TCF vendors and purposes but also custom vendors and purposes, Authorized Technology Providers (ATPs), etc. in a single, lightweight, and privacy-compliant format. Some benefits of utilizing the DCS include:

<table data-header-hidden><thead><tr><th width="174">Benefit</th><th>Description</th></tr></thead><tbody><tr><td>Compact size</td><td>Uses a binary format instead of JSON, reducing the overall cookie size to stay well below 2 KB.</td></tr><tr><td>Performance boost</td><td>Lighter payloads improve page speed and SEO rankings.</td></tr><tr><td>Easier to parse</td><td>No need to decode complex JSON strings client-side.</td></tr></tbody></table>

{% hint style="info" %}
[Click here](https://developers.didomi.io/cmp/didomi-consent-string) to review Didomi developer documentation regarding the Didomi Consent String (DCS).
{% endhint %}

### `didomi_dcs`&#x20;

The Didomi Consent String (DCS) is stored in `didomi_dcs` and is an alternative to  `didomi_token` which was typically stored in a browser's cookies or local storage. Like its predecessor  `didomi_dcs` can be:

* Stored in cookies or local storage.
* Read by Didomi SDKs, APIs, and third-party integrations.

  Read by Didomi SDKs, APIs, and third-party integrations.
* Used to determine whether consent or legitimate interest applies to specific data processing activities.

{% hint style="warning" %}
**Note:** Consent notices created after **June 17th, 2025** will have the Didomi Consent String (DCS) enabled by default (*i.e.* `didomi_dcs` *will be utilized to store end-user consent*). Previously created message can migrate to the Didomi Consent String (DCS). [Click here](/get-started/general/migrate-to-didomi-consent-string-dcs) to learn more about migrating to the DCS.
{% endhint %}

### Didomi Consent String (DCS) encoding&#x20;

The Didomi Consent String (DCS) utilizes a binary format that is designed to be efficient and flexible. It supports three encoding mechanisms:

<table data-header-hidden><thead><tr><th width="197.5">Mechanism</th><th>Description</th></tr></thead><tbody><tr><td>BitField</td><td>Ideal for compactly encoding consecutive or closely packed IDs</td></tr><tr><td>Range</td><td>Efficient when encoding groups of IDs with gaps</td></tr><tr><td>Fibonacci</td><td>Optimized for compressing large sets of continuous or patterned ID ranges</td></tr></tbody></table>

Each section within the DCS (e.g., purposes or vendors) may use a different encoding mechanism, depending on the nature and distribution of the IDs. The encoding is automatically selected by the Didomi DCS library to generate the smallest and most efficient string possible.

Data within the DCS include the following:

<table data-header-hidden><thead><tr><th width="236">Data</th><th>Description</th></tr></thead><tbody><tr><td>Header metadata</td><td>Version, creation date, last update date, user ID, and sync status.</td></tr><tr><td>Purposes consent</td><td>End-user choices for processing their personal data for specific purposes that utilize consent as a legal basis.</td></tr><tr><td>Purposes legitimate interest</td><td>End-user choices for processing their data for specific purposes that utilize legitimate interest as a legal basis.</td></tr><tr><td>Vendors consent</td><td>End-user choices for allowing specific vendors to process data that utilize consent as a legal basis.</td></tr><tr><td>Vendors legitimate interest</td><td>End-user choices for allowing specific vendors to process data that utilize legitimate interest as a legal basis.</td></tr><tr><td>Device ID (DID)</td><td>Unique device identifier. (Optional) </td></tr><tr><td>Organization User ID (OUID)</td><td>User ID provided by the organization that is useful for syncing consent across devices. (Optional) </td></tr><tr><td>Signature</td><td>A premium feature that adds a cryptographic signature to verify the integrity and authenticity of the consent string. (Optional) <br><br><a href="#didomi-signature">Click here</a> for more information.</td></tr></tbody></table>

### Didomi Signature

The Didomi Signature is a premium feature for the Didomi Consent String (DCS) and adds a cryptographic seal to the DCS to ensure the authenticity and integrity of the end-user's consent. The signature can help your organization to:

* Verify end-user consent data has not been tampered with
* Add legal value by proving an end-user's consent is genuine and unchanged

{% hint style="info" %}
[Click here](broken://pages/hYxfS6NEXavSUQlm3wwK) for information on how to enable the Didomi Signature.
{% endhint %}

<img src="/files/Lb9oQa1gqjH8I1PMKbei" alt="" width="563">

The signature is a combination of a **key** and the **signature**. Didomi utilizes multiple signing keys (A, B, C...) with a round-robin algorithm and if a key is ever compromised it is disabled and rotated out with no service disruption

```
// Signature example

CMEYCIQCxaQZGTjKUdeh1BfsWE1fbHoskKbOu8lqcbhQAe7pRlQIhAI80Rm3Qk6VGWNUMLD8D/VcndQ1ufw26hQsfWNgH7KjY
```

### Decode Didomi Consent String (DCS)

The Didomi Consent String (DCS) can be decode by using the [DCS decoder](https://dcs-decoder.didomi.io/), which will transform the binary string into a human-readable JSON object.

{% hint style="info" %}
[Click here](https://developers.didomi.io/cmp/didomi-consent-string/decoding-tools) to review our developer documentation on how to programatically decode the Didomi Consent String (DCS).
{% endhint %}

Input the end-user's DCS into the provided space and click **Decode**.

<figure><img src="/files/G9vsPVUYzsuWQbK6AM2r" alt="" width="563"><figcaption></figcaption></figure>

The DCS decoder output will include the following:

* Full JSON object containing consent metadata, vendor/purpose selections, and timestamps.
* Signature verification status (if the DCS contains a cryptographic signature)

```json
//Example
{
  "user_id": "19938c3e-f28b-603a-bc1b-520c55f12345",
  "created": "2025-09-11T12:33:08.900Z",
  "updated": "2025-09-11T12:33:13.300Z",
  "regulation_id": 1,
  "purposes_optin": {
    "enabled": [
      16653
    ],
    "disabled": []
  },
  "purposes_optout": {
    "enabled": [],
    "disabled": []
  },
  "vendors_optin": {
    "enabled": [
      1,
      2,
      14032
    ],
    "disabled": []
  },
  "vendors_optout": {
    "enabled": [
      2,
      14032
    ],
    "disabled": []
  }
}
```


# Migrate to Didomi Consent String (DCS)

{% hint style="warning" %}
**Note**: Consent notices created after **June 17th, 2025** will have the Didomi Consent String (DCS) enabled by default (*i.e.* `didomi_dcs` *will be utilized to store end-user consent*). Previously created message can migrate to the Didomi Consent String (DCS). [Click here](/get-started/general/migrate-to-didomi-consent-string-dcs) to learn more about migrating to the DCS.
{% endhint %}

The [Didomi Consent String (DCS) ](/get-started/general/didomi-consent-string-dcs-and-signature)is a compact and modern consent string format that is designed to offer full flexibility in representing an end-user's privacy choices. It is fully supported on both web and mobile platforms includes all of Didomi SDKs for websites, iOS, and Android applications.

The Didomi Consent String (DCS) is stored in `didomi_dcs` and is an alternative to `didomi_token` which was typically stored in a browser's cookies or local storage. In this article, we will cover how to manually upgrade a consent notice so that it leverages the Didomi Consent String (DCS)

{% hint style="info" %}
Please contact the Didomi support team if your organization wishes to bulk migrate all of your consent notices to the Didomi Consent String (DCS).&#x20;
{% endhint %}

From your Didomi console, click **Consent Notices** on the left-hand panel and select a consent notice from the list.

<figure><img src="/files/4oE0E7Ga3AZw6sR93U7b" alt="" width="563"><figcaption></figcaption></figure>

Select **Customization** and then click **Cookies & storage** on the subsequent page.

<figure><img src="/files/fgr3YJ2i9m7HA8W36H4L" alt="" width="563"><figcaption></figcaption></figure>

Navigate to **Didomi Consent String** panel and enable the checkbox.

<figure><img src="/files/ioqVlRjrxP6B662MlUjS" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Before** publishing a migrated consent notice, please ensure that your organization have satisfied the following:

* If your organization's website or app accessed  `didomi_token` in JSON format that it is updated to handle the binary format of `didomi_dcs` . [Click here](https://developers.didomi.io/cmp/didomi-consent-string) for more information.
* If your organization is integrated with third-party vendors that expect the `didomi_token` you may need to coordinate format updates with these partners
  {% endhint %}

Continue publishing your migrated consent notice when finished.


# Retrieve Didomi configuration (web)

The current Didomi configuration implemented on a website can be retrieved via a function call in your browser's console.&#x20;

Open your target website in a browser of your choice and launch the browser's developer tools. Navigate to the **Console** tab of the developer tools.

<figure><img src="/files/xw6S21oZvx2VhGDCfsJO" alt="" width="563"><figcaption></figcaption></figure>

Input the following into the browser console and click Return:

```javascript
Didomi.getConfig()
```

The response represents the most recent Didomi configuration implemented on the website.

<figure><img src="/files/QKwfVoNfkioHE7uGHlr0" alt="" width="563"><figcaption></figcaption></figure>


# Single Page Application (SPA) support

The Didomi SDK can be embedded into single page applications without any additional work of configuration. The SDK will utilize the same tag and APIs as non-single page application (SPA) implementations.&#x20;

The SDK is able to operate without polluting the global DOM and adversely impacting the website on which it is embedded. Didomi has deployed its own SDK in two internal Angular apps and our public privacy center.

{% hint style="info" %}
[Click here](https://github.com/didomi/samples/tree/main/how-to-track-SPA-with-GTM-and-Didomi) for more information on how to condition tags in Google Tag Manager (GTM) within a single page application (SPA) context.
{% endhint %}


# Delete first-party browser cookies programmatically

Didomi has developed a script that your organization can utilize on-page to target and delete first-party browser cookies.This script ensures that previously accepted non-essential first-party cookies are no longer used after an end-user refusal of all purposes.&#x20;

* [Identify essential cookies to preserve](#identify-essential-cookies-to-preserve)
* [Implement Didomi programmatic first-party browser cookies deletion script](#implement-didomi-programmatic-first-party-browser-cookies-deletion-script)
* [Third-party trackers](#third-party-trackers)

{% hint style="warning" %}
**Note**: The details described below only apply to first-party cookies. Technically, it is not possible to delete third-party cookies that have already been dropped on an end-user's browser if the end-user refuses all purposes later.
{% endhint %}

***

### Identify essential cookies to preserve

The Didomi script allows your organization to specify any cookies you want to preserve so that they are not deleted when the script is executed. Any cookies not specified (as well as the items stored in localStorage) will be deleted.

{% hint style="warning" %}
**Note:** Didomi strongly recommends that you include the following Didomi cookies in your list of preserved cookies:

* `didomi_dcs` - The Didomi Consent String (DCS) is a  binary format that replaced didomi\_token and offers a smaller, more compact representation of user consent data.
* `didomi_token` - A legacy cookie that contains consent information for custom purposes and vendors, as well as Didomi-specific information.
* `euconsent-v2` - Contains the IAB TCF consent string and consent information for all the standard IAB vendors and purposes.

Preserving these cookies will keep your consent notice from reappearing to re-collect the end-user's consent.
{% endhint %}

When configuring the Didomi script your organization can directly name the cookies that should be preserved and/or use regular expression (regex) to preserve cookies that adhere to a specific pattern.

{% tabs %}
{% tab title="Named cookies" %}
If your organization knows the name of cookies you wish to preserve include those in the `itemsToKeep` array:

```
var itemsToKeep = ["euconsent-v2", "didomi_token", "didomi_dcs"]; 
```

{% endtab %}

{% tab title="Regex" %}
To preserve cookies that adhere to a specific text pattern, your organization can write a regular expression and assign to the `itemsToKeepRegex` variable:

```
var itemsToKeepRegex = /some_regex_[a-z0-9]*/;
```

{% endtab %}
{% endtabs %}

### Implement Didomi programmatic first-party browser cookies deletion script

{% hint style="info" %}
The Didomi provided script is a template that may not directly be applicable to your organization's specific use case and may require adaptation on your behalf to work as intended.
{% endhint %}

The script to delete first-party browser cookies can be found at the link below:

> [Didomi programmatic first-party browser cookies deletion script](https://github.com/didomi/samples/tree/main/how-to-delete-browser-cookies)

The script works on all browsers and is triggered when an end-user who had previously agreed to all vendors and purposes subsequently changes their privacy choices to refuse all vendors and purposes. When the end-user withdraws their consent, the page will automatically reload and all of the cookies that have not been preserved in the script will be deleted from the browser.

### Third-party trackers

Third-party trackers can only be removed by contacting the respective vendor(s) and request their assistance in the removal.

Your organization can use data from your [Compliance Report](broken://pages/2ULkptIS04nbjnSO9Olc) to provide the vendor(s) with a detailed list of the third-party trackers detected on your website. Include the following information:

* **Tracker name**
* **Tracker domain**
* **Tracker type** (e.g., cookie, pixel, etc.)
* **Third-party vendor responsible**

Sharing this information ensures vendors can take appropriate action efficiently.

{% hint style="info" %}
If the trackers are integrated via embedded content, such as videos or podcasts, consider removing the embedded content from your website to eliminate the trackers directly.
{% endhint %}

&#x20;


# Difference between the SDK script and HTML code snippet

The SDK script loads the Didomi SDK for comprehensive consent management, while the HTML code snippet embeds specific Didomi widgets directly into a webpage.

In a PMP context, both the SDK script and the HTML code snippet are used together to ensure proper functioning.

* **SDK Script**: Loads the core Didomi SDK, which is essential for managing user consents and preferences. This script ensures that the necessary libraries and functionalities are available.
* **HTML Code Snippet**: Embeds specific widgets (or preference center) into the webpage. It works in conjunction with the SDK script to render the necessary components at the designated locations within the HTML structure.

Together, they enable comprehensive functionality and proper integration of the preference management platform into your website


# Regular expression (regex)

A regular expression (regex) is a sequence of characters that specifies a search pattern for a given string. The search pattern can include numbers, letters, space and special characters. In this article we will cover ways in which your organization can leverage regex in the Didomi console and a brief overview of some common syntax to use in your regex.

* [Didomi regex use cases](#didomi-regex-use-cases)
* [Regex common syntax](#regex-common-syntax)

### Didomi regex use cases

Regex can be used in the following areas of the Didomi console:

* [Analytics filters](#analytics-filters)
* [Compliance report URL filter](#compliance-report-url-filter)
* [Persist tracker settings by pattern](#persist-tracker-settings-by-pattern)

#### Analytics filters

For analytics dashboards that have **Domain(s)/App(s) (Exclude)**,  **Domain(s)/App(s) (Include)**, and **Notice name** filters, your organization can use regex to filter metrics for specific domains and/or apps. The match is case insensitive.

<figure><img src="/files/zWriTgs4SDbfbW1XeiR8" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
A common regex to use with analytics filters is the pipe character "**|**" to express disjunction (matches "x" **OR** "y").&#x20;
{% endhint %}

#### Compliance report URL filter

The URL filter is an advanced setting for compliance reports that enable your organization to direct the Didomi bot to only scrape URLs that contain a specific string. Enable the **The URL filter is a regular expression** toggle to use regex in the URL filter,&#x20;

<figure><img src="/files/7vSoe6Fhb9rtlPjl6QZP" alt="" width="563"><figcaption></figcaption></figure>

#### Persist tracker settings by pattern

There are specific use-cases where you may want to persist a single set of exemptions and purposes across a group of trackers that follow a particular pattern. Utilizing regular expression (regex), your organization can provide the pattern for a single tracker and Didomi will apply the tracker's settings to any tracker found in a compliance report that matches the configured pattern. [Click here](/tracker-and-vendor-discovery/tracker-policy/apply-tracker-settings-by-regex) to learn more about persisting tracker settings by a regex pattern.

<figure><img src="/files/GxvZsJVEHtSqwApuiMeI" alt="" width="563"><figcaption></figcaption></figure>

### Regex common syntax

The table below offers some common regex syntax that your organization can utilize in your expressions. Didomi strongly encourages you to test your regex before applying them to your filters with free regex tools such as [regexr.com](https://regexr.com/).

<table><thead><tr><th width="92.35003662109375">Syntax</th><th width="175.60003662109375">Description</th><th width="123.2999267578125">Example</th><th>Matched</th><th>Not Matched</th></tr></thead><tbody><tr><td><code>.</code></td><td>Placeholder the matches any character (including spaces)</td><td>a.c</td><td>abc<br>baec</td><td>abdc (two characters instead of one between a and c</td></tr><tr><td><code>.*</code></td><td>matches all characters</td><td>test.*</td><td>testtest<br>test-version6<br>domain-text</td><td>domain-tes (missing character)</td></tr><tr><td><code>^</code></td><td>matches at the beginning of the string</td><td>^debug</td><td>debug.domain.com</td><td>domain.debug (does not start with debug)</td></tr><tr><td><code>$</code></td><td>matches at the end of the string</td><td>.com$</td><td>domain.com<br>support.domain.com</td><td>domain.com.co (does not end with .com)</td></tr><tr><td><code>\/</code></td><td>escapes <code>/</code>  character</td><td>\/page2\/</td><td>/page2/</td><td>/page-v2/</td></tr><tr><td><code>[abc]</code></td><td>any of a, b, c</td><td>test-[yv]</td><td>test-y<br>test-v</td><td>test-[yv] (identified as regex pattern and not characters)</td></tr><tr><td><code>ab|cd</code></td><td>matches ab or cd</td><td>domain|support</td><td>dev.domain.com<br>subdomain.com<br>support.fr</td><td>mainpg (neither word is in string)</td></tr><tr><td><code>^(ab|cd)</code></td><td>matches beginning with ab or cd</td><td>^(debug|support)</td><td>debug.domain.com<br>support.domain.com</td><td>domain.debug.com (debug is not at the start of string)</td></tr><tr><td><code>(ab|cd)$</code></td><td>matches end with ab or cd</td><td>(.fr|.co.uk)$</td><td>domain.fr<br>sub.domain.fr<br>domain.co.uk</td><td>.fr.domain.com (string does end in .fr)</td></tr></tbody></table>


# Account settings and support


# Contact Didomi support

Didomi customer teams are always here to support your organization. Our teams can be reached by email at <support@didomi.io>.

Additionally, our customer teams are available for chat Monday through Friday (UTC +2) from 9am to 12pm and 2pm to 6pm. Chat with our customer teams directly from the Didomi console by opening the chat widget in the lower right-hand side.

<figure><img src="/files/az6OAlgab62VlnVcL62C" alt="" width="563"><figcaption></figcaption></figure>


# Access customer portal

{% hint style="success" %}
**Access Type**: Available to all users
{% endhint %}

The customer portal enables your organization to view and manage your Didomi support tickets (that have been submitted by you or other members of your organization). In this article, we will cover how to create an account with the Didomi customer portal so that you can access support tickets.

Navigate to the upper right-hand corner of the Didomi product documentation site and click **Customer Portal**.

<figure><img src="/files/nqPYcOlJSaBXrFtbOJe1" alt="" width="563"><figcaption></figcaption></figure>

You will be redirected to the login page for the Didomi customer portal. Click **Register here**.

<figure><img src="/files/DStzoFJwOdlHUikD1ACo" alt="" width="375"><figcaption></figcaption></figure>

Use the subsequent modal to input the required information in the appropriate fields and click **Save password** when finished.&#x20;

<figure><img src="/files/oP32sYmZCmoiuL65ladi" alt="" width="375"><figcaption></figcaption></figure>

A verification email will be delivered to your email address to confirm the account creation.


# Manage support tickets

{% hint style="success" %}
**Access Type**: Available to all users
{% endhint %}

Didomi support tickets created by you or members of your organization are accessible via the Didomi customer portal. In this article, we will cover:

* [Ticket overview](#ticket-overview)
* [Support ticket filters](#support-ticket-filters)
* [Reply to support ticket](#respond-to-support-ticket)
* [Export support tickets](#export-support-tickets)

{% hint style="info" %}
Only users who have [created an account to access the customer portal](/organization-and-account-settings/account-settings-and-support/access-customer-portal) can manage support tickets.&#x20;
{% endhint %}

To start, navigate to the upper right-hand corner of the Didomi product documentation site and click **Customer Portal**.

<figure><img src="/files/nqPYcOlJSaBXrFtbOJe1" alt="" width="563"><figcaption></figcaption></figure>

You will be redirected to the login page for the Didomi customer portal. Use the provided fields to input your email address and password, respectively, and click **Sign in**.

<figure><img src="/files/p0NI78gjtipIqk8bHCg4" alt="" width="375"><figcaption></figcaption></figure>

***

### Ticket Overview

From the ticket list page, you can view the following information for each ticket:

<table><thead><tr><th width="201.6666259765625">Field</th><th>Description</th></tr></thead><tbody><tr><td>Subject</td><td>Subject header of the email from which the ticket is derived</td></tr><tr><td>Requested By</td><td>Sender of the original email from which the ticket is derived</td></tr><tr><td>Created</td><td>Date the ticket was created</td></tr><tr><td>Ticket Owner</td><td>Member of the Didomi team assigned to the ticket</td></tr><tr><td>Last Activity</td><td>Date on which activity was recorded on the ticket</td></tr><tr><td>Status</td><td>Indicates whether the ticket is <strong>Open</strong> or <strong>Closed</strong></td></tr></tbody></table>

<figure><img src="/files/awHQYP840UwndzvPXkWm" alt="" width="563"><figcaption></figcaption></figure>

Click any ticket from the table to view additional information regarding the ticket such as:

* Ticket ID
* Email thread
* Email recipients
* Response field

### Support ticket filters

The ticket list page can be filtered by the following parameters:

<table><thead><tr><th width="176">Filter</th><th>Description</th></tr></thead><tbody><tr><td>View</td><td>Filters list between tickets owned by you or all of the tickets in your organization</td></tr><tr><td>Status</td><td>Filters list between ticket statuses: <strong>Open</strong>, <strong>Closed</strong>, or <strong>All</strong></td></tr></tbody></table>

Click the appropriate filter and use the provided drop-down menu to filter the list of tickets.

<figure><img src="/files/AOPMosJVHjQzj3JQZ4Va" alt="" width="563"><figcaption></figcaption></figure>

### Reply to support ticket

{% hint style="info" %}
Replies are only available for tickets with an **Open** status.
{% endhint %}

Click into a ticket with an **Open** status and navigate to **Response** field. Use the provided space to input your reply and click **Send** when finished.

<figure><img src="/files/WnpOBb0eiUoWI06rvSx2" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note**: Ticket responses sent through the customer portal will also be delivered to user email addresses listed in the **Reply to** field.&#x20;
{% endhint %}

### Export support tickets

To export tickets from the customer portal into a csv file, use the [provided filters](#support-ticket-filters) to organize your list and then click **Export to CSV**.

<figure><img src="/files/C5Z4JhWqM1a0pD5FYQiN" alt="" width="563"><figcaption></figcaption></figure>

The current list of support tickets will be downloaded onto your local machine.&#x20;


# Service Level Agreement (SLA) and incident management

The Service Level Agreements for the Didomi platform is set at 99% availability on a per monthly basis.&#x20;

Didomi has designed its tech stack with a distributed/redundant infrastructure to mitigate the risk of failure. Our tech stack is monitored 24 hours a day, 7 days a week with alerts sent directly to Didomi engineers through various monitoring tools (e.g. AWS CloudFront, New Relic, etc.).

We are particularly cautious with our consent collection, storage and sharing that is mission critical to all our clients. We monitor and alert on the following elements:&#x20;

* &#x20;Overall health of our servers, applications and content delivery network.
* &#x20;Average, 95/99/99.9 percentiles response times of our requests for reading/writing consents.
* &#x20;Number of consents collected per property (compared to historical trends).

The Didomi development team is distributed across different time zones to ensure reactivity in case of an incident.&#x20;


# Edit account settings

{% hint style="success" %}
**Access Type**: Available to all users
{% endhint %}

In this article, we will cover how to edit the name associated with your personal Didomi account.

Click **My account** in the upper right-hand corner and select **Account settings** from the drop-down menu.

<figure><img src="/files/KKwmu6mCvNWL6XO1vzZa" alt="" width="563"><figcaption></figcaption></figure>

Use the fields in the subsequent page to edit information related to your personal Didomi account like your name. Click **Save changes** when finished.

<figure><img src="/files/1rSolrr4mKuJnGM1WwyD" alt="" width="563"><figcaption></figcaption></figure>


# Delete personal Didomi account

{% hint style="success" %}
**Access Type**: Available to all users
{% endhint %}

If necessary, a user can delete their personal Didomi account by clicking **My account** in the upper right-hand corner and selecting **Account** **settings** from the drop-down menu.

<figure><img src="/files/KKwmu6mCvNWL6XO1vzZa" alt="" width="563"><figcaption></figcaption></figure>

Click **Delete my account** on the subsequent page.

<figure><img src="/files/X7n9Zb6lt1gAWVRM2WMI" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the account in the modal and click **Yes, delete account**.

{% hint style="danger" %}
This action is irreversible and you will be logged out of the Didomi platform immediately.
{% endhint %}

<figure><img src="/files/upsVmy4DeFLkdW7hLtcF" alt="" width="345"><figcaption></figcaption></figure>


# Single Sign-On (SSO)

{% hint style="success" %}
**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. Some benefits of SSO include:

<table data-header-hidden><thead><tr><th width="258"></th><th></th></tr></thead><tbody><tr><td>Security</td><td>Ensures better security of user credentials by providing a standardized and unique method of identification.</td></tr><tr><td>Simplified user management</td><td>A single source (identity provider) where access to applications for users in your organization is managed.</td></tr><tr><td>Improved user experience</td><td>Eliminate credential management fatigue.</td></tr></tbody></table>

The two main protocols used for SSO are:

* [SAML (Security Assertion Markup Language)](#saml-2.0)
* [OAuth 2.0](#oauth-2.0)

{% hint style="info" %}
Didomi only supports SSO based on SAML 2.0 standard protocol.
{% endhint %}

{% tabs %}
{% tab title="SAML 2.0" %}
SAML (Security Assertion Markup Language) is an open standard for exchanging authentication and authorization data between parties. SAML is extensively used by enterprises and governments for sharing identity data in a highly secure manner.&#x20;

The service provider and the identity provider build a trusted relationship, where the user identity is transferred using signed SAML messages instead of passwords. Data is transferred in XML structure, through HTTP or SOAP mechanisms.

<figure><img src="/files/FPJ6RQCjaKGnaeGKemnx" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="OAuth 2.0" %}
OAuth 2.0 is an industry-standard authorization framework that enables a third-party application to access limited user data from another service. The authorization server provides the client app with an access token for a specific list of resources. The client app will then use this token to access the authorized resources.

Social Login, for example, is a use case that utilizes the OAuth 2.0 protocol. It consists of reusing the existing credentials from a social network like Google, Microsoft, etc.

The user can sign in to their social network account without the need to go through the creation flow to simplify registration and logins.

<figure><img src="/files/DfEnLe1ZMqOOnkjCNFPp" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

For your convenience, Didomi has compiled the following table to compare the differences between SAML and OAuth 2.0 (e.g. Social Login):

<table><thead><tr><th width="212"></th><th>SAML</th><th>OAuth 2.0 (Social Login)</th></tr></thead><tbody><tr><td>Use case</td><td>Used for authentication into a workspace. System administrators can enforce and control authentication means of their users (e.g. multi-factor authentication).</td><td>Used by individual users to login with their social network account.</td></tr><tr><td>Security</td><td><p>Based on signed SAML messages which is more secure than the OAuth 2.0 social login.</p><p>SAML responses are digitally signed. They detect data manipulation in transit and can be encrypted if transport encryption (HTTPS) is insufficient.</p></td><td>Based on HTTP/HTTPS redirects only.</td></tr><tr><td>Purpose</td><td>SAML is a matter of both authentication and authorization. It verifies a user's identity and permissions in order to grant or deny the access to a given application.</td><td>Social login is a matter of authorization. It controls authorization to a protected resource such as an application or a set of files</td></tr></tbody></table>


# User authentication method

{% hint style="success" %}
**Access Type**: Users & Roles - Viewer

**Premium Feature**: SSO
{% endhint %}

The authentication method attribute for a user provides your organization with insight into how a user is authenticating into your Didomi console. In this article, we will cover the different values that can be populated in this column for a user in organizations who have enabled Single Sign-On (SSO).

View the authentication method attribute for a user by clicking **My organization** and selecting **Users & Roles** from the drop-down menu.

<figure><img src="/files/mngzzd7MePmxIwldllTf" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Users** tab is selected and navigate to a user on the list to view that user's authentication method.

<figure><img src="/files/X02qeukORXKB9fS8W4nY" alt="" width="563"><figcaption></figcaption></figure>

Refer to the following table for the different authentication methods that can be populated and suggested actions if necessary.

{% hint style="info" %}
New users added to your organization's Didomi account will be able to use SAML SSO exclusively to authenticate into your account.&#x20;
{% endhint %}

<table><thead><tr><th width="197">Authentication method</th><th>Description</th><th>Suggested action(s)</th></tr></thead><tbody><tr><td>SAML SSO</td><td>User is connecting to your organization's Didomi account via SSO</td><td>No action needed.</td></tr><tr><td>Email/Password</td><td>User is connecting to your organization's Didomi account using an email and password</td><td><p>Perform one the following actions:</p><p></p><ul><li>Delete user since they are not part of your enterprise</li><li>Keep the user and authorize their email domain in your organization's SSO configuration</li></ul></td></tr></tbody></table>


# Configure SAML SSO overview

{% hint style="success" %}
**Access Type**: Organization Settings - Editor

**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. In this article, we will provide a general overview for how to configure SSO using the SAML 2.0 standard protocol.&#x20;

* [SP-initiated vs IdP-initiated](#sp-initiated-vs-idp-initiated)
* [Retrieve SSO SAML identifiers](#retrieve-sso-saml-identifiers)
* [Configure identity provider](#configure-identity-provider)
* [Retrieve identity provider metadata](#retrieve-identity-provider-metadata)
* [Add identity provider metadata ](#add-identity-provider-metadata)
* [Test and complete SSO configuration](#test-and-complete-sso-configuration)

{% hint style="info" %}
For your convenience, Didomi offers dedicated resources for the following identity providers

* [Microsoft Entra ID](/organization-and-account-settings/single-sign-on-sso/microsoft-entra-id)
* [Google SSO](/organization-and-account-settings/single-sign-on-sso/google-sso)
* [Okta](/organization-and-account-settings/single-sign-on-sso/okta)
* [OneLogin](/organization-and-account-settings/single-sign-on-sso/onelogin)

If your organization's identity provider is not on the above list please continue with the instructions presented below.
{% endhint %}

***

### SP-initiated vs IdP-initiated

SSO can either be initiated from the Service Provider (SP-initiated SSO) or initiated from the Identity Provider (IdP-initiated SSO).

<table><thead><tr><th width="249">Initiation</th><th>Description</th></tr></thead><tbody><tr><td>SP-initiated SSO</td><td>Starts at the Service Provider (SP) when the user attempts access to a specific application.</td></tr><tr><td>IdP-initiated SSO</td><td>Starts at the Identity Provider (IdP) and is oftentimes a centralized dashboard or portal from which which the user selects the application to access.</td></tr></tbody></table>

The Didomi SAML SSO solution is SP-initiated. Ensure that this initiation is reflected accordingly in your organization's identity provider (i.e. your organization's IdP may ask you to provide this configuration).

### Retrieve SSO SAML identifiers

To start, your organization needs to retrieve the SSO SAML identifiers from the Didomi console to continue setup in your identity provider.

Click **My organization** and selecting **Single Sign-on** from the drop-down menu.

<figure><img src="/files/xYTfkcoJha4cIEPxiw4C" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the **Get your SSO SAML identifiers** step to record the following:

<table><thead><tr><th width="210">Identifiwer</th><th>Description</th></tr></thead><tbody><tr><td>Configured issuer</td><td>Your organization's identity provider's unique identifier within the Didomi console.</td></tr><tr><td>Login URL</td><td>Where user will be redirected after successful login on the identity provider.</td></tr><tr><td>Logout URL</td><td>Where user will be redirected after successful logout on the identity provider.</td></tr></tbody></table>

<figure><img src="/files/Ntpfh2tkie9RRqTgsLoD" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Configure identity provider

With your organization's copied SSO SAML identifiers from the Didomi console, navigate to your identity provider and input the values in the corresponding fields.

When finished, locate where your organization configures the email claim with the identity provider and configure the following:

{% hint style="warning" %}
**Note**: Configuring the email claim is a required step and your organization's SSO SAML configuration will not be complete if this step is not performed.
{% endhint %}

| Name        | *<http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress>* |
| ----------- | ---------------------------------------------------------------------- |
| Name format | URI Reference                                                          |
| Value       | user.email                                                             |

### Retrieve identity provider metadata

Once the configuration within the identity provider is complete, locate the following metadata and copy the values:

<table><thead><tr><th width="231">Metadata</th><th>Description</th></tr></thead><tbody><tr><td>X509 certificate</td><td>The SAML Signing Certificate from your identity provider in CER base64 format.</td></tr><tr><td>Login URL</td><td>Sign In (or login) URL from your identity provider.</td></tr><tr><td>Logout URL</td><td><p>Logout URL from your identity provider. </p><p></p><p><mark style="background-color:$warning;"><strong>Note</strong>: This field may be optional for some identity providers. In this case the Login URL will be used instead.</mark></p></td></tr></tbody></table>

### Add identity provider metadata

With the metadata from your identity provider copied, navigate back to the SSO configuration within the Didomi console and input those values in the provided fields for the **Setup SSO settings** step.

<figure><img src="/files/CVOXd09VnoRe3zbsJNSI" alt="" width="563"><figcaption></figcaption></figure>

Click **Continue** when finished.&#x20;

### Test and complete SSO configuration

Didomi will verify the identity provider metadata. When successful, utilize the **Domain(s)** field to add email domains to which the SAML authentication will be restricted (*i.e. only users whose emails have this domain will be allowed to login with SSO SAML*).&#x20;

{% hint style="warning" %}
For security, the domain added to the **Domain(s)** field must match the email domain of the user performing the configuration (e.g.  `didomi.io` can only be added if the user adding it is signed into the Didomi console using an `@didomi.io` email address.

To add more than one domain, please contact the Didomi support team via chat or email at <support@didomi.io>.
{% endhint %}

<figure><img src="/files/ob57E1LLIGN3HtBqgZWS" alt="" width="563"><figcaption></figcaption></figure>

Click **Save settings**.

When finished, follow your identity provider's instructions on managing a user's access to the Didomi console application.


# Microsoft Entra ID

{% hint style="success" %}
**Access Type**: Organization Settings - Editor

**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. In this article, we will cover how to configure SSO using the SAML 2.0 standard protocol with Microsoft Entra ID.

* [Resources](#resources)
* [Retrieve SSO SAML identifiers](#retrieve-sso-saml-identifiers)
* [Create Didomi console application in Microsoft Entra ID](#create-didomi-console-application-in-microsoft-entra-id)
* [Configure SSO for Didomi console application in Microsoft Entra ID](#configure-sso-for-didomi-console-application-in-microsoft-entra-id)
* [Retrieve Didomi console application metadata from Microsoft Entra ID](#retrieve-didomi-console-application-metadata-from-microsoft-entra-id)
* [Add Microsoft Entra ID metadata](#add-microsoft-entra-id-metadata)
* [Test and complete SSO configuration](#test-and-complete-sso-configuration)
* [Manage user and group access to Didomi console application](#manage-user-and-group-access-to-didomi-console-application)

***

### Resources

Please refer to the following Microsoft Entra ID documentation for additional information:

* [Microsoft Entra ID: Enable Single sign-on with SAML](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/add-application-portal-setup-sso#enable-single-sign-on)
* [Microsoft Entra ID: What is single sign-on in Microsoft Entra ID?](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/what-is-single-sign-on)

### Retrieve SSO SAML identifiers

To start, your organization needs to retrieve the SSO SAML identifiers from the Didomi console to continue setup in your identity provider.

Click **My organization** and selecting **Single Sign-on** from the drop-down menu.

<figure><img src="/files/xYTfkcoJha4cIEPxiw4C" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the **Get your SSO SAML identifiers** step to record the following:

<table><thead><tr><th width="210">Identifier</th><th>Description</th></tr></thead><tbody><tr><td>Configured issuer</td><td>Your organization's identity provider's unique identifier within the Didomi console.</td></tr><tr><td>Login URL</td><td>Where user will be redirected after successful login on the identity provider.</td></tr><tr><td>Logout URL</td><td>Where user will be redirected after successful logout on the identity provider.</td></tr></tbody></table>

<figure><img src="/files/Ntpfh2tkie9RRqTgsLoD" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Create Didomi console application in Microsoft Entra ID

Before configuring SSO your organization will need to add a Didomi console application in your Microsoft Entra ID account.&#x20;

1. Navigate to **Entra ID > Enterprise apps > All applications**.
2. Click **New application**.
3. From the creation page, select **Create your own application**.

Name your new application something recognizable as being for the Didomi console. This is where your organization will configure the SSO SAML.

### Configure SSO for Didomi console application in Microsoft Entra ID

From the newly created application for the Didomi console in Microsoft Entra ID, select **Single sign-on** on the left-hand menu.

Click **SAML** to open the SSO configuration page and navigate to **Basic SAML configuration** section and select **Edit**.

Use the provided fields to input the SSO SAML identifiers retrieved from the Didomi console.

| Microsoft Entra ID Field                   | Didomi console SSO SAML identifier |
| ------------------------------------------ | ---------------------------------- |
| Identifier (Entity ID)                     | Configured issuer                  |
| Reply URL (Assertion Consumer Service URL) | Login URL                          |
| Sign on URL                                | Login URL                          |
| Logout URL (Optional)                      | Logout URL                         |

<figure><img src="/files/ycIOGKDZ4zSoalS1X4Ck" alt=""><figcaption></figcaption></figure>

Click **Save** when finished.

### Retrieve Didomi console application metadata from Microsoft Entra ID

From the Didomi console application's SSO configuration page in Microsoft Entra ID, navigate to the **Set up \[Application Name]** section and record the **Login URL** and **Logout URL**.&#x20;

Next, navigate to the **SAML Certificates** section and download the **Certificate (Base64)**. The certificate will be downloaded to your local machine. Open the file and record its contents.

### Add Microsoft Entra ID metadata

With the metadata from Microsoft Entra ID copied, navigate back to the SSO configuration within the Didomi console and input those values in the provided fields for the **Setup SSO settings** step.

<table><thead><tr><th width="231">Metadata</th><th>Description</th></tr></thead><tbody><tr><td>X509 certificate</td><td>The SAML Signing Certificate from your Microsoft Entra ID in CER base64 format.</td></tr><tr><td>Login URL</td><td>Login URL from Microsoft Entra ID.</td></tr><tr><td>Logout URL</td><td>Logout URL Microsoft Entra ID. </td></tr></tbody></table>

{% hint style="warning" %}
**Note**: Before continuing onward, ensure all users who should have access to the Didomi console have their email addresses added to their profile.&#x20;
{% endhint %}

<figure><img src="/files/CVOXd09VnoRe3zbsJNSI" alt="" width="563"><figcaption></figcaption></figure>

### Test and complete SSO configuration

Didomi will verify the identity provider metadata. When successful, utilize the **Domain(s)** field to add email domains to which the SAML authentication will be restricted (*i.e. only users whose emails have this domain will be allowed to login with SSO SAML*).&#x20;

{% hint style="warning" %}
For security, the domain added to the **Domain(s)** field must match the email domain of the user performing the configuration (e.g.  `didomi.io` can only be added if the user adding it is signed into the Didomi console using an `@didomi.io` email address.

To add more than one domain, please contact the Didomi support team via chat or email at <support@didomi.io>.
{% endhint %}

<figure><img src="/files/ob57E1LLIGN3HtBqgZWS" alt="" width="563"><figcaption></figcaption></figure>

Click **Save settings**.

### Manage user and group access to Didomi console application

From the Microsoft Entra ID application for the Didomi console, click Users and groups  on the left-hand panel and use the subsequent page to manage which users in your organization has access to the Didomi console.


# Okta

{% hint style="success" %}
**Access Type**: Organization Settings - Editor

**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. In this article, we will cover how to configure SSO using the SAML 2.0 standard protocol with Okta.

* [Retrieve SSO SAML identifiers](#retrieve-sso-saml-identifiers)
* [Configure Didomi console integration in Okta](#create-didomi-console-integration-in-okta)
* [Retrieve Didomi console integration metadata from Okta](#retrieve-didomi-console-integration-metadata-from-okta)
* [Add Okta metadata](#add-okta-metadata)
* [Test and complete SSO configuration](#test-and-complete-sso-configuration)
* [Assign user access](#assign-user-access)

***

### Retrieve SSO SAML identifiers

To start, your organization needs to retrieve the SSO SAML identifiers from the Didomi console to continue setup in your identity provider.

Click **My organization** and selecting **Single Sign-on** from the drop-down menu.

<figure><img src="/files/xYTfkcoJha4cIEPxiw4C" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the **Get your SSO SAML identifiers** step to record the following:

<table><thead><tr><th width="210">Identifier</th><th>Description</th></tr></thead><tbody><tr><td>Configured issuer</td><td>Your organization's identity provider's unique identifier within the Didomi console.</td></tr><tr><td>Login URL</td><td>Where user will be redirected after successful login on the identity provider.</td></tr></tbody></table>

<figure><img src="/files/KU7Dro2xkp0PIXD94avg" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Configure Didomi console integration in Okta

Before configuring SSO your organization will need to add a Didomi console integration in your Okta account. From the Admin console of your Okta account:

1. Navigate to **Applications** > **Applications**.
2. Click on **Create App Integration**.
3. Select **SAML 2.0** in the **Sign-in method**.
4. Click **Next**.
5. In **App name,** enter a name your new application that is recognizable as being for the Didomi console (e.g. Didomi Console). This is where your organization will configure the SSO SAML.

Navigate to the **Configure SAML** section and enter the SSO SAML identifiers retrieved from the Didomi console in the appropriate fields:&#x20;

<table><thead><tr><th width="318">Okta SAML setting</th><th>Didomi console SSO SAML identifier</th></tr></thead><tbody><tr><td>Single sign-on URL</td><td>Login URL</td></tr><tr><td>Audience URI (SP Entity ID)</td><td>Configured issuer</td></tr></tbody></table>

Next, navigate to your integration's [attribute statements](https://help.okta.com/en-us/content/topics/apps/define-attribute-statements.htm) and configure the following:

{% hint style="warning" %}
**Note**: Your organization must configure the following attribute statement for the SSO configuration with Okta to be complete.
{% endhint %}

| Name        | *<http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress>* |
| ----------- | ---------------------------------------------------------------------- |
| Name format | URI Reference                                                          |
| Value       | user.email                                                             |

Continue with the configuration flow to create the Didomi console integration within Okta.

### Retrieve Didomi console integration metadata from Okta

When the Didomi console integration is created within Okta, navigate to the application from the Okta Admin console and click the **Sign On** tab. Record the values for the following fields (collectively Didomi refers to these values as metadata):

* Sign-On URL
* Issuer
* Signing Certificate

### Add Okta metadata

With the metadata from Okta copied, navigate back to the SSO configuration within the Didomi console and input those values in the provided fields for the **Setup SSO settings** step.

<table><thead><tr><th width="231">Didomi Metadata</th><th>Okta values</th></tr></thead><tbody><tr><td>X509 certificate</td><td>Signing Certificate</td></tr><tr><td>Login URL</td><td>Sign-On URL</td></tr><tr><td>Logout URL</td><td>Issuer</td></tr></tbody></table>

<figure><img src="/files/CVOXd09VnoRe3zbsJNSI" alt="" width="563"><figcaption></figcaption></figure>

### Test and complete SSO configuration

Didomi will verify the identity provider metadata. When successful, utilize the **Domain(s)** field to add email domains to which the SAML authentication will be restricted (*i.e. only users whose emails have this domain will be allowed to login with SSO SAML*).&#x20;

{% hint style="warning" %}
For security, the domain added to the **Domain(s)** field must match the email domain of the user performing the configuration (e.g.  `didomi.io` can only be added if the user adding it is signed into the Didomi console using an `@didomi.io` email address.

To add more than one domain, please contact the Didomi support team via chat or email at <support@didomi.io>.
{% endhint %}

<figure><img src="/files/ob57E1LLIGN3HtBqgZWS" alt="" width="563"><figcaption></figcaption></figure>

Click **Save settings**.

### Assign user access

Once the Didomi console SSO configuration is finished, your organization can manage a user's access to the Didomi console from the Okta Admin portal. Navigate to the Didomi console integration:

1. Click **Assignments**
2. **Click Assign > Assign to people**

Follow Okta instructions to assign user access.


# Google SSO

{% hint style="success" %}
**Access Type**: Organization Settings - Editor

**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. In this article, we will cover how to configure SSO using the SAML 2.0 standard protocol with Google.

* [Retrieve SSO SAML identifiers](#retrieve-sso-saml-identifiers)
* [Create Didomi console app in Google](#configure-didomi-console-app-in-google)
* [Retrieve Didomi console app metadata from Google](#retrieve-didomi-console-integration-metadata-from-google)
* [Add Didomi SSO SAML identifiers and attributes](#add-didomi-sso-saml-identifiers-and-attributes)
* [Add Google metadata](#add-google-metadata)
* [Test and complete SSO configuration](#test-and-complete-sso-configuration)
* [Enable Didomi console app SAML app in Google](#enable-didomi-console-app-saml-app-in-google)

***

### Retrieve SSO SAML identifiers

To start, your organization needs to retrieve the SSO SAML identifiers from the Didomi console to continue setup in your identity provider.

Click **My organization** and selecting **Single Sign-on** from the drop-down menu.

<figure><img src="/files/xYTfkcoJha4cIEPxiw4C" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the **Get your SSO SAML identifiers** step to record the following:

<table><thead><tr><th width="210">Identifier</th><th>Description</th></tr></thead><tbody><tr><td>Configured issuer</td><td>Your organization's identity provider's unique identifier within the Didomi console.</td></tr><tr><td>Login URL</td><td>Where user will be redirected after successful login on the identity provider.</td></tr></tbody></table>

<figure><img src="/files/KU7Dro2xkp0PIXD94avg" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Create Didomi console app in Google

Before configuring SSO your organization will need to add a Didomi console app in your Google account. While signed into your Google Admin console from a super administrator account:

1. Navigate to **Apps > Web and mobile apps**.
2. Click **Add app.**
3. Select **Add custom SAML app**.
4. In **app name,** enter a name for your new application that is recognizable as being for the Didomi console (e.g. Didomi Console). This is where your organization will configure the SSO SAML.
5. Click **Continue**.

### Retrieve Didomi console app metadata from Google

The **Google Identity Provider** details page will provide your organization with the following information the Didomi needs to configure SSO. Record the values for the following fields (collectively Didomi refers to these values as metadata):

* SSO URL
* X.509 certificate

Click **Continue** when finished.

### Add Didomi SSO SAML identifiers and attributes

From the **Service Provider Details** window, input the Didomi SSO SAML identifiers in the appropriate provided fields:

<table><thead><tr><th width="347">Google field</th><th>Didomi SSO SAML identifier</th></tr></thead><tbody><tr><td>Assertion Consumer Service (ACS) URL</td><td>Login URL</td></tr><tr><td>Entity ID</td><td>Configured issuer</td></tr></tbody></table>

Additionally, set the following configuration for the following fields:

<table data-header-hidden><thead><tr><th width="254"></th><th></th></tr></thead><tbody><tr><td>Name ID format</td><td>Email</td></tr><tr><td>Name ID value</td><td>Basic information > Primary email</td></tr></tbody></table>

Under **Attribute mapping**, click **Add another mapping** to map additional attributes.

1. From **Google Director attributes**, select **Primary Email**&#x20;
2. For **App attributes**: <http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress>
3. Click **Finish**.

### Add Google metadata

With the [metadata](#retrieve-didomi-console-app-metadata-from-google) from Google copied, navigate back to the SSO configuration within the Didomi console and input those values in the provided fields for the **Setup SSO settings** step.

<table><thead><tr><th width="299">Didomi metadata</th><th>Google values</th></tr></thead><tbody><tr><td>X509 certificate</td><td>X.509 certificate</td></tr><tr><td>Login URL</td><td>SSO URL</td></tr></tbody></table>

<figure><img src="/files/9RZkihrhnkCz3z17IuG4" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Test and complete SSO configuration

Didomi will verify the identity provider metadata. When successful, utilize the **Domain(s)** field to add email domains to which the SAML authentication will be restricted (*i.e. only users whose emails have this domain will be allowed to login with SSO SAML*).&#x20;

{% hint style="warning" %}
For security, the domain added to the **Domain(s)** field must match the email domain of the user performing the configuration (e.g.  `didomi.io` can only be added if the user adding it is signed into the Didomi console using an `@didomi.io` email address.

To add more than one domain, please contact the Didomi support team via chat or email at <support@didomi.io>.
{% endhint %}

<figure><img src="/files/ob57E1LLIGN3HtBqgZWS" alt="" width="563"><figcaption></figcaption></figure>

Click **Save settings**. Once enabled, it may take up to 24 hours for the configuration to be in effect.

### Enable Didomi console app SAML app in Google

Once the SSO configuration is complete and tested, your organization can manage access to the Didomi console by performing the following:

1. Navigate to **Apps > Web and mobile apps**.
2. Select the Didomi console app
3. Click **User access**.

Follow Google instructions on managing access.


# OneLogin

{% hint style="success" %}
**Access Type**: Organization Settings - Editor

**Premium Feature**: SSO
{% endhint %}

Single Sign-On (SSO) is an authentication process that allows users to access multiple applications or systems with one set of login credentials. In this article, we will cover how to configure SSO using the SAML 2.0 standard protocol with OneLogin.

* [Retrieve SSO SAML identifiers](#retrieve-sso-saml-identifiers)
* [Create Didomi console app in OneLogin](#create-didomi-console-app-in-onelogin)
* [Configure Didomi console app in OneLogin](#configure-didomi-console-app-in-onelogin)
* [Retrieve OneLogin metadata](#retrieve-onelogin-metadata)
* [Add OneLogin metadata](#add-onelogin-metadata)
* [Test and complete SSO configuration](#test-and-complete-sso-configuration)
* [Assign user access](#assign-user-access)

***

### Retrieve SSO SAML identifiers

To start, your organization needs to retrieve the SSO SAML identifiers from the Didomi console to continue setup in your identity provider.

Click **My organization** and selecting **Single Sign-on** from the drop-down menu.

<figure><img src="/files/xYTfkcoJha4cIEPxiw4C" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the **Get your SSO SAML identifiers** step to record the following:

<table><thead><tr><th width="210">Identifier</th><th>Description</th></tr></thead><tbody><tr><td>Configured issuer</td><td>Your organization's identity provider's unique identifier within the Didomi console.</td></tr><tr><td>Login URL</td><td>Where user will be redirected after successful login on the identity provider.</td></tr><tr><td>Logout URL</td><td>Where user will be redirected after successful logout on the identity provider.</td></tr></tbody></table>

<figure><img src="/files/Ntpfh2tkie9RRqTgsLoD" alt="" width="375"><figcaption></figcaption></figure>

Click **Continue** when finished.

### Create Didomi console app in OneLogin

Navigate to the **Administration** section of your organization's OneLogin portal and navigate to the following:

1. Select **Applications > Applications**.
2. Click **Add App**.
3. Search for **SAML Custom Connector (Advanced)** and select it from the list.
4. For the **Display Name** field, enter a name for your new application that is recognizable as being for the Didomi console (e.g. Didomi Console). This is where your organization will configure the SSO SAML.&#x20;
5. Click **Save** when finished.

A new app will be created in your OneLogin account.&#x20;

### Configure Didomi console app in OneLogin

From your newly created Didomi console app in One Login, navigate to the **Configuration** tab on the left-hand panel.

Use the provided fields to input the following values:

{% hint style="info" %}
Some values are retrieved from the [Didomi SSO SAML identifiers](#retrieve-sso-saml-identifiers).
{% endhint %}

<table><thead><tr><th width="272">OneLogin field</th><th>Values</th></tr></thead><tbody><tr><td>Audience (EntityID)</td><td>Configured issuer</td></tr><tr><td>ACS (Consumer) URL Validator</td><td><em>[-a-zA-Z0-9@:%.\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%\+.~#?&#x26;//=]*)</em></td></tr><tr><td>ACS (Consumer) URL</td><td>Login URL</td></tr><tr><td>Single Logout URL</td><td>Logout URL</td></tr><tr><td>SAML initiator</td><td>Service Provider</td></tr></tbody></table>

<figure><img src="/files/uu0m9gIyYiqOnF04wu1R" alt="" width="563"><figcaption></figcaption></figure>

Next, click **Parameters** from the left-hand panel and click **+** inline with the **SAML Custom Connector (Advanced Field)** header.&#x20;

<figure><img src="/files/P08JqpVfTo6yxACPEnVi" alt="" width="563"><figcaption></figcaption></figure>

In the subsequent modal:

1. Input `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` in the **Field name** field.
2. Select **Email** in the **Value** field.
3. Enable the checkbox for **Include in SAML assertion** and click **Save**.

<figure><img src="/files/CrUg2qhWo4E1QXAJHsIp" alt="" width="375"><figcaption></figcaption></figure>

### Retrieve OneLogin metadata

From your newly created Didomi console app in One Login, navigate to the **SSO** tab on the left-hand panel. Record the values for the following fields (collectively Didomi refers to these values as metadata):

* X.509 Certificate (under **View Details**)
* SAML 2.0 Endpoint (HTTP)
* SLO Endpoint (HTTP)

<figure><img src="/files/DyAttl3YnJlpE96nC5jQ" alt="" width="563"><figcaption></figcaption></figure>

### Add OneLogin metadata

With the metadata from OneLogin copied, navigate back to the SSO configuration within the Didomi console and input those values in the provided fields for the **Setup SSO settings** step.

<table><thead><tr><th width="299">Didomi metadata</th><th>Google values</th></tr></thead><tbody><tr><td>X509 certificate</td><td>X.509 certificate</td></tr><tr><td>Login URL</td><td>SAML 2.0 Endpoint (HTTP)</td></tr><tr><td>Logout URL</td><td>SLO Endpoint (HTTP)</td></tr></tbody></table>

<figure><img src="/files/CVOXd09VnoRe3zbsJNSI" alt="" width="563"><figcaption></figcaption></figure>

### Test and complete SSO configuration

Didomi will verify the identity provider metadata. When successful, utilize the **Domain(s)** field to add email domains to which the SAML authentication will be restricted (*i.e. only users whose emails have this domain will be allowed to login with SSO SAML*).&#x20;

{% hint style="warning" %}
For security, the domain added to the **Domain(s)** field must match the email domain of the user performing the configuration (e.g.  `didomi.io` can only be added if the user adding it is signed into the Didomi console using an `@didomi.io` email address.

To add more than one domain, please contact the Didomi support team via chat or email at <support@didomi.io>.
{% endhint %}

<figure><img src="/files/ob57E1LLIGN3HtBqgZWS" alt="" width="563"><figcaption></figcaption></figure>

Click **Save settings**.

### Assign user access

Navigate to the **Administration** section of your organization's OneLogin portal and navigate to **Users > Users**.

Follow the instructions to assign users to the Didomi console application created in OneLogin.


# Widget authentication

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

Widget authentication refers to the provider/method used to authenticate an end-user in the Didomi consents API so that Didomi can successfully display, set and retrieve the end-user's record. In this article, we will cover:

* [Widget authentication providers](#widget-authentication-providers)
* [Configure default authentication providers](#configure-default-authentication-providers)

### Widget authentication providers

Refer to the tabs below for more information on the available providers/methods your organization can select as the default for your preferences and privacy request widgets.

{% tabs %}
{% tab title="One-Time Password (OTP)" %}
The One-Time Password authentication method sends the end-user an email with a 6-digit code that must be entered into the widget in order to successfully log in.

{% hint style="info" %}
Organization accounts created after July 4, 2023 will have One-Time Password (OTP) configured as the default widget authentication provider
{% endhint %}

<figure><img src="/files/zUemSII8ZqbzmX4FqZio" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Magic Link" %}
The Magic Link authentication method sends the end-user an email containing a link that will grant them access to the widget.

{% hint style="info" %}
Organization accounts created before July 4, 2023 will have Magic Link configured as the default widget authentication provider
{% endhint %}

<figure><img src="/files/rn65KzfN9PMEsUJtDVe7" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

{% hint style="info" %}
While not available via the Didomi console, your organization also has the option to use server authentication as the widget authentication provider to authenticate end-users from your backend to create a more seamless experience. This provider option is only available via the Didomi  API. [Click here](mailto:undefined) for more information.
{% endhint %}

### Configure default authentication providers

In this section, we will cover how to configure/change the default widget authentication provider used for all of your preferences and privacy request widgets via the Didomi console.

{% hint style="warning" %}
**Note**: Widget authentication providers can be set on a per widget basis via the Didomi API. [Click here](https://developers.didomi.io/api-and-platform/widgets/privacy-widgets/authentication/manage-authentication-providers#manage-authentication-within-a-widget) for more information.
{% endhint %}

Click **My organization** in the header and select **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Click the **Widget Authentication** tab.

<figure><img src="/files/LpMOCY3b2MDzYFYdyhp3" alt="" width="563"><figcaption></figcaption></figure>

Use the provided cards to select between **One-Time Password** or **Magic Link** as the default widget authentication provider.

Click **Save** when finished.

<figure><img src="/files/bCT27evQwdrQG6H2p7SO" alt="" width="563"><figcaption></figcaption></figure>

Confirm your selection in the subsequent modal and click **Yes, continue**.

<figure><img src="/files/uKHmORv0rCOOmyXOPD8c" alt="" width="361"><figcaption></figcaption></figure>


# Domains

The Didomi Web SDK, including its assets (Javascript files, images, etc...) and API requests, rely on the `privacy-center.org` domain to load a consent notice, preferences widget and/or privacy request widget by default.&#x20;

As an alternative to relying on the default Didomi domain to serve these assets your organization can configure a custom domain to load the SDK and its assets. Some benefits of configuring a custom domain to serve the Didomi SDK include:

* Share consent across domains
* Prevent adblockers from blocking the Didomi SDK&#x20;
* Ensures Didomi does not appear as a third-party on your websites

### Custom domain configurations

Didomi offers your organization two different solutions to configure your custom domains:

> [Domain delegation relying on Didomi infrastructure](https://developers.didomi.io/api-and-platform/domains/domain-delegation)
>
> [Reverse proxy relying on your organization's infrastructure](https://developers.didomi.io/api-and-platform/domains/reverse-proxy)

{% hint style="info" %}
Only custom domains configured using domain delegation is available directly via the Didomi console. The articles in this section cover how to create and manage custom domains from the Didomi console using domain delegation method.
{% endhint %}

Refer to the table below for additional information for all domain options available to your organization:

<table><thead><tr><th width="173"></th><th>Default (privacy-center.org)</th><th>NS delegation (subdomain)</th><th>Reverse proxy (subdomain)</th><th>Reverse proxy (main domain)</th></tr></thead><tbody><tr><td>Increased adblocker resilience</td><td><span data-gb-custom-inline data-tag="emoji" data-code="274c">❌</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Safari ITP</td><td>Cookie maintained for 7 days</td><td>Cookie maintained for 7 days</td><td>Cookie maintained for 7 days</td><td>Cookie maintained for 7 days</td></tr><tr><td>Implementation complexity</td><td>Low</td><td>Low - NS record only</td><td>High - requires reverse proxy setup</td><td>High - requires reverse proxy setup and path transformation</td></tr><tr><td>Recommendation</td><td>Low budget, non-technical teams or non-critical setups</td><td>Low budget, non-technical teams or non-critical setups</td><td>Technical teams with strong infra  and allows for subdomain branding</td><td>Technical teams with strong infra and adblocker concerns</td></tr></tbody></table>


# Domain status glossary

{% hint style="success" %}
**Access Type:** Domains - Viewer or Editor
{% endhint %}

In this article, we will cover how the various status your organization's custom domain(s) can have within the Didomi platform.&#x20;

The status of your organization's custom domain(s) can be viewed within the Didomi console by clicking **My organization** and selecting **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Domains** tab is selected. Your organization's custom domain(s) is listed on the page along with the status for that domain.

<figure><img src="/files/3c1ng6B7YiuOXWciiASD" alt="" width="563"><figcaption></figcaption></figure>

<table><thead><tr><th width="151">Status</th><th>Description</th></tr></thead><tbody><tr><td>Draft</td><td>Process of creating a custom domain started. DNS records not created or propagated yet. Custom domain can be edited or deleted.</td></tr><tr><td>Verifying</td><td>Custom domain has been submitted and is currently being verified by Didomi.</td></tr><tr><td>Deleting</td><td>A temporary status as Didomi processes the deletion of the custom domain.</td></tr><tr><td>Failed</td><td>Didomi failed to verify and create the submitted custom domain. Some reasons for failure can include a processing error within the Didomi platform or the DNS records have not propagated yet.<br><br>Your organization can resubmit the custom domain.</td></tr><tr><td>Ready</td><td>Custom domain successfully verified and created.</td></tr></tbody></table>


# Domain usage

{% hint style="success" %}
**Access Type:** Domains - Editor
{% endhint %}

For every custom domain  added to the Didomi platform, your organization must specify how the domain will be used. In this article we will provide an overview of the the usage that can be assigned to the custom domain.

* [Serve a hosted page](#serve-a-hosted-page)
* [Serve the Didomi SDK](#serve-the-didomi-sdk)

<figure><img src="/files/G4gDoSyGg8I9PLybgKwa" alt="" width="563"><figcaption></figcaption></figure>

{% tabs %}
{% tab title="Serve a hosted page" %}
For custom domains whose usage is to serve a hosted, the custom domain will be used to load a webpage (e.g. preference center). Some characteristics of the serve a hosted page usage designation is:

* Can only be linked to one widget
* Custom domain must be detached from its widget before it can be deleted
* Can only be used by one widget at a time
* The custom domain's URL is used by the end-user to access the widget
  {% endtab %}

{% tab title="Serve the Didomi SDK" %}
For custom domains whose usage is to serve the Didomi SDK, the custom domain will be used to load the Didomi SDK. Some characteristics of the serve Didomi SDK usage designation is:

* Not linked to any widget or notice
* Can be used for consent notices, preferences widgets, and privacy request widgets
* A custom domain can load several products at once
* Custom domain is included in the implementation snippet used to load and display the widget/notice
  {% endtab %}
  {% endtabs %}

For your convenience, Didomi has compiled the differences between custom domain usage in the table below:

<table><thead><tr><th></th><th data-type="checkbox">Serve a hosted page</th><th data-type="checkbox">Serve Didomi SDK</th></tr></thead><tbody><tr><td>Loads Didomi SDK (CMP, PMP, Privacy requests)</td><td>false</td><td>true</td></tr><tr><td>Loads preference center or privacy request UI</td><td>true</td><td>false</td></tr><tr><td>NS record validation required</td><td>true</td><td>true</td></tr><tr><td>Reused across products</td><td>false</td><td>true</td></tr><tr><td>Tied to a widget</td><td>true</td><td>false</td></tr><tr><td>Allow bots to crawl across domain</td><td>true</td><td>true</td></tr><tr><td>Detach widget before deletion</td><td>true</td><td>false</td></tr></tbody></table>


# Create custom domain

{% hint style="success" %}
**Access Type:** Domains - Editor
{% endhint %}

Configuring a custom domain allows your organization to load the Didomi SDK and its assets from that domain or host a webpage (e.g. preference center) from that domain. In this article, we will cover how to create a custom domain using the [domain delegation method](/organization-and-account-settings/domains#custom-domain-configurations) from the Didomi console.&#x20;

Click **My organization** in the header and select **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Domains** tab is selected and click **Add a domain +**.

<figure><img src="/files/CJFraEeuWdKR7VeKFIqS" alt="" width="563"><figcaption></figcaption></figure>

Follow the steps on the subsequent page to perform the following

<table><thead><tr><th width="40" data-type="number"></th><th width="171">Step</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>Register a domain name</td><td>Use the provided field to enter the name of the custom domain being added. </td></tr><tr><td>2</td><td>Specify how the domain will be used</td><td><p>Choose whether the custom domain will be used to serve the Didomi SDK or a hosted webpage (e.g. preference center) from the drop-down menu. <a href="/pages/z7AgudDBzPfiw4tUstQc">Click here</a> for more information on domain usage.</p><p></p><p>Additionally, use the toggle to choose whether to allow bots to index the custom domain. </p></td></tr><tr><td>3</td><td>Create a NS record</td><td>Provides the values needed to create the NS records with your organization's DNS provider for the custom domain. <br><br><mark style="background-color:$warning;"><strong>Note</strong>: The DNS must be fully propagated before submitting your custom domain. A modal will ask your organization to confirm the propagation. If the records are not created and/or fully propagated yet, then your custom domain will be saved with a <strong>Draft</strong></mark> <a href="/pages/RyyBz2zsOwLXgZ0I58r4"><mark style="background-color:$warning;">status</mark></a><mark style="background-color:$warning;">.</mark></td></tr><tr><td>4</td><td>Submit your domain</td><td>Submit custom domain for verifcation and provisioning</td></tr><tr><td>5</td><td>Domain verification</td><td>Indicates that Didomi has received the request for the creation of the new custom domain. Verification can take up to 72 hours.</td></tr></tbody></table>

<figure><img src="/files/cS1hNJOmAX2G46HLC9Ex" alt="" width="563"><figcaption></figcaption></figure>


# Edit custom domain

{% hint style="success" %}
**Access Type:** Domains - Editor
{% endhint %}

Configuring a custom domain allows your organization to load the Didomi SDK and its assets from that domain or host a webpage (e.g. preference center) from that domain. In this article, we will cover how to edit a custom domain using the [domain delegation](/organization-and-account-settings/domains) method from the Didomi console.

{% hint style="info" %}
Only custom domains with a[ **Draft** status](/organization-and-account-settings/domains/domain-status-glossary) can be edited.
{% endhint %}

Click **My organization** in the header and select **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Domains** tab is selected and navigate to a custom domain on the subsequent list with a **Draft** status.

Click the **Edit** icon inline with the custom domain.

<figure><img src="/files/aYvc6WCXRj905So4NAh7" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent page to edit your custom domain and/or submit it to Didomi for verification.


# Retry failed custom domain

{% hint style="success" %}
**Access Type:** Domains - Editor
{% endhint %}

When your organization submits a custom domain, Didomi will verify that the correct NS records are correctly configured before provisioning in Amazon Web Services (AWS). In instances where verification fails Didomi will change the [domain status](/organization-and-account-settings/domains/domain-status-glossary) to **Failed**. Some reasons for a custom domain failing verification include:

* DNS records not propagated yet
* Didomi processing error

In this article, we will cover how to resubmit a custom domain after it has failed verification.

{% hint style="info" %}
Ensure that the DNS have fully propagated before resubmitting the custom domain. Your organization can utilize a tool such as [DNS Checker](https://dnschecker.org/#NS) to check for propagation.
{% endhint %}

Click **My organization** and select **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Domains** tab is selected and navigate to a custom domain on the subsequent list with a **Failed** status.

<figure><img src="/files/pVEBo40ZBSS9xAC241Tc" alt="" width="563"><figcaption></figcaption></figure>

Click the **relaunch** icon inline with the custom domain.

<figure><img src="/files/qkg4ju5YotgBnkb3L7o6" alt="" width="563"><figcaption></figcaption></figure>

Confirm that your DNS records are created and fully propagated in the subsequent modal and click **Yes** to continue.

<figure><img src="/files/HziVSev9cAZdZokXT9d0" alt="" width="343"><figcaption></figcaption></figure>

Didomi will attempt to verify and create your custom domain again.


# Delete custom domain

{% hint style="success" %}
**Access Type:** Domains - Editor
{% endhint %}

In this article, we will cover how to delete a custom domain from your organization's account via the Didomi console. The steps involved in deleting a custom domain differ slightly depending on whether the [usage for the custom domain](/organization-and-account-settings/domains/domain-usage) is for serving the Didomi SDK or serving a hosted page.

{% hint style="info" %}
Only custom domains with a **Ready**, **Draft,** or **Failed** status can be deleted.
{% endhint %}

Click **My organization** in the header and select **Organization settings** from the drop-down menu.

<figure><img src="/files/FCHJab40y4bwexB9nEGt" alt="" width="563"><figcaption></figcaption></figure>

Ensure the **Domains** tab is selected and navigate to a custom domain on the subsequent list with a **Ready**, **Draft**, or **Failed** status.

Click the **Delete** icon inline with the custom domain.

<figure><img src="/files/zDCaXqVhpkCCcv1MmQV1" alt="" width="563"><figcaption></figcaption></figure>

<table><thead><tr><th width="219">Usage</th><th>Deletion requirements</th></tr></thead><tbody><tr><td>Serve a hosted page</td><td>Detach the custom domain from the widget before proceeding with the deletion.</td></tr><tr><td>Serve the Didomi SDK</td><td>No deletion requirements.</td></tr></tbody></table>


# Users and roles

Controlling how members of your organization access features in your Didomi account is managed via your users and roles configuration.&#x20;

Each role created in your account is a collection of access types on a per feature basis which is then assigned to individual users.

<figure><img src="/files/gNz66EBSVT7366enjEaP" alt=""><figcaption></figcaption></figure>


# Add new user

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

Users added to your organization will be able to perform actions within your account based on the role assigned to that user. In this article, we will cover how to add a new user to your organization.

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Click **Invite a user +** on the subsequent page.&#x20;

<figure><img src="/files/QuldJnYAL3Pu4yCB4o2e" alt="" width="563"><figcaption></figcaption></figure>

Use the modal to input the following for the new user:

* Email Address
* Name
* Role

{% hint style="info" %}
Users can only be assigned one role within your organization. [Click here](/organization-and-account-settings/users-and-roles/create-new-role) to learn more about creating and managing roles.
{% endhint %}

Click **Send Invitation** when finished.&#x20;

<figure><img src="/files/tnQoSDzh5z0dtfFmmZEe" alt="" width="375"><figcaption></figcaption></figure>

An automated email will be delivered to the new user which will enable to create a user account.

<figure><img src="/files/rWrWU4EI4R9Zkvqh62oz" alt="" width="375"><figcaption></figcaption></figure>


# Edit user's role

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

Users within your organization will be able to perform actions within your account based on the roles assigned to that user. In this article, we will cover how to edit the role assigned to a user within your organization.

{% hint style="info" %}
Please note that users can only be assigned one role within your organization. [Click here](/organization-and-account-settings/users-and-roles/create-new-role) to learn more about creating and managing roles.
{% endhint %}

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a user on the user list and click the **Edit** icon inline with the user's name.

<figure><img src="/files/dkwhozW1Vw1Nc23EY9pN" alt="" width="563"><figcaption></figcaption></figure>

In the subsequent modal, navigate to the **Role** field and use the dropdown menu to assign a previously configured role to the user. Click **Apply Changes** when finished.

<figure><img src="/files/FI6njvldwRriod8zVOGL" alt="" width="375"><figcaption></figcaption></figure>

The user's role will be updated to the newly assigned role.


# Delete user

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

Deleted users will no longer have any access to your Didomi account. In this article, we will cover how to delete a user within your organization.&#x20;

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a user on the user list and click the **Delete** icon inline with the user's name.

<figure><img src="/files/DrAQhG75VowrqJH7lvrX" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the user in the subsequent modal and click **Delete user**.

<figure><img src="/files/jNBkiE4vlxsuVLoSPFlo" alt="" width="300"><figcaption></figcaption></figure>

The user will be deleted from your organization's Didomi account.


# Access type overview

[Roles](/organization-and-account-settings/users-and-roles/create-new-role) in your organization are primarily defined by the access types configured for them which dictate the level of access that role has per feature within you Didomi account. In this article, we will cover:

* [Access types](#access-types)
* [Access types per feature](#access-types-per-feature)
* [Admin role](#admin-role)

{% hint style="info" %}
We encourage your organization to consider how individual users and teams within your organization will utilize the Didomi platform before assigning access types to different roles.
{% endhint %}

***

### Access types

There are three possible access types that can be granted for a feature.&#x20;

{% hint style="info" %}
Not every feature will include all three access types. Please refer to [Access types per feature](#access-types-per-feature) for more information.
{% endhint %}

<table data-full-width="false"><thead><tr><th width="216.2666015625">Access Type</th><th>Description</th></tr></thead><tbody><tr><td>No Access</td><td>The role has no access to the feature. The feature's components will be hidden from any user assigned to the role.</td></tr><tr><td>Viewer</td><td>The role can navigate to the feature and view most of the components associated with the feature. The role will be unable to create, edit, or otherwise manage components in the feature. </td></tr><tr><td>Editor</td><td>The role can create, edit, and/or delete components in the feature.</td></tr></tbody></table>

### Access types per feature

Review the table before to see the available access types on a per feature basis:

<table><thead><tr><th width="258.86669921875">Feature</th><th data-type="checkbox">No Access</th><th data-type="checkbox">Viewer</th><th data-type="checkbox">Editor</th></tr></thead><tbody><tr><td>Organization Settings</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Users &#x26; Roles</td><td>true</td><td>true</td><td>false</td></tr><tr><td>Data Manager</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Consent Notices</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Analytics</td><td>true</td><td>true</td><td>false</td></tr><tr><td>Notice Versions</td><td>true</td><td>true</td><td>false</td></tr><tr><td>Consent Proof Reports</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Compliance Report</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Domains</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Branding</td><td>true</td><td>true</td><td>true</td></tr><tr><td>Widgets</td><td>true</td><td>true</td><td>true</td></tr></tbody></table>

### Admin role

Every Didomi account comes pre-populated with an Admin role that can not be edited nor deleted. In addition to having editor access to all features in your Didomi account, the Admin role also allows an assigned user to:

* Invite, edit, and delete users
* Create, edit, and delete roles
* Granted automatic editor access to new features released by Didomi
* Granted automatic editor access to new premium features by Didomi (if organization subscribes to premium feature)


# Create new role

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

A role is a customizable collection of permissions that dictate what kind of access a user has across Didomi product and features. In this article, we will cover how to create a new role in your organization's account so that it can be assigned to other users.&#x20;

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Select the **Roles** tab and click the **Create a role +** button.

<figure><img src="/files/5Zqdxz0sH4LvcQm3misL" alt="" width="563"><figcaption></figcaption></figure>

On the subsequent page, give the new role a name and an optional description.&#x20;

<figure><img src="/files/dgIPd6wdnyuNS38EvOms" alt="" width="563"><figcaption></figcaption></figure>

Next, navigate to the feature cards and use the provided drop-down menu to select the role's access type for that feature. Possible access types include:

* No Access
* Viewer
* Editor

{% hint style="info" %}
Every Didomi account comes pre-populated with an non-editable Admin role. [Click here](/organization-and-account-settings/users-and-roles/access-type-overview) for more information on the Admin role and/or the access types assignable to a role.&#x20;
{% endhint %}

Click **Save & Close** when finished.

<figure><img src="/files/XqpuaXeZo3OxdzYFiP4T" alt="" width="563"><figcaption></figcaption></figure>

The new role is created and can be assigned to users in your organization's account.


# Edit role

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

A role is a customizable collection of permissions that dictate what kind of access a user has across Didomi product and features. In this article, we will cover how to edit an existing role in your organization's account.

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Select the **Roles** tab and navigate to a role on the list. Click the **Edit** icon inline with the role name.

<figure><img src="/files/HvSvFYbNPcct7BJS3cnv" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent page to edit the role's name, description, and/or access type to features in your organization's Didomi account. Click **Save & Exit** when finished.

<figure><img src="/files/WNbt6lAWoLaPFmkYoohJ" alt="" width="563"><figcaption></figcaption></figure>


# Duplicate a role

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

A role is a customizable collection of permissions that dictate what kind of access a user has across Didomi product and features. In this article, we will cover how to duplicate a role in your organization's account.

{% hint style="info" %}
Duplicating a role can streamline the process to create a new role, especially if there are only minor differences between the original role and the duplicated role.
{% endhint %}

Click **My Organization** and select **Users & Roles** from the drop-down menu.&#x20;

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Select the **Roles** tab and navigate to a role on the list. Click the **Duplicate** icon inline with the role name.

<figure><img src="/files/0piHGuoHknLgS6WUpNSK" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent screen to give your duplicated role a name. By default, Didomi will append *copy* to the original name of the role unless otherwise edited. Click **Create role** when finished.&#x20;

<figure><img src="/files/6ArINXGrH6Jjjd4eJNhY" alt="" width="375"><figcaption></figcaption></figure>

The duplicated role will be created. If necessary, click the **Edit** inline with the duplicated role to edit the description and access types for the role.


# Delete role

{% hint style="success" %}
**Access Type**: Admin
{% endhint %}

In this article, we will cover how to delete an existing role in your organization's account.

{% hint style="info" %}
Please note that a role assigned to a user is ineligible for deletion. Reassign users to a new role before continuing with the deletion of a role. [Click here](/organization-and-account-settings/users-and-roles/edit-users-role) for more information on how to edit a user's role.
{% endhint %}

<figure><img src="/files/8A54wzGcCrSYSC3frwmW" alt="" width="563"><figcaption></figcaption></figure>

Select the **Roles** tab and navigate to a role on the list. Click the **Delete** icon inline with the role name.

<figure><img src="/files/UINhrUOmfsDL7vhZUpBE" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the role in the subsequent modal and click **Delete role**.

<figure><img src="/files/nUGGb6PmBjjGTjmwAUXn" alt="" width="297"><figcaption></figcaption></figure>

The role will be deleted from your organization's Didomi account.


# API keys

Didomi supports two different types of API keys for the following use cases:

<table><thead><tr><th width="194.9000244140625">Key</th><th>Description</th></tr></thead><tbody><tr><td>Public API key</td><td>A single API key assigned to your organization's Didomi account and used to deploy all of your consent notices, PMP widgets, DSAR widgets, etc.. across different applications and websites.</td></tr><tr><td>Private API key</td><td>Generated by your organization as needed to enable back-end applications to access the Didomi API.</td></tr></tbody></table>


# Retrieve public API key

{% hint style="success" %}
**Access Type**: Available to all users
{% endhint %}

The Didomi public API key is primarily used to integrate Didomi SDKs into an organization's applications and websites. Your organization has a single public API key that can be used to deploy all of your consent notices, PMP widgets, DSAR widgets, etc.. across different applications and websites. In this article, we will cover how to retrieve your organization's public API key.

Click **My Organization** and select **Copy Public API key** from the drop-down menu.&#x20;

<figure><img src="/files/vBJ518Z9SLNuNWEteNyy" alt="" width="563"><figcaption></figcaption></figure>

Your organization's public API key will be copied to your clipboard.&#x20;


# Create new private API key

{% hint style="success" %}
**Access Type:** Organization Settings - Editor
{% endhint %}

Private API keys are generated by your organization and enable your back-end applications to access the Didomi API. In this article, we will cover how to generate a new private API key.

{% hint style="info" %}
[Click here](https://developers.didomi.io/api-and-platform/introduction) to learn more about Didomi APIs.
{% endhint %}

Click **My Organization** and select **Private API key** from the drop-down menu.&#x20;

<figure><img src="/files/M0mnr3lBoYGN28VeAKjY" alt="" width="563"><figcaption></figcaption></figure>

Click **Add a new Private API Key**.

<figure><img src="/files/c2JJnWo6Kwoq6FMHNyDA" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to create a new private API key in the modal and click **Generate a new key**.

<figure><img src="/files/mCyizUMQzLekXhkhqr5w" alt="" width="358"><figcaption></figcaption></figure>

The subsequent modal will display the API key and API Key Secret.

{% hint style="warning" %}
**Note**: This is the only time the API Key Secret will be revealed.&#x20;
{% endhint %}

<figure><img src="/files/3UG2Pw3mrgT189jyZMQ3" alt="" width="375"><figcaption></figcaption></figure>


# Delete private API key

{% hint style="success" %}
**Access Type:** Organization Settings - Editor
{% endhint %}

Private API keys are generated by your organization and enable your back-end applications to access the Didomi API. In this article, we will cover how to delete an existing private API key from your organization's account.

{% hint style="info" %}
Deleting a private API key is not the same as disabling the API key (something done via API). Once deleted, the private API key will no longer appear anywhere in your Didomi account.
{% endhint %}

Click **My Organization** and select **Private API key** from the drop-down menu.&#x20;

<figure><img src="/files/M0mnr3lBoYGN28VeAKjY" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a private API key and click the **Delete** icon inline with private API key ID.&#x20;

<figure><img src="/files/UBSPGPTUTyISxO4P0aCf" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the private API key from your organization's Didomi account in the subsequent modal and click **Delete**.

<figure><img src="/files/lkLhmzejwyx3Em6gYH6f" alt="" width="357"><figcaption></figcaption></figure>


# Purposes

A purpose describes the reason your organization or its vendors is collecting the end-user's data and how your organization processes that data. By default, Didomi organizes purposes into three groups:

* [IAB purposes](#iab-purposes)
* [Global purposes](#global-purposes)
* [Custom purposes](#custom-purposes)

In this article, we will provide an overview of the three purpose groups, default configurations, etc...

View purposes configured in your Didomi account by clicking **Data Manager** on the left-hand panel and ensure the **Purposes** tab is selected on the subsequent page.&#x20;

<figure><img src="/files/hQmhgwNLvVyUKvvuzXNE" alt="" width="563"><figcaption></figcaption></figure>

Use the purposes filter to select the type of purpose your organization wishes to view. The list will automatically repopulate based on the selection.

<figure><img src="/files/uAbynYrknWkzCUQHT6Lx" alt="" width="563"><figcaption></figcaption></figure>

Each purpose will have the following attributes:

<table><thead><tr><th width="203">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>Name</td><td>Name of the purpose</td></tr><tr><td>Description</td><td>Describes the reason your organization is collecting personal data from end-users</td></tr><tr><td>Type</td><td>Indicates whether purpose collects information that is deemed Sensitive Personal Information (SPI)</td></tr><tr><td>SDK ID</td><td>A configurable ID used solely for migrating existing consent notices from JSON configurations. Once configured, Didomi will force set the SDK ID of the purpose to an ID in your JSON configuration</td></tr><tr><td>Purpose ID (API)</td><td>Immutable ID assigned to the purpose that will be used to identify the purpose in API requests</td></tr><tr><td>Regulation settings</td><td>Indicates the regulatory frameworks to which the purpose applies. Once the purpose is mapped to a vendor, the purpose will populate in the consent notice for each regulation so the end-user can grant or deny consent for the vendor's data processing.</td></tr><tr><td>Translation(s)</td><td>Language(s) into which the purpose title and description have been translated</td></tr></tbody></table>

***

### IAB purposes

Your organization's Didomi account comes pre-configured with purposes that have been defined by the IAB to be used for the Transparency and Consent Framework (TCF). The TCF is a set of technical specifications that is voluntarily adhered to by publishers, advertisers, and other technology partners to help them comply with the EU's General Data Protection Regulation (GDPR) and ePrivacy Directive (ePD).

{% hint style="warning" %}
**Note**: The regulation settings attribute for IAB purposes is always configured for GDPR  but can be further edited to extend to other regulations if necessary.&#x20;
{% endhint %}

The Transparency and Consent Framework consists of a set of technical specifications and policies to which publishers, advertisers, technology providers, and others for whom the Framework is of interest may voluntarily choose to adhere

{% hint style="info" %}
Didomi utilizes the IAB-supplied user-friendly text for the IAB purpose's description.
{% endhint %}

<table><thead><tr><th width="47" data-type="number"></th><th width="205">IAB purpose name</th><th>IAB purpose description (user-friendly text)</th></tr></thead><tbody><tr><td>1</td><td>Store and/or access information on a device</td><td>Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here.</td></tr><tr><td>2</td><td>Use limited data to select advertising</td><td>Advertising presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type or which content you are (or have been) interacting with (for example, to limit the number of times an ad is presented to you).</td></tr><tr><td>3</td><td>Create profiles for personalised advertising</td><td>Information about your activity on this service (such as forms you submit, content you look at) can be stored and combined with other information about you (for example, information from your previous activity on this service and other websites or apps) or similar users. This is then used to build or improve a profile about you (that might include possible interests and personal aspects). Your profile can be used (also later) to present advertising that appears more relevant based on your possible interests by this and other entities.</td></tr><tr><td>4</td><td>Use profiles to select personalised advertising</td><td>Advertising presented to you on this service can be based on your advertising profiles, which can reflect your activity on this service or other websites or apps (like the forms you submit, content you look at), possible interests and personal aspects.</td></tr><tr><td>5</td><td>Create profiles to personalise content</td><td>Information about your activity on this service (for instance, forms you submit, non-advertising content you look at) can be stored and combined with other information about you (such as your previous activity on this service or other websites or apps) or similar users. This is then used to build or improve a profile about you (which might for example include possible interests and personal aspects). Your profile can be used (also later) to present content that appears more relevant based on your possible interests, such as by adapting the order in which content is shown to you, so that it is even easier for you to find content that matches your interests.</td></tr><tr><td>6</td><td>Use profiles to select personalised content</td><td>Content presented to you on this service can be based on your content personalisation profiles, which can reflect your activity on this or other services (for instance, the forms you submit, content you look at), possible interests and personal aspects. This can for example be used to adapt the order in which content is shown to you, so that it is even easier for you to find (non-advertising) content that matches your interests.</td></tr><tr><td>7</td><td>Measure advertising performance</td><td>Information regarding which advertising is presented to you and how you interact with it can be used to determine how well an advert has worked for you or other users and whether the goals of the advertising were reached. For instance, whether you saw an ad, whether you clicked on it, whether it led you to buy a product or visit a website, etc. This is very helpful to understand the relevance of advertising campaigns.</td></tr><tr><td>8</td><td>Measure content performance</td><td>Information regarding which content is presented to you and how you interact with it can be used to determine whether the (non-advertising) content e.g. reached its intended audience and matched your interests. For instance, whether you read an article, watch a video, listen to a podcast or look at a product description, how long you spent on this service and the web pages you visit etc. This is very helpful to understand the relevance of (non-advertising) content that is shown to you.</td></tr><tr><td>9</td><td>Understand audiences through statistics or combinations of data from different sources</td><td>Reports can be generated based on the combination of data sets (like user profiles, statistics, market research, analytics data) regarding your interactions and those of other users with advertising or (non-advertising) content to identify common characteristics (for instance, to determine which target audiences are more receptive to an ad campaign or to certain contents).</td></tr><tr><td>10</td><td>Develop and improve services</td><td>Information about your activity on this service, such as your interaction with ads or content, can be very helpful to improve products and services and to build new products and services based on user interactions, the type of audience, etc. This specific purpose does not include the development or improvement of user profiles and identifiers.</td></tr><tr><td>11</td><td>Use limited data to select content</td><td>Content presented to you on this service can be based on limited data, such as the website or app you are using, your non-precise location, your device type, or which content you are (or have been) interacting with (for example, to limit the number of times a video or an article is presented to you).</td></tr><tr><td>null</td><td>Use precise geolocation data</td><td><p><mark style="background-color:$info;">This is a special feature in the IAB Transparency and Consent Framework (TCF).</mark> </p><p></p><p>With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.</p></td></tr><tr><td>null</td><td>Actively scan device characteristics for identification</td><td><p><mark style="background-color:$info;">This is a special feature in the IAB Transparency and Consent Framework (TCF).</mark></p><p></p><p>With your acceptance, certain characteristics specific to your device might be requested and used to distinguish it from other devices (such as the installed fonts or plugins, the resolution of your screen) in support of the purposes explained in this notice.</p></td></tr></tbody></table>

{% hint style="warning" %}
**Note**: Every IAB purpose comes with examples (what the IAB refers to as illustrations) that are populated for the purpose in the consent notice. These examples are automatically displayed and not editable.
{% endhint %}

### Global purposes

{% hint style="info" %}
The global purposes group is comprised of both IAB purposes and purposes intended for Global Privacy Protocol (GPP).&#x20;
{% endhint %}

In addition to [IAB purposes](#iab-purposes), you organization's Didomi account also comes pre-configured with purposes that map to respective US-state legislations. The global purposes group is comprised of both IAB purposes and purposes that are defined by the IAB for its Global Privacy Protocol (GPP) to help the industry solve challenges addressing differing and evolving privacy regulations worldwide.

{% hint style="warning" %}
**Note**: The regulation settings attribute for global purposes have been mapped to their respective US-state and global regulations by Didomi but can be further edited to extend to other regulations if necessary. For more information on how purposes impact different sections of the GPP string see the respective section documentation in [Global Privacy Protocol](/consent-management-platform-cmp/frameworks-regulations/iab-global-privacy-protocol-gpp).
{% endhint %}

Refer to the list below for global purposes (does not include [IAB purposes](#iab-purposes)):

| Global purpose                                                                                                                                                                                                    |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Advertising                                                                                                                                                                                                       |
| Analytics                                                                                                                                                                                                         |
| Functional                                                                                                                                                                                                        |
| Marketing                                                                                                                                                                                                         |
| Sell my personal information                                                                                                                                                                                      |
| Share my personal information                                                                                                                                                                                     |
| Social                                                                                                                                                                                                            |
| Storage and access to geolocation information for targeted advertising purposes                                                                                                                                   |
| Storage and access to geolocation information to carry out marketing studies                                                                                                                                      |
| Use additional personal information for further purposes                                                                                                                                                          |
| Use information that reveal account log-in, financial account, debit card, or credit card number in combination with any required security or access code, password, or credentials allowing access to an account |
| Use information that reveal citizenship or immigration status                                                                                                                                                     |
| Use information that reveal mail, email, and text messages unless I am the intended recipient of the communication                                                                                                |
| Use information that reveal mental or physical health condition or diagnosis                                                                                                                                      |
| Use information that reveal my biometric data for the purpose of uniquely identifying an individual                                                                                                               |
| Use information that reveal my data for social security, driver's license, state identification card, or passport number.                                                                                         |
| Use information that reveal my genetic data                                                                                                                                                                       |
| Use information that reveal my racial or ethnic origin                                                                                                                                                            |
| Use information that reveal my status as a victim of a crime                                                                                                                                                      |
| Use information that reveal my status as transgender or nonbinary                                                                                                                                                 |
| Use information that reveal national origin                                                                                                                                                                       |
| Use information that reveal precise geolocation                                                                                                                                                                   |
| Use information that reveal racial or ethnic origin, religious or philosophical beliefs, or union membership                                                                                                      |
| Use information that reveal religious beliefs                                                                                                                                                                     |
| Use information that reveal sex life or sexual orientation                                                                                                                                                        |
| Use my personal information                                                                                                                                                                                       |
| Use my personal information for targeted advertising                                                                                                                                                              |

### Custom purposes

Custom purposes are purposes that are created by your organization to describe data collection/processing that your organization performs and is not represented in the pre-configured purposes in your Didomi account.&#x20;

[Click here](/data-manager/purposes/create-custom-purpose) to learn more about creating a new custom purpose in your organization's Didomi account.&#x20;


# Create custom purpose

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

By default, Didomi provides your organization with[ IAB and global purposes](/data-manager/purposes) to facilitate adherence with the IAB Transparency and Consent Framework (TCF) and the IAB Global Privacy Protocol (GPP). In addition to these default purposes, your organization can configure a custom purpose to describe a reason your organization is collecting and processing an end-user's data.

In this article, we will cover how to create and configure a new custom purpose via the Data Manager.

Click **Data Manager** in the left-hand panel and ensure the **Purposes** tab is selected on the subsequent page.&#x20;

<figure><img src="/files/hQmhgwNLvVyUKvvuzXNE" alt="" width="563"><figcaption></figcaption></figure>

Click **Add purpose +**.&#x20;

<figure><img src="/files/jlqenrQiOR01k0ETD5a9" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields on the subsequent page to configure the following attributes for the custom purpose:

<table><thead><tr><th width="203">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>Regulation settings</td><td>Indicates the regulatory frameworks to which the purpose applies. Once the purpose is mapped to a vendor, the purpose will populate in the consent notice for each regulation so the end-user can grant or deny consent for the vendor's data processing.</td></tr><tr><td>Sensitive Personal Information (SPI)</td><td>Indicates whether purpose collects information that is deemed Sensitive Personal Information (SPI)</td></tr><tr><td>Advanced Setting</td><td>Enables your organization to configure a Custom SDK ID for the custom purpose which is a configurable ID used solely for migrating existing consent notices from JSON configurations. Once configured, Didomi will force set the SDK ID of the purpose to an ID in your JSON configuration</td></tr><tr><td>Translation(s)</td><td>Language(s) into which the custom purpose name and description are translated. <a href="/pages/8dkVYJ4LyKFgEgZqRG64#custom-purpose-translations">Click here</a> for more information</td></tr></tbody></table>

Click **Save** when finished.&#x20;

<figure><img src="/files/JUimSaeLxZF5p3ziiFXm" alt="" width="563"><figcaption></figcaption></figure>

Your new custom purpose will be added to your organization's Didomi account.&#x20;

{% hint style="warning" %}
**Note**: Once the custom purpose is created, Didomi will generate a unique Purpose ID that will be used to identify the purpose in API requests.&#x20;
{% endhint %}

<figure><img src="/files/QX1ivLWjPiRSEmyqZ3ch" alt="" width="563"><figcaption></figcaption></figure>

Assign your organization's [new custom purpose to vendors](/data-manager/vendors/add-purpose-to-vendor) as necessary.


# Manage purpose translations

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

A purpose describes the reason your organization is collecting the end-user's data and how your organization processes that data. Didomi supports translations of the purpose name and description in a variety of languages. In this article, we will cover how Didomi manages translations for the three different groups of purposes:

* [IAB purpose translations](#iab-purpose-translations)
* [Global purpose translations](#global-purpose-translations)
* [Custom purpose translations](#custom-purpose-translations)

View translations for any purpose by clicking **Data Manager** on the left-hand panel and ensuring the **Purposes** tab is selected on the subsequent page.&#x20;

<figure><img src="/files/hQmhgwNLvVyUKvvuzXNE" alt="" width="563"><figcaption></figcaption></figure>

Click the **Edit** icon inline from any purpose on the list.&#x20;

<figure><img src="/files/kV9SopvTjwF5Xgwsj0qH" alt="" width="563"><figcaption></figcaption></figure>

All currently configured translations for the purpose will be listed on the subsequent page.&#x20;

<figure><img src="/files/lv0RyaVnINfWoWHpWSfk" alt="" width="563"><figcaption></figcaption></figure>

***

### IAB purpose translations

Translations for IAB purposes are not editable and are derived from translations provided by the IAB or translated by Didomi. Please contact your the Didomi support team for any questions or concerns related to the provided translations for IAB purposes.&#x20;

### Global purpose translations

Translations for global purposes are not editable and are derived from translations provided by the IAB or translated by Didomi. Please contact your the Didomi support team for any questions or concerns related to the provided translations for IAB purposes.&#x20;

### Custom purpose translations

Translations for custom purposes are configured and managed by your organization. In this section, we will cover how to:

* [Add custom purpose translation](#add-custom-purpose-translation)
* [Edit custom purpose translation](#edit-custom-purpose-translation)
* [Delete custom purpose translation](#delete-custom-purpose-translation)

#### Add custom purpose translation

From the edit page of a custom purpose, click **Add a translation +**.

<figure><img src="/files/WGfpJNTBeIOHZHSWcwzf" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields in the subsequent modal to add the following fields:

* Language
* Purpose name
* Purpose description

Click **Add** when finished.

<figure><img src="/files/cB7JBOHEWBf5i4qSpqCW" alt="" width="369"><figcaption></figcaption></figure>

The translation will be added to the custom purpose. Click **Save** to confirm the addition.&#x20;

<figure><img src="/files/BsplDe3VppfREKrb3XFs" alt="" width="563"><figcaption></figcaption></figure>

#### Edit custom purpose translation

From the edit page of a custom purpose, navigate to a translation and click the **Edit** icon for the card.&#x20;

Use the provided fields in the subsequent modal to add the following fields:

* Purpose name
* Purpose description

{% hint style="warning" %}
**Note**: Your organization can not change the **Language** of the translation. If your organization needs to update the language of a translation you will need to [add a new translation](#add-custom-purpose-translation) for the custom purpose.&#x20;
{% endhint %}

Click **Update** when finished.

<figure><img src="/files/3bFd6Cp2eHk2wiX44FoY" alt="" width="361"><figcaption></figcaption></figure>

The translation will be updated to the custom purpose. Click **Save** to confirm the edits.

<figure><img src="/files/BsplDe3VppfREKrb3XFs" alt="" width="563"><figcaption></figcaption></figure>

#### Delete custom purpose translation

From the edit page of a custom purpose, navigate to a translation and click the **Delete** icon for the card.&#x20;

<figure><img src="/files/0l99uCEohfN49iXXrjZo" alt="" width="563"><figcaption></figcaption></figure>

The translation will be removed from the custom purpose. Click **Save** to confirm the deletion.

<figure><img src="/files/BevkPK3diZXFTwOlb0Be" alt="" width="563"><figcaption></figcaption></figure>


# Edit purpose

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

A purpose describes the reason your organization is collecting the end-user's data and how your organization processes that data. In this article, we will cover the editable fields for a purpose in each of the three purpose groups within the data manager.&#x20;

Click **Data Manager** in the left-hand panel and ensure the **Purposes** tab is selected on the subsequent page.&#x20;

<figure><img src="/files/hQmhgwNLvVyUKvvuzXNE" alt="" width="563"><figcaption></figcaption></figure>

Filter the list of purposes to your desired group and click the **Edit** icon inline with a specific purpose.&#x20;

<figure><img src="/files/HQce8ZKojoM7DEvAen86" alt="" width="563"><figcaption></figcaption></figure>

{% tabs %}
{% tab title="IAB purpose" %}
The only attribute that is editable for an IAB purpose is the **Regulation settings**. By default, Didomi will always include **GDPR** within the regulations for an IAB purpose but your organization can further extend the IAB purpose so that it is included in other regulations.&#x20;

Expand the **Regulation settings** accordion and use the **Regulations** drop-down menu to select any regulations you wish to include for the IAB purpose.&#x20;

<figure><img src="/files/oJzTczmrRBuX1ZOz5E55" alt="" width="563"><figcaption></figcaption></figure>

Click **Save** to confirm the edits.
{% endtab %}

{% tab title="Global purpose" %}
The only attribute that is editable for a global purpose is the **Regulation settings**. By default, Didomi maps global purposes to regulations that explicitly have signals for the purpose but your organization can further extend the purpose so that it included in other regulations.

Expand the **Regulation settings** accordion and use the **Regulations** drop-down menu to select any regulations you wish to include for the global purpose.&#x20;

<figure><img src="/files/oJzTczmrRBuX1ZOz5E55" alt="" width="563"><figcaption></figcaption></figure>

Click **Save** to confirm the edits.
{% endtab %}

{% tab title="Custom purpose" %}
Use the provided fields to edit the following attributes for the custom purpose:

<table><thead><tr><th width="203">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>Regulation settings</td><td>Indicates the regulatory frameworks to which the purpose applies. Once the purpose is mapped to a vendor, the purpose will populate in the consent notice for each regulation so the end-user can grant or deny consent for the vendor's data processing.</td></tr><tr><td>Sensitive Personal Information (SPI)</td><td>Indicates whether purpose collects information that is deemed Sensitive Personal Information (SPI)</td></tr><tr><td>Advanced Setting</td><td>Enables your organization to configure a Custom SDK ID for the custom purpose which is a configurable ID used solely for migrating existing consent notices from JSON configurations. Once configured, Didomi will force set the SDK ID of the purpose to an ID in your JSON configuration</td></tr><tr><td>Translation(s)</td><td>Language(s) into which the custom purpose name and description are translated. <a href="/pages/8dkVYJ4LyKFgEgZqRG64#custom-purpose-translations">Click here</a> for more information</td></tr></tbody></table>

Click **Save** to confirm the edits.
{% endtab %}
{% endtabs %}


# Delete custom purpose

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

In this article, we will cover how to delete an existing custom purpose in your data manager.

Click **Data Manager** in the left-hand panel and ensure the **Purposes** tab is selected on the subsequent page.&#x20;

<figure><img src="/files/hQmhgwNLvVyUKvvuzXNE" alt="" width="563"><figcaption></figcaption></figure>

Filter the purpose list by **Custom purposes** and click the **Delete** icon inline with a custom purpose name.&#x20;

<figure><img src="/files/SB6sPFvuY9DsHyPCP4Ab" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the custom purpose in the subsequent modal and click **Yes, delete**.

<figure><img src="/files/xw9OF63rnd5dGf0Xzpla" alt="" width="375"><figcaption></figcaption></figure>

The custom purpose will be deleted from your organization's data manager.


# Vendors

A vendor represents an entity to which access to end-user data is granted for processing in accordance with its specified purposes. In this article, we will provide an overview of the vendors that are included and customizable in your Didomi account.

View vendors in your Didomi account by clicking **Data Manager** on the left-hand panel and selecting the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/vVH6YlweUwTUxND2KxGV" alt="" width="563"><figcaption></figcaption></figure>

From the data manager page, you can use the provided filter to sort the list of vendors by different types.

<figure><img src="/files/2v8gC87SDa1EvwgyX04j" alt="" width="563"><figcaption></figcaption></figure>

The Didomi console supports 4 types of vendors:

<table><thead><tr><th width="165">Type</th><th width="215">Source</th><th>Description</th></tr></thead><tbody><tr><td>IAB vendors</td><td><a href="https://iabeurope.eu/vendor-list-tcf/">IAB TCF Global Vendor List (GVL)</a><br><br><mark style="background-color:$warning;"><strong>Note</strong>: The Didomi platform syncs with the GVL every Monday morning.</mark></td><td>Part of the IAB Transparency and Consent Framework (TCF). These vendors come pre-populated in your account with the <a href="/pages/SpxlbgNegz7zSV9d90J5#iab-purposes">IAB purposes</a> that they have declared. <br><br>Your organization can add purposes to these vendors but cannot remove any declared IAB purposes from the vendor.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Some IAB vendors include only special features or special purposes, with no purpose as defined in the Didomi Console. Consequently, no purpose will appear for these vendors in the Data Manager.</mark></td></tr><tr><td>Google ATP vendors</td><td><a href="https://support.google.com/admanager/answer/9012903?hl=en">Google ad partner list</a><br><br><mark style="background-color:$warning;"><strong>Note</strong>: The Didomi platform syncs with the Google ad partner list every Monday morning.</mark></td><td>Part of Google's Ad Technology Providers. These vendors do not necessarily adhere to the IAB TCF framework (although they can) and rather undergo Google's Ad Manager certification. <br><br>Your organization can add purposes to these vendors but cannot remove any declared IAB purposes from the vendor.</td></tr><tr><td>Global vendors</td><td>Didomi-provided</td><td>Commonly used vendors pre-populated by Didomi in your organization's account. These vendors are not a part of the IAB TCF nor included in the Google ATP list.<br><br>Your organization can add, remove, and edit some or all of the purposes configured for the vendor.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: There is currently no filter to support global vendors. However, a global vendor will include the following path in its URL <code>data-manager/global-vendor/:id</code></mark></td></tr><tr><td>Custom vendors</td><td>Client-provided</td><td>These vendors are created and added to your specific Didomi account by your organization (even if they already exist in the Didomi database. <br><br>Your organization can add, remove, and edit all the details and purposes for the vendor.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Only custom vendors with defined purposes will appear in consent notices.</mark> </td></tr></tbody></table>


# Create custom vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

By default, Didomi pre-populates your organization's account with [IAB, Google ATP, and Global vendors](/data-manager/vendors). In addition to these vendors, your organization can configure custom vendors for partners that you work with but are not reflected in these lists.

In this article, we will cover how to create and configure a new custom vendor via the Data Manager.

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Click **Add vendor +**.&#x20;

<figure><img src="/files/dpqBD7g5ni1sWLPzG7X4" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields on the subsequent page to configure the following attributes for the custom vendor:

<table><thead><tr><th width="218">Field</th><th>Description</th></tr></thead><tbody><tr><td>Vendor name</td><td>Name of the vendor.</td></tr><tr><td>Vendor type</td><td>If the vendor being registered as a custom vendor is owned by your organization, select the <strong>Declare the vendor as your own property toggle</strong>. A custom vendor with this setting will not be included in the Partners section of your consent ntoice.</td></tr><tr><td>Privacy policy</td><td>URL to the custom vendor's privacy policy</td></tr><tr><td>Opt-in purposes</td><td>Use the provided field to select purposes where the vendor utilizes explicit consent as a legal basis.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: If the custom vendor needs a custom purpose to be required, your organization can map the purpose to whichever legal basis you wish and set the requirement when configuring your consent notice.</mark> <a href="/pages/y3AlaxiXSeCofGrkFGkH"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark> </td></tr><tr><td>Opt-out purposes</td><td>Use the provided field to select purposes where the vendor utilizes legitimate interest or explicit opt-out as a legal basis.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: If the custom vendor needs a custom purpose to be required, your organization can map the purpose to whichever legal basis you wish and set the requirement when configuring your consent notice.</mark> <a href="/pages/y3AlaxiXSeCofGrkFGkH"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark> </td></tr><tr><td>Domains owned by the vendor</td><td>In order to improve the accuracy of your organization's compliance reports, it is important to add all domains from which the custom vendor could drop trackers or call other vendors. Use the provided field to add any domains owned by the custom vendor</td></tr></tbody></table>

{% hint style="info" %}
A custom vendor requires at least one purpose (either opt-in or opt-out) in order to appear in any consent notice to which it is added.
{% endhint %}

<figure><img src="/files/F8U0ka9nvbgX3onMjZME" alt="" width="563"><figcaption></figcaption></figure>

In addition to the data above, your organization can include the following information for the custom vendor by expanding the appropriate accordion and using the provided steps to add details for the custom vendor. Select the tabs below for more information on each accordion.

{% tabs %}
{% tab title="Storage" %}
Expand the **Storage** accordion and use the provided fields to inform the end-user about:

* Maximum cookie duration
* Additional storage methods used by the custom vendor

<figure><img src="/files/ACUqM3iYjy1hCcQn0jGM" alt="" width="375"><figcaption></figcaption></figure>

Provide details for each storage item droppped/used by the custom vendor by clicking **+ Add a new storage**.

From the modal, use the **Type of storage** dropdown menu to select a storage type and fill in the appropriate details in the subsequent fields.&#x20;

<figure><img src="/files/QBES8H9rPEWyEb4bGAfz" alt="" width="364"><figcaption></figcaption></figure>

Click **Add** when finished.&#x20;

Repeat as necessary for other storage methods used by the custom vendor. Any added storage methods will be listed in the accordion and can be edited or deleted by clicking the appropriate icon inline with the storage method .

<figure><img src="/files/d5lRRKLNVdR9Eaukl9Vg" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Contact" %}
Expand the **Contact** accordion and click **Add address** to provide an email address and/or physical mailing address for the custom vendor.

<figure><img src="/files/rw9Tc8rNCCaQ76jSlihm" alt="" width="375"><figcaption></figcaption></figure>

From the modal, use the **Language** dropdown menu to select a language and fill in the appropriate details in the subsequent fields.&#x20;

Click **Add** when finished.&#x20;

<figure><img src="/files/XcVb1yk2X57HbeUOqRWp" alt="" width="364"><figcaption></figcaption></figure>

Repeat as necessary for other addresses used by the custom vendor. Any added addresses will be listed in the accordion and can be edited or deleted by clicking the appropriate icon.

<figure><img src="/files/l2E2ITsHTza2WznZHwOx" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Advanced" %}
Expand the **Advanced** accordion and use the provided fields to input/select any of the following details for the custom vendor:

<table><thead><tr><th width="242">Field</th><th>Description</th></tr></thead><tbody><tr><td>Custom SDK ID</td><td>Enables your organization to configure a Custom SDK ID for the custom vendor which is a configurable ID used solely for migrating existing consent notices from JSON configurations. Once configured, Didomi will force set the SDK ID of the vendor to an ID in your JSON configuration</td></tr><tr><td>Protection</td><td>A protection for a vendor refers to a legal mechanism that allows the transfer of personal data from the EU/EEA to a third country (like the US) in compliance with GDPR Article 46 or similar data protection frameworks. If necessary, select the protection from the pre-populated list.</td></tr><tr><td>Country</td><td>The country where the main headquarters is located for the custom vendor</td></tr><tr><td>Provider</td><td>Select what kind of provider the custom vendor is for your organization from the pre-populated list</td></tr><tr><td>Service provider category</td><td>Select the service provided by the custom vendor from the pre-populated list</td></tr></tbody></table>

<figure><img src="/files/XxadtmYPjdUd71Ta0Bnz" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Other links" %}
Expand the **Other links** accordion and use the provided fields to add any relevant links to the custom vendor. These links include:

* Website
* Opt-out link
* Terms and conditions link
* Data processing agreement link
* Applicable protection link
* Subprocessors link

<figure><img src="/files/VHUtJTqKjZgSrR4EgWxt" alt="" width="563"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Click **Save** when finished. The custom vendor will be added to your organization's Didomi account and can be navigated to by using the vendor filter.

<figure><img src="/files/uEWPhRWdqbaLuaYhpYIo" alt="" width="563"><figcaption></figcaption></figure>


# Edit custom vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

In this article, we will cover how to edit an existing custom vendor created by your organization via the Data Manager.&#x20;

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Use the vendor filter dropdown menu to filter the list by **Custom vendors**.

Navigate to a custom vendor on the list and click the **Edit** icon inline with the custom vendor name.

<figure><img src="/files/3TzIxurfAB2MOWJkrWaM" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields on the subsequent page to edit any of the following attributes for the custom vendor:

<table><thead><tr><th width="218">Field</th><th>Description</th></tr></thead><tbody><tr><td>Vendor name</td><td>Name of the vendor.</td></tr><tr><td>Vendor type</td><td>If the vendor being registered as a custom vendor is owned by your organization, select the <strong>Declare the vendor as your own property toggle</strong>. A custom vendor with this setting will not be included in the Partners section of your consent ntoice.</td></tr><tr><td>Privacy policy</td><td>URL to the custom vendor's privacy policy</td></tr><tr><td>Opt-in purposes</td><td>Use the provided field to select purposes where the vendor utilizes explicit consent as a legal basis.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: If the custom vendor needs a custom purpose to be required, your organization can map the purpose to whichever legal basis you wish and set the requirement when configuring your consent notice.</mark> <a href="/pages/y3AlaxiXSeCofGrkFGkH"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark> </td></tr><tr><td>Opt-out purposes</td><td>Use the provided field to select purposes where the vendor utilizes legitimate interest or explicit opt-out as a legal basis.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: If the custom vendor needs a custom purpose to be required, your organization can map the purpose to whichever legal basis you wish and set the requirement when configuring your consent notice.</mark> <a href="/pages/y3AlaxiXSeCofGrkFGkH"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark> </td></tr><tr><td>Domains owned by the vendor</td><td>In order to improve the accuracy of your organization's compliance reports, it is important to add all domains from which the custom vendor could drop trackers or call other vendors. Use the provided field to add any domains owned by the custom vendor</td></tr></tbody></table>

<figure><img src="/files/UfheCMopCC9nttqZvC2Q" alt="" width="563"><figcaption></figcaption></figure>

In addition to the data above, your organization can include the following information for the custom vendor by expanding the appropriate accordion and using the provided steps to add details for the custom vendor. Select the tabs below for more information on each accordion.

{% tabs %}
{% tab title="Storage" %}
Expand the **Storage** accordion and use the provided fields to inform the end-user about:

* Maximum cookie duration
* Additional storage methods used by the custom vendor

<figure><img src="/files/ACUqM3iYjy1hCcQn0jGM" alt="" width="375"><figcaption></figcaption></figure>

Provide details for each storage item droppped/used by the custom vendor by clicking **+ Add a new storage**.

From the modal, use the **Type of storage** dropdown menu to select a storage type and fill in the appropriate details in the subsequent fields.&#x20;

<figure><img src="/files/QBES8H9rPEWyEb4bGAfz" alt="" width="364"><figcaption></figcaption></figure>

Click **Add** when finished.&#x20;

Repeat as necessary for other storage methods used by the custom vendor. Any added storage methods will be listed in the accordion and can be edited or deleted by clicking the appropriate icon inline with the storage method .

<figure><img src="/files/d5lRRKLNVdR9Eaukl9Vg" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Contact" %}
Expand the **Contact** accordion and click **Add address** to provide an email address and/or physical mailing address for the custom vendor.

<figure><img src="/files/rw9Tc8rNCCaQ76jSlihm" alt="" width="375"><figcaption></figcaption></figure>

From the modal, use the **Language** dropdown menu to select a language and fill in the appropriate details in the subsequent fields.&#x20;

Click **Add** when finished.&#x20;

<figure><img src="/files/XcVb1yk2X57HbeUOqRWp" alt="" width="364"><figcaption></figcaption></figure>

Repeat as necessary for other addresses used by the custom vendor. Any added addresses will be listed in the accordion and can be edited or deleted by clicking the appropriate icon.

<figure><img src="/files/l2E2ITsHTza2WznZHwOx" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Advanced" %}
Expand the **Advanced** accordion and use the provided fields to input/select any of the following details for the custom vendor:

<table><thead><tr><th width="242">Field</th><th>Description</th></tr></thead><tbody><tr><td>Custom SDK ID</td><td>Enables your organization to configure a Custom SDK ID for the custom vendor which is a configurable ID used solely for migrating existing consent notices from JSON configurations. Once configured, Didomi will force set the SDK ID of the vendor to an ID in your JSON configuration</td></tr><tr><td>Protection</td><td>A protection for a vendor refers to a legal mechanism that allows the transfer of personal data from the EU/EEA to a third country (like the US) in compliance with GDPR Article 46 or similar data protection frameworks. If necessary, select the protection from the pre-populated list.</td></tr><tr><td>Country</td><td>The country where the main headquarters is located for the custom vendor</td></tr><tr><td>Provider</td><td>Select what kind of provider the custom vendor is for your organization from the pre-populated list</td></tr><tr><td>Service provider category</td><td>Select the service provided by the custom vendor from the pre-populated list</td></tr></tbody></table>

<figure><img src="/files/XxadtmYPjdUd71Ta0Bnz" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Other links" %}
Expand the **Other links** accordion and use the provided fields to add any relevant links to the custom vendor. These links include:

* Website
* Opt-out link
* Terms and conditions link
* Data processing agreement link
* Applicable protection link
* Subprocessors link

<figure><img src="/files/VHUtJTqKjZgSrR4EgWxt" alt="" width="563"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Click **Save** when finished.


# Delete custom vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

In this article, we will cover how to delete an existing custom vendor via the Data Manager.&#x20;

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Use the vendor filter dropdown menu to filter the list by **Custom vendors**.

Navigate to a custom vendor on the list and click the **Delete** icon inline with the custom vendor name.

<figure><img src="/files/CDPeWFasmKBlcuTvxHYO" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision in the subsequent modal and click **Yes, delete**.

<figure><img src="/files/cxuVQfAdNXw90aNnUpuH" alt="" width="375"><figcaption></figcaption></figure>

The custom vendor will be removed from your organization's Didomi account.


# Add purpose to vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

A [purpose](/data-manager/purposes) describes the reason your organization or its vendors is collecting the end-user's data and how your organization processes that data. In this article, we will cover how to add a purpose (IAB, Global, Custom) to any vendor within your organization's Data Manager.&#x20;

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a vendor on the subsequent list and click **Edit** inline with the vendor name.&#x20;

<figure><img src="/files/yHGlHjUkX0h2Hobzsgms" alt="" width="563"><figcaption></figcaption></figure>

Purposes added to a vendor require a legal basis which define whether:

<table data-header-hidden><thead><tr><th width="309"></th><th></th></tr></thead><tbody><tr><td>Opt-in (based on consent)</td><td>The end-user needs to explicitly consent to the data processing involved with the stated purpose</td></tr><tr><td>Opt-out (based on legitimate interest)</td><td>The end-user is by default opted-into the data processing involved with the stated purpose and they have the option to reject the purpose. This processing must be legitimate, necessary, and not prejudice the rights and interests of individuals.</td></tr></tbody></table>

From the vendor configuration page, navigate to the respective **opt-in purposes** or **opt-out purposes** drop-down menu and select the desired purpose to add to the vendor.

{% hint style="warning" %}
**Note**: For organization's who plan to utilize the vendor in the context of a consent notice with an IAB TCF 2.3 integration, please be aware that the following purposes can only be used with an opt-in (based on consent) legal basis:

* (1) Store and/or access information on a device
* (3) Create a personalized ads profile
* (4) Select personalized ads
* (5) Create a personalized content profile
* (6) Select personalized content
  {% endhint %}

<figure><img src="/files/1Fypjr6R2zmXLFraHkM7" alt="" width="375"><figcaption></figcaption></figure>

Click **Save** when finished to confirm the addition(s). The purpose will be added to the vendor and listed in the appropriate legal basis column for the vendor.

<figure><img src="/files/6VGkrOdjMbnHZL2YRmUO" alt="" width="563"><figcaption></figcaption></figure>


# Edit legal basis of purpose for vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

A legal basis is the mechanism used by a vendor that defines the lawful ground that justifies the collection and processing of personal data for a given purpose. In this article, we will cover the following:

* [Legal basis overview](#legal-basis-overview)
* [Edit legal basis of purpose for vendor](#edit-legal-basis-of-purpose-for-vendor)

{% hint style="warning" %}
**Note**: Editing the legal basis for a purpose (e.g. changing a purpose from legitimate interest to consent) can impact your organization's monetization.
{% endhint %}

***

### Legal basis overview

When a purpose is initially added to a vendor it can utilize one of two legal basis which define the legal mechanism used to process end-user data:

<table data-header-hidden><thead><tr><th width="309"></th><th></th></tr></thead><tbody><tr><td>Opt-in (based on consent)</td><td>The end-user needs to explicitly consent to the data processing involved with the stated purpose</td></tr><tr><td>Opt-out (based on legitimate interest)</td><td>The end-user is by default opted-into the data processing involved with the stated purpose and they have the option to reject the purpose. This processing must be legitimate, necessary, and not prejudice the rights and interests of individuals.</td></tr></tbody></table>

The ability to edit the legal basis for a purpose depends on factors such as the vendor type and purpose type being edited. Refer to the matrix below for more information:

<table><thead><tr><th width="169">Vendor type</th><th width="314">IAB purposes</th><th width="127">Global purposes</th><th>Custom purposes</th></tr></thead><tbody><tr><td>IAB vendor</td><td>IAB purposes are predefined and managed by the IAB TCF framework and cannot be edited. If your organization has added any additional IAB purposes other than what was predefined for the vendor then these can be edited.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Publisher restrictions are available via the consent notice settings to enforce any organizational restrictions you my require.</mark> <a href="/pages/BmPZq0hNUw9b08EOmpIN"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Google ATP vendor</td><td>IAB purposes are predefined and managed by the IAB TCF framework and cannot be edited. If your organization has added any additional IAB purposes other than what was predefined for the vendor then these can be edited.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Publisher restrictions are available via the consent notice settings to enforce any organizational restrictions you my require.</mark> <a href="/pages/BmPZq0hNUw9b08EOmpIN"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Global vendor</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Custom vendor</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr></tbody></table>

### Edit legal basis of purpose for vendor

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a vendor on the subsequent list and click **Edit** inline with the vendor name.&#x20;

<figure><img src="/files/dmIHD40QPISJnKdJq7da" alt="" width="563"><figcaption></figcaption></figure>

Use the respective **opt-in purposes** or **opt-out purposes** drop-down menu and deselect the purpose that is being edited for a new legal basis.

<figure><img src="/files/OARkvrQPWLUHQTS2WqLE" alt="" width="375"><figcaption></figcaption></figure>

Next, navigate to the dropdown menu for the new legal basis of the purpose and select it from the menu.

<figure><img src="/files/RvdZBues2E1mgyxrwoGR" alt="" width="375"><figcaption></figcaption></figure>

Click **Save** when finished. The legal basis for the purpose will be edited according to your selections.

<figure><img src="/files/YebidHgvSLgW0rvwcixn" alt="" width="563"><figcaption></figcaption></figure>


# Remove purpose from vendor

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

A [purpose](/data-manager/purposes) describes the reason your organization or its vendors is collecting the end-user's data and how your organization processes that data. In this article, we will cover the following:

* [Purpose removal overview](#purpose-removal-overview)
* [Remove purpose from vendor](#remove-purpose-from-vendor)

***

### Purpose removal overview

The ability to remove purposes from a vendor depends on factors such as the vendor type and purpose type being removed. Refer to the matrix below for more information

<table><thead><tr><th width="169">Vendor type</th><th width="314">IAB purposes</th><th width="127">Global purposes</th><th>Custom purposes</th></tr></thead><tbody><tr><td>IAB vendor</td><td>IAB purposes are predefined and managed by the IAB TCF framework and cannot be removed. If your organization has added any additional IAB purposes other than what was predefined for the vendor then these can be removed.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Publisher restrictions are available via the consent notice settings to enforce any organizational restrictions you my require.</mark> <a href="/pages/BmPZq0hNUw9b08EOmpIN"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Google ATP vendor</td><td>IAB purposes are predefined and managed by the IAB TCF framework and cannot be removed. If your organization has added any additional IAB purposes other than what was predefined for the vendor then these can be removed.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Publisher restrictions are available via the consent notice settings to enforce any organizational restrictions you my require.</mark> <a href="/pages/BmPZq0hNUw9b08EOmpIN"><mark style="background-color:$warning;">Click here</mark></a> <mark style="background-color:$warning;">for more information.</mark></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Global vendor</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr><tr><td>Custom vendor</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span></td></tr></tbody></table>

### Remove purpose from vendor

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a vendor on the subsequent list and click **Edit** inline with the vendor name.&#x20;

<figure><img src="/files/yHGlHjUkX0h2Hobzsgms" alt="" width="563"><figcaption></figcaption></figure>

Use the respective **opt-in purposes** or **opt-out purposes** drop-down menu and deselect the purpose that should be removed from a vendor.&#x20;

{% hint style="info" %}
Purposes that cannot be removed from the vendor will have the purpose name muted to grey.
{% endhint %}

<figure><img src="/files/BfGfUD0O7e0QfW0CeR0Y" alt="" width="375"><figcaption></figcaption></figure>

Click **Save** when finished. The purpose will be removed from the vendor.


# Vendor cookie disclosure

A vendor cookie disclosure is a privacy practice where a website discloses cookies that can be set on an end-user's device that is attributable to a third-party vendor whose technologies are embedded on the site. In this article, we will cover the following:

* [Legal requirements for vendor cookie disclosure](#legal-requirements-for-vendor-cookie-disclosure)
* [IAB vendor cookie disclosures](#iab-vendor-cookie-disclosures)
* [Manually add cookie disclosure to vendor](#manually-add-cookie-disclosure-to-vendor)

***

### Legal requirements for vendor cookie disclosure

{% hint style="warning" %}
**Note**: The following is not to be considered legal advice and organizations should refer to their DPO and legal counsel regarding applicability of and compliance to regulations.
{% endhint %}

While there is no universal requirement for vendor cookie disclosures, data privacy regulations like General Data Protection Regulation (GDPR) in combination with the ePrivacy Directive generates strong pressure that organization's disclose not only cookies they may set but disclose cookies set by their vendors as well.

However, even within the contexts of data privacy regulations like GDPR there is no set requirements on where vendor cookie disclosures should be surfaced to end-users. Didomi observes some clients including cookies disclosures in their privacy policy while others rely on the consent notice.

### IAB vendor cookie disclosures

When a vendor registers with the IAB TCF Global Vendor List (GVL) the vendor may make cookie disclosures. If an IAB vendor is added to a GDPR consent notice, Didomi will automatically add any cookie disclosures the vendor may have made as part of its IAB TCF GVL registration to the vendor layer of the GDPR consent notice.

{% hint style="info" %}
The vendor cookie disclosures will be added to a GDPR consent notice for any IAB vendor regardless of whether the consent integrates with the IAB TCF or not.
{% endhint %}

Cookies disclosures as part of IAB TCF GVL registrations are not available for IAB vendors via the Data Manager but your organization can view the cookie disclosures using the consent notice preview feature.

Click **Consent notices** on the left-hand panel and select your consent notice from the subsequent page.

<figure><img src="/files/PNfMpSShPxaYOVQp2txV" alt="" width="563"><figcaption></figcaption></figure>

Click the **Preview** icon.

<figure><img src="/files/wofmEQXkSiNlsrGXpWGE" alt="" width="563"><figcaption></figcaption></figure>

Navigate to the vendor layer of your GDPR consent notice and click the **+** icon inline with an IAB vendor. Next, expand **Device storage** to view cookie disclosures for the IAB vendor.&#x20;

<figure><img src="/files/nO4TAValCLIXuftAeOz6" alt="" width="375"><figcaption></figcaption></figure>

### Manually add cookie disclosure to vendor&#x20;

{% hint style="success" %}
**Access Type**: Data Manager - Editor
{% endhint %}

If your organization chooses to surface vendor cookie disclosure via the Didomi consent notice, you can manually add cookie disclosures on a per vendor basis from the Data Manager for any type of vendor (including additional cookie disclosures for IAB vendors).&#x20;

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a vendor on the subsequent list and click **Edit** inline with the vendor name.&#x20;

<figure><img src="/files/yHGlHjUkX0h2Hobzsgms" alt="" width="563"><figcaption></figcaption></figure>

Expand the **Storage** accordion and provide details for each storage item droppped/used by the custom vendor by clicking **+ Add a new storage**.

<figure><img src="/files/N98kWxYCKl91ESWi0QS7" alt="" width="375"><figcaption></figcaption></figure>

From the modal, use the **Type of storage** dropdown menu to select a storage type and fill in the appropriate details in the subsequent fields.&#x20;

<figure><img src="/files/QBES8H9rPEWyEb4bGAfz" alt="" width="364"><figcaption></figcaption></figure>

Click **Add** when finished.&#x20;

Repeat as necessary for other storage methods used by the custom vendor. Any added storage methods will be listed in the accordion and can be edited or deleted by clicking the appropriate icon inline with the storage method .

<figure><img src="/files/d5lRRKLNVdR9Eaukl9Vg" alt="" width="375"><figcaption></figcaption></figure>


# IAB TCF vendor deletion

Vendors who are part of the IAB Transparency and Consent Framework (TCF) are available in the Didomi console from the Global Vendor List (GVL) provided by the IAB. This list is controlled by the IAB and integrated into the Didomi CMP every week to reflect any updates.

The list of IAB TCF vendors is regularly updated with new vendors joining the IAB TCF framework, as well as any vendors leaving the framework. As part of the IAB TCF policies, vendors that leave the IAB TCF must be removed from notices.

{% hint style="info" %}
Deleted IAB vendors are still available for use outside of the IAB TCF.
{% endhint %}

### Vendor deprecation in Didomi

The automated deprecation of the deleted IAB vendors from [Global Vendor List ](https://vendor-list.consensu.org/v3/vendor-list.json)will start being enforced on February 13th, 2024.

To remain compliant with the IAB TCF policies, Didomi must deprecate each vendor that is deleted by the IAB. This means that:

* Deleted IAB vendors are marked as deprecated in Didomi’s database
* Deprecated IAB TCF vendors are **automatically removed from live notices.**
* A custom vendor is created to replace each deprecated vendor. Compared to the deprecated IAB vendor, the new custom vendor will have:
  * the same name and the same metadata,
  * a different API ID;
  * only purposes based on consent legal basis (legitimate interest purposes are transformed into consent when linked to the custom vendor).

This ensures that consent is not collected for deleted IAB TCF vendors and that these vendors are not present in the IAB TCF consent string.

The custom vendor will have a different ID than the IAB vendor.

#### What you need to do: replace a deleted vendor with a custom vendor

When an IAB TCF vendor is deleted, if you are not using the deleted vendor in a notice, no action is required on your side.

When a IAB TCF vendor is deleted, you need to follow these steps **ONLY** if you are using the IAB TCF integration and you are using the deleted vendor on your website :

1. Open your notice.
2. Go to Regulations → GDPR → Edit vendors and purposes.
3. Search for the IAB vendor using the name: the search result will contain 2 vendors
   1. IAB vendor to be removed: **un-select this vendor**
   2. Custom vendor to be added: **select this vendor and copy its ID**
4. Click save
5. ⚠️ Before publishing your notice: ensure your code/tag manager is updated to use the new ID of the custom vendor (cf. [script conditioning](https://developers.didomi.io/cmp/web-sdk/third-parties/custom-integrations/no-tag-manager) and [GTM integration](https://developers.didomi.io/cmp/web-sdk/third-parties/custom-integrations/tag-managers/google-tag-manager/configure-the-didomi-gtm-integration) documentation).
6. Publish your notice.
7. Re-collection will be triggered following the re-collection window configured for your notice.


# Manage brands


# Create new brand

{% hint style="success" %}
**Access Type**: Brand Manager - Editor
{% endhint %}

A brand is a centralized configuration of your brand identity and theme that is then disseminated to all widgets within a consent flow. In this article, we will cover how to create a new brand in your organization's Didomi account.

{% hint style="warning" %}
**Note**: By default, every organization comes pre-populated with an existing brand and the option to create up to 3 different brands.&#x20;

Additional brands are also available. Please reach out to the Didomi support team at <support@didomi.io> for more information.
{% endhint %}

Click **Branding** in the left-hand panel.&#x20;

<figure><img src="/files/IyGISPoDTSvvqmwF5VPF" alt="" width="563"><figcaption></figcaption></figure>

Select **Create a new brand** on the subsequent page.&#x20;

<figure><img src="/files/ZOdzqANCtuKT1yqkzUQS" alt="" width="563"><figcaption></figcaption></figure>

Use the provided field to input the name of the brand and click **Save** when finished.

<figure><img src="/files/HDs3QPlPe68cLVrmWp65" alt="" width="343"><figcaption></figcaption></figure>

Utilize the [brand editor](/brand-manager/brand-editor) to configure the details of the brand and click **Save** when finished.

<figure><img src="/files/6iYv9lfWw8In6XiMehcE" alt="" width="563"><figcaption></figcaption></figure>


# Edit brand

{% hint style="success" %}
**Access Type**: Brand Manager - Editor
{% endhint %}

A brand is a centralized configuration of your brand identity and theme that is then disseminated to all widgets within a consent flow. In this article, we will cover how to edit an existing brand in your organization's Didomi account.

{% hint style="warning" %}
**Note**: Any saved brand edits will need to be reviewed and published from within the consent flow to be reflected in widgets on your websites and/or apps.
{% endhint %}

Click **Branding** in the left-hand panel.&#x20;

<figure><img src="/files/IyGISPoDTSvvqmwF5VPF" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a brand profile card on the subsequent page and click the ellipsis in the upper right-hand corner of the card.

Select **Edit** from the drop-down menu.

<figure><img src="/files/tF6ygJMaA6eHC4fwpMQy" alt="" width="563"><figcaption></figcaption></figure>

Utilize the [brand editor](/brand-manager/brand-editor) to configure the details of the brand and click **Save** when finished.

<figure><img src="/files/6iYv9lfWw8In6XiMehcE" alt="" width="563"><figcaption></figcaption></figure>


# Delete brand

{% hint style="success" %}
**Access Type**: Brand Manager - Editor
{% endhint %}

In this article, we will cover how to delete an existing brand in your organization's Didomi account.

{% hint style="warning" %}
**Note**: If a brand is currently linked to widgets within a consent flow it cannot be deleted. Unlink the brand from widgets in the consent flow before continuing with the deletion.
{% endhint %}

Click **Branding** in the left-hand panel.&#x20;

<figure><img src="/files/IyGISPoDTSvvqmwF5VPF" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a brand profile card on the subsequent page and click the ellipsis in the upper right-hand corner of the card.

Select **Edit** from the drop-down menu.

<figure><img src="/files/tF6ygJMaA6eHC4fwpMQy" alt="" width="563"><figcaption></figcaption></figure>

Click the **Delete** icon in the upper right-hand corner.

<figure><img src="/files/oGPcbDYIwuACVAb7tgKJ" alt="" width="563"><figcaption></figcaption></figure>

The brand will be deleted from your organization's Didomi account.


# Duplicate brand

{% hint style="success" %}
**Access Type**: Brand Manager - Editor
{% endhint %}

A brand is a centralized configuration of your brand identity and theme that is then disseminated to all widgets within a consent flow. In this article, we will cover how to duplicate an existing in your organization's Didomi account.

{% hint style="warning" %}
**Note**: By default, every organization comes pre-populated with an existing brand and the option to create up to 3 different brands.&#x20;

Additional brands are also available. Please reach out to the Didomi support team at <support@didomi.io> for more information.
{% endhint %}

Click **Branding** in the left-hand panel.&#x20;

<figure><img src="/files/IyGISPoDTSvvqmwF5VPF" alt="" width="563"><figcaption></figcaption></figure>

Navigate to a brand profile card on the subsequent page and click the ellipsis in the upper right-hand corner of the card.

Select **Duplicate theme** from the drop-down menu.

<figure><img src="/files/ckEKwoxyNMBi6dDnUHv3" alt="" width="563"><figcaption></figcaption></figure>

A duplicate brand will be created in your brand manager. The name of the duplicated brand will be the name of the original brand prefixed with ***Copy of***.

{% hint style="info" %}
[Click here](/brand-manager/manage-brands/edit-brand) for more information in regards to editing a brand.
{% endhint %}


# Brand editor

{% hint style="success" %}
**Access Type**: Brand Manager - Editor
{% endhint %}

A brand is a centralized configuration of your brand identity and theme that is then disseminated to all widgets within a consent flow. In this article, we will cover the available option within the brand editor

{% hint style="warning" %}
**Note**: Any saved brand edits will need to be reviewed and published from within the consent flow to be reflected in widgets on your websites and/or apps.
{% endhint %}

Click **Branding** in the left-hand panel.&#x20;

<figure><img src="/files/IyGISPoDTSvvqmwF5VPF" alt="" width="563"><figcaption></figcaption></figure>

Create a [new brand](/brand-manager/manage-brands/create-new-brand) or [edit](/brand-manager/manage-brands/edit-brand) an existing brand.

<figure><img src="/files/tF6ygJMaA6eHC4fwpMQy" alt="" width="563"><figcaption></figcaption></figure>

Use the provided tabs to navigate the different parts that need to be edited. Brand configuration is divided into two parts:

* [Brand profile](#brand-profile)
* [Brand theme](#brand-theme)

<figure><img src="/files/AGcStj1GGSQZryx470vH" alt="" width="563"><figcaption></figcaption></figure>

{% tabs %}
{% tab title="Brand profile" %}
The brand profile tab allows your organization to configure non-design elements for the brand. Review the table below for the different sections of the brand profile tab:

<table><thead><tr><th width="231">Section</th><th>Description</th></tr></thead><tbody><tr><td>Global information</td><td>Input general information about the brand like the company's name, country, and privacy policy URL</td></tr><tr><td>Brand logo</td><td>Add the brand's hosted logo (URL) and alternative text (alt text)</td></tr><tr><td>Responsive breakpoints</td><td>A responsive breakpoint is a specific screen width where the widget's layout will change in order to better fit the device on which it is viewed. <br><br>Use the provided fields to input the desired responsive breakpoint for the different predefined screen sizes.</td></tr></tbody></table>

<figure><img src="/files/sxV9dCU1ex6G3oD6aAlC" alt="" width="563"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Brand theme" %}
The brand theme tab allows your organization to configure design elements for the brand which will be applied to all widgets within a consent flow. Review the table below for the different sections of the brand theme tab:

{% hint style="info" %}
A preview window within the tab will provide an example that reflects your brand theme configuration.
{% endhint %}

<table><thead><tr><th width="212">Section</th><th>Description</th></tr></thead><tbody><tr><td>Font</td><td>Configure the font family, weight, line height, and letter spacing for the brand's widgets. These settings can be configured globally or per level in the typographic hierarchy system.</td></tr><tr><td>Colors</td><td>Configure the color palette for text, buttons, tabs, focus, etc... for the brand's widgets.</td></tr><tr><td>Borders &#x26; Dividers</td><td>Configure the weight and style of border and dividers for the brand's widgets.</td></tr><tr><td>Radius</td><td>Configure the radius of buttons, toggles, fields, and containers to adjust their roundness for the brand's widgets.</td></tr><tr><td>Spacing</td><td>Configure the padding, margin, and spacing of elements within the brand's widgets</td></tr><tr><td>Layout</td><td>Configure settings (e.g. type and style) for buttons, links and tags. <br><br><mark style="background-color:$warning;"><strong>Note</strong>: Add the hosted icon (URL) for Functional icons.</mark></td></tr></tbody></table>

<figure><img src="/files/F4QJPsl1VaiaFaMuO8vE" alt="" width="446"><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}


# Manage widgets

Widgets are interface templates that are surfaced to end-users in a consent flow in order to collect consent and/or refusal actions. Utilizing the component library your organization can create fully customized and modular interfaces that can be deployed across multiple consent flows.&#x20;

Your organization's widgets are accessible by clicking **Widgets** on the left-hand panel.

<figure><img src="/files/aDQWMJFFljSRoovZK7dL" alt="" width="563"><figcaption></figcaption></figure>

The subsequent page will list all widgets that have been created for your organization's Didomi account. Each widget will have the following information listed:

<table><thead><tr><th width="190">Field</th><th>Description</th></tr></thead><tbody><tr><td>Name</td><td>The name configured for the widget. The widget's ID is also provided directly under the widget name.</td></tr><tr><td>Type</td><td>The widget's type that was selected when the widget was created (Standard Consent, Consent or Pay, etc...)</td></tr><tr><td>Consent flows</td><td>Consent flows where the widget is currently applied</td></tr><tr><td>Last edit</td><td>Last recorded edit that was saved for the widget</td></tr><tr><td>Status</td><td>Draft | Active. Designates whether the widget is currently used in a consent flow that is actively published.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Widgets with Active status cannot be deleted.</mark></td></tr></tbody></table>

<figure><img src="/files/ay3DcgL8RcOFctAomjhf" alt="" width="563"><figcaption></figcaption></figure>


# Create privacy widget

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

Widgets are interface templates that are surfaced to end-users in a consent flow in order to collect consent and/or refusal actions. In this article, we will cover how to create a new widget in your organization's Didomi account.

Click **Widgets** on the left-hand panel and select **Create a widget** on the subsequent page.

<figure><img src="/files/QMBuXJ8BKhIBsohx3EcI" alt="" width="563"><figcaption></figcaption></figure>

Use the following modal to select a type for your widget and click **Go to next step** when finished.&#x20;

{% hint style="info" %}
Additional premium widget types are available (e.g. consent or pay). Please speak to your account representative for more information.
{% endhint %}

<figure><img src="/files/fYcM8ZAhydZQcI1TS4A1" alt="" width="563"><figcaption></figcaption></figure>

Next, select the style of template for the widget (pop in, top banner, bottom banner) and click **Create a widget**.&#x20;

<figure><img src="/files/4zfpj6sMJddjJOI0k8d0" alt="" width="563"><figcaption></figcaption></figure>

Your new widget will be created and added to your organization. Further customize the widget if necessary by utilizing the [widget editor](/widgets/widget-editor).


# Edit privacy widget

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

Widgets are interface templates that are surfaced to end-users in a consent flow in order to collect consent and/or refusal actions. In this article, we will cover how to edit an existing widget in your organization's Didomi account.

Click **Widgets** on the left-hand panel and select the **Edit** icon inline with the widget name.

<figure><img src="/files/ZE1Zd6kNx7nzYeesQObC" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Note**: The Type and template style (pop in, top banner, bottom banner) cannot be edited once a widget is created.
{% endhint %}

Utilize the [widget editor](/widgets/widget-editor) to perform any necessary edits to the widget and click **Save** when finished.

<figure><img src="/files/FEskxOs0sJMnvDJqlwX4" alt="" width="563"><figcaption></figcaption></figure>


# Delete privacy widget

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

In this article, we will cover how to delete an existing widget in your organization's Didomi account.

{% hint style="warning" %}
**Note**: Widgets with an Active status cannot be deleted
{% endhint %}

Click **Widgets** on the left-hand panel and select the **Delete** icon inline with the widget name.

<figure><img src="/files/WRcQCCAEqImWyCeSYpCP" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the widget in the subsequent modal and click **Yes, delete**.

<figure><img src="/files/83byd62GW4j3968iYWEy" alt="" width="426"><figcaption></figcaption></figure>

The widget will be deleted from your Didomi account.


# Widget editor

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

Widgets are configurable UI templates that help your organization collect and manage end-user consent and privacy preferences across your applications. Utilizing the component library your organization can create fully customized and modular interfaces that can be deployed across multiple consent flows.

Widgets can be customized with different texts, buttons, and behaviors to match your specific use cases like age verification (underage) or Global Privacy Control (GPC) compliance.&#x20;

Access the editor for a widget by clicking **Widgets** on the left-hand panel and selecting the **Edit** icon inline with the widget name

<figure><img src="/files/ZE1Zd6kNx7nzYeesQObC" alt="" width="563"><figcaption></figcaption></figure>

Review the table below on the available resources Didomi provides regarding different elements of the widget editor:

<table><thead><tr><th width="220">Edit</th><th>Description</th></tr></thead><tbody><tr><td>Widget name</td><td>Name of the widget. To change the name of the widget, click the <strong>Edit</strong> icon inline with the name and use the provided field to configure a new name</td></tr><tr><td><a href="/pages/0TXrFfTyV4Pa7Z643xYu">Widget layers</a></td><td>Enables your organization to customize multiple layers that an end-user can interact with. </td></tr><tr><td><a href="/pages/PwOvlHz0nMYx3ueYEmQh">Components</a></td><td>Modules that are added to widget layers to customize the end-user interface. </td></tr><tr><td><a href="/pages/LCzpWS9cMlczrfBo1hUY">Preview</a></td><td>Toolbar that allows your organization to adjust the widget preview window (e.g. brand, screen size, translation, etc...)</td></tr><tr><td><a href="/pages/qHBG29SqieEJy2a2yJaf">Translation</a></td><td>Manage multiple translations for the widget</td></tr></tbody></table>

Regardless of whichever template (pop in, top banner, bottom banner) you start your widget from, Didomi will provide pre-configured layers with components to help your organization get started.

<figure><img src="/files/R8Y8P5hdPH5ryLqMuspJ" alt="" width="563"><figcaption></figcaption></figure>


# Widget components

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

Utilizing the component library your organization can completely customize the layout of a [widget layer](/widgets/widget-editor/manage-widget-layers) by adding and rearranging the components into a specified end-user interface. In this article, we will cover the following:

* [Component glossary](#component-glossary)
* [Add widget component](#add-widget-component)
* [Remove widget component](#remove-widget-component)
* [Move widget component](#move-widget-component)
* [Component settings](#component-settings)
* [Component style ](#component-style)

To start, click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
For every new widget created, Didomi will provide multiple layers pre-populated with components.&#x20;
{% endhint %}

***

### Component glossary

The left-hand panel on the subsequent page is the component library and the following components can be added and configured to a widget layer:

<figure><img src="/files/aptwawBARdikHoRYOZnx" alt="" width="563"><figcaption></figcaption></figure>

<table><thead><tr><th width="196">Component</th><th>Description</th></tr></thead><tbody><tr><td>Column</td><td>Adds a flexible row container that arranges its children elements vertically.</td></tr><tr><td>Row</td><td>Adds a flexible row container that arranges its children elements horizontally.</td></tr><tr><td>Container</td><td>Adds a flexible container that supports responsive styling</td></tr><tr><td>Heading</td><td>Inserts a header that renders the appropriate HTML heading element (h1-h6) </td></tr><tr><td>Text</td><td>Inserts a block of text</td></tr><tr><td>Accept All</td><td>Inserts a button that grants consent to all vendors and purposes included in the consent flow</td></tr><tr><td>Reject All</td><td>Inserts a button that rejects all vendors and purposes included in the consent flow</td></tr><tr><td>Save</td><td>Inserts a button that saves the end-users choices</td></tr><tr><td>Redirect</td><td>Inserts a button that redirects to a designated URL</td></tr><tr><td>Custom Action</td><td>Inserts a button that executes an action defined in your website or mobile application code. The action is identified via the <strong>Action Name</strong>.</td></tr><tr><td>Switch Layer</td><td>Inserts a navigational button that enables an end-user to navigate to a specified layer in the widget</td></tr><tr><td>Back Button</td><td>Inserts a navigational button that enables an end-user to return to the previous layer of the widget</td></tr><tr><td>Image</td><td>Displays a hosted image </td></tr><tr><td>Logo</td><td>Displays the brand logo configured for the brand used in the consent flow</td></tr><tr><td>Stack List</td><td>Displays grouped TCF purposes configured for the Transparency and Consent Framework (TCF). Information populated in the widget preview is example data only.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: This component is only applicable in consent flows that utilize the Transparency and Consent Framework (TCF) when supporting GDPR. It will be empty if applied to other regulations or frameworks (e.g. CPRA)</mark></td></tr><tr><td>Purpose List</td><td>Displays purposes with expandable descriptions that are included in the consent flow<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Information populated in the widget preview is example data only.</mark></td></tr><tr><td>Vendor List</td><td>Displays vendors and their respective information that are included in the consent flow<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Information populated in the widget preview is example data only.</mark></td></tr><tr><td>User Info</td><td><p>A collapsible accordion that displays the following end-user information:</p><ul><li>User ID</li><li><a href="/pages/ti4kqkczqKkPqdOQ10Pu">Didomi consent string</a></li></ul></td></tr></tbody></table>

### Add widget component

To add a component to a widget, navigate to the component library and locate the component you wish to add. Drag and drop the component into its desired location within the widget preview window.

{% hint style="info" %}
Guide lines in the widget preview window will assist you in understanding the exact placement of the component in the component hierarchy and in relation to other components.&#x20;
{% endhint %}

<figure><img src="/files/IRC6BmiYk3cRkk7Gznmo" alt="" width="563"><figcaption></figcaption></figure>

### Remove widget component

To remove a component from a widget, navigate to the widget preview and select the component. With the component highlighted, click the **Delete** icon in the upper right-hand corner of the component.

<figure><img src="/files/TITn9w6zQxztrw6VvNVA" alt="" width="563"><figcaption></figcaption></figure>

### Move widget component

To move a component to a different position in the widget, navigate to the widget preview and select the component. With the component highlighted, click and hold the **Drag to move** icon.

Drag and drop the component to its new position within the widget preview window.&#x20;

{% hint style="info" %}
Guide lines in the widget preview window will assist you in understanding the exact placement of the component in the component hierarchy and in relation to other components.&#x20;
{% endhint %}

<figure><img src="/files/hbsAVfuUgXiyg9ubD2pk" alt="" width="563"><figcaption></figcaption></figure>

### Component settings

The settings tab of a component enables your organization to customize aspects like the content, icons, button variants, etc... of the component.&#x20;

{% hint style="info" %}
The available settings for each component varies and some components do not have any settings that can be configured.
{% endhint %}

Configure settings for any component by navigating to the widget preview and selecting a component.&#x20;

With the component highlighted, navigate to the right-hand panel and ensure the **Settings** tab is selected.

<figure><img src="/files/VAO5EIV2ypobi0SI8GnE" alt="" width="563"><figcaption></figcaption></figure>

Expand any accordion in the settings menu and use the provided options to configure the details for that specific setting. The widget preview window will automatically reflect changes made to the setting.

<figure><img src="/files/4ZQJQ7fZz5dwE5UbtbH9" alt="" width="563"><figcaption></figcaption></figure>

### Component style&#x20;

The style tab of a component allows your organization to override any style/design elements configured for the brand. When a brand and widget are utilized within a consent flow, the style configured for the widget will take precedence and the brand style will be the default if no override styling is available.

{% hint style="info" %}
Use the style tab to override any brand styling when configuring breakpoints/layout shifts. [Click here](/widgets/widget-editor/configure-widget-breakpoints) for more information.
{% endhint %}

Configure styling for any component by navigating to the widget preview and selecting a component. With the component highlighted, navigate to the right-hand panel and click the **Style** tab.&#x20;

<figure><img src="/files/sb2IdTEZQqLf1qmKmVmu" alt="" width="563"><figcaption></figcaption></figure>

Use the provided fields and accordions to adjust the styling of the component. Any changes will impact the selected breakpoint.

<figure><img src="/files/EW8xceK6qlveDvXiVHne" alt="" width="563"><figcaption></figcaption></figure>


# Widget translations

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

The widget can be surfaced to end-users in a variety of supported languages. In this article, we will cover the following:&#x20;

* [Widget translation behavior](#widget-translation-behavior)
* [Configure default and enabled languages](#configure-default-and-enabled-languages)
* [Add component translations](#add-component-translations)

To start, click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

***

### Widget translation behavior

Once a consent flow is published and implemented on your website and/or application, the widget will be displayed in one of the following ways:

<table><thead><tr><th width="273">Support</th><th>Description</th></tr></thead><tbody><tr><td>End-user browser/device language supported</td><td>Widget components will be automatically translated for the end-user.<br><br><mark style="background-color:$warning;"><strong>Note</strong>: Any components that do not have translations will be rendered in the specified default language.</mark></td></tr><tr><td>End-user browser/device language not supported</td><td>All widget components will be rendered in the default language.</td></tr></tbody></table>

{% hint style="info" %}
Didomi sets the default language for widgets to English unless edited otherwise.
{% endhint %}

### Configure default and enabled languages

From the widget editor page, navigate to the widget layers section and click the **Languages** button.

<figure><img src="/files/fIF0LLXU856VwbNjGiYi" alt="" width="563"><figcaption></figcaption></figure>

In the subsequent modal, navigate to the **Enabled languages** field and use the drop-down menu to select all the languages the widget will support (this should include the language your organization plans to set as the default language).

<figure><img src="/files/ENxAYwlLQQRyGAPzXXnj" alt="" width="335"><figcaption></figcaption></figure>

Next, navigate to the **Default language** field and use the drop-down menu to select which of the enabled languages will be used as the default language (*i.e. the language used for widget components if the end-user's browser/device language is not supported or if a translation for the component has not been configured*).

<figure><img src="/files/MBfojcV5F5QWqILfYGW8" alt="" width="321"><figcaption></figcaption></figure>

Click **Save** when finished.

### Add component translations

Once a widget's default and enabled languages have been configured, your organization can proceed with adding the necessary translations to each component that requires a translation.

Navigate to the widget preview toolbar and use the language preview drop-down menu to select a language.&#x20;

<figure><img src="/files/JGAl9jpjmQZpm0D1r0Jf" alt="" width="563"><figcaption></figcaption></figure>

Click a component in the widget preview window and ensure the **Settings** tab is selected in the right-hand panel.

<figure><img src="/files/XXLsP1CpZynnGLUo5KqV" alt="" width="563"><figcaption></figcaption></figure>

Expand the **Content** accordion and use the provided field to input the translation of the content in the specified language.

<figure><img src="/files/XeHnDAdh2IX6bJQVbdLs" alt="" width="563"><figcaption></figcaption></figure>

The component will be translated in the widget preview window.

{% hint style="info" %}
In the widget preview window, untranslated components will be rendered in the default language&#x20;
{% endhint %}

Repeat as necessary for every component across all layers in the widget


# Widget macros

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

Macros are variables that your organization can insert into text components of widgets. Once inserted into a text component, the macro will automatically retrieve the appropriate information for the macro and insert it into the text. In this article we will cover:

* [Widget macro glossary](#widget-macro-glossary)
* [Insert macro into widget text](#insert-macro-into-widget-text)

{% hint style="info" %}
Macros are identified by the use of curly brackets {}, for example: {numberofPartners}.
{% endhint %}

***

### Widget macro glossary

The following macros are currently available by default and can be inserted into text components:

<table><thead><tr><th width="247">Macro</th><th>Description</th></tr></thead><tbody><tr><td>{privacyPolicyURL}</td><td>Inserts the privacy policy URL configured for the brand used in the consent flow</td></tr><tr><td>{websiteName}</td><td>Inserts the company name configured for the brand used in the consent flow</td></tr><tr><td>{numberOfPartners}</td><td>Inserts the total number of vendors added to the consent flow</td></tr><tr><td>{numberOfIABPartners}</td><td>Inserts the total number of IAB vendors added to the consent flow</td></tr><tr><td>{numberofNonIABPartners}</td><td>Inserts the total number of non-IAB vendors added to the consent flow</td></tr></tbody></table>

### Insert macro into widget text

To insert a macro, click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

Add a text component to the widget or select an existing text component in the widget in the preview window.

<figure><img src="/files/Evos59rRmCus4lKy9vws" alt="" width="563"><figcaption></figcaption></figure>

With the text component selected in the preview window, ensure the **Settings** tab is selected in the right-hand panel and expand the **Content** accordion. &#x20;

<figure><img src="/files/wRaCpytYBb0YtrCAOARN" alt="" width="563"><figcaption></figcaption></figure>

Position the cursor in the text field where the macro should be added and click the **{}** icon in the toolbar.

<figure><img src="/files/eGrrbnLpisZVeoakGl1G" alt="" width="286"><figcaption></figcaption></figure>

Select a macro from the drop-down menu.

<figure><img src="/files/AwHk4CtcqDorGKb0wadJ" alt="" width="297"><figcaption></figcaption></figure>

The selected macro will be inserted the text component. Click **Save** to confirm the edit.


# Manage widget layers

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

A layer is a specific interface within the widget to which an end-user can navigate. In this article we will cover how to do the following for an existing widget:

* [Add a widget layer](#add-a-widget-layer)
* [Edit widget layer name](#edit-widget-layer-name)
* [Delete widget layer](#delete-widget-layer)
* [Duplicate widget layer](#duplicate-widget-layer)

{% hint style="info" %}
For any newly created widget, Didomi provides a number of default layers to help your organization get started. These default layers can be customized with components, renamed, and/or deleted.&#x20;
{% endhint %}

To start, click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

***

### Add a widget layer

{% hint style="warning" %}
**Note**: There is a maximum of 4 layers per widget.
{% endhint %}

Navigate to the widget layers panel at the top of the widget editor and click the **+** icon.

<figure><img src="/files/ku1WdkHI7n6L222MMqiU" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent modal to give the layer a name and to select the format of the layer (pop in, top banner, etc... and click **Save** when finished.

{% hint style="info" %}
The layer does not have to match the current format of the widget.
{% endhint %}

<figure><img src="/files/cKALrGU5S9WBu3LHXV8a" alt="" width="256"><figcaption></figcaption></figure>

The layer will be added to the widget and your organization can use the [component library](/widgets/widget-editor/widget-components) to customize the interface of the layer.

### Edit widget layer name

Navigate to the widget layers panel at the top of the widget editor and select a layer. Click the ellipsis icon inline with layer name and select **Edit layer name** from the drop-down menu.

<figure><img src="/files/jo1rvXndBvVvz8zgSfoE" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent modal to input the name of the layer in the provided field. Click **Save** when finished.

<figure><img src="/files/dOx1WnFIdw4eaHVqsE9u" alt="" width="266"><figcaption></figcaption></figure>

### Delete widget layer

Navigate to the widget layers panel at the top of the widget editor and select a layer. Click the ellipsis icon inline with layer name and select **Delete layer** from the drop-down menu.

<figure><img src="/files/5sVQxxUrHZCvRSMcilXn" alt="" width="563"><figcaption></figcaption></figure>

Confirm the decision to delete the layer in the subsequent modal and click **Yes, delete**.

<figure><img src="/files/uagn1Vni17ppTrmlsXv3" alt="" width="311"><figcaption></figcaption></figure>

### Duplicate widget layer

{% hint style="warning" %}
**Note**: There is a maximum of 4 layers per widget.
{% endhint %}

Navigate to the widget layers panel at the top of the widget editor and select a layer. Click the ellipsis icon inline with layer name and select **Duplicate layer** from the drop-down menu.

<figure><img src="/files/pXdcxSytkoTZmvDBXnym" alt="" width="563"><figcaption></figcaption></figure>

The layer and all of its configured components will be duplicated for the widget. The name of the layer will be the name of the original layer suffixed with **-Copy**.

<figure><img src="/files/y7xSoteG28o2BQnenHZh" alt="" width="563"><figcaption></figcaption></figure>


# Widget preview

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

The widget preview toolbar controls the presentation of the widget preview window and enables your organization to preview how your widget configurations will look across different brands, devices, etc... In this article, we will cover the different elements of the widget preview toolbar.

* [Brand preview](#brand-preview)
* [Device preview](#device-preview)
* [Language preview](#language-preview)
* [Settings](#settings)

To start, click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

The widget preview toolbar and preview window are the central panels on the subsequent page.

<figure><img src="/files/pRA3rOgZuX427b9lAAGm" alt="" width="563"><figcaption></figcaption></figure>

***

### Brand preview

The brand preview option enables your organization to preview how the layer will look in conjunction with a particular brand when applied together in a consent flow. To change the brand preview in the window, use the provided drop-down menu to select any previously configured brand.

<figure><img src="/files/Nw0rhdadc7yPFKxD8pA1" alt="" width="563"><figcaption></figcaption></figure>

The preview window will automatically adjust to show the current layer with the specified brand.

### Device preview

The device preview option enables your organization to view how the layer will look across different device sizes.&#x20;

To change the device preview in the window, use the provided icons to select between the different screen sizes. The size for each screen is defaulted to the breakpoints configured for the brand that you are currently previewing.

<figure><img src="/files/eXuiocUnlpQnLEmCCLha" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
[Click here](/widgets/widget-editor/configure-widget-breakpoints) for information on how to configure breakpoints/layout shifts for different device sizes.
{% endhint %}

### Language preview

The language preview option enables your organization to toggle the layer between different enabled languages for the widget.&#x20;

To change the brand language in the window, use the provided drop-down menu to select any previously enabled languages.

<figure><img src="/files/Te4U9XPGJTFVMG5OtAeW" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
The language preview is also the method used to provide translation of text components for any enabled languages. [Click here](/widgets/widget-editor/widget-translations) to learn more about widget translations.
{% endhint %}

### Settings

The settings tab of the widget preview toolbar enables your organization to apply guidelines and other tooling that can help you in the configuration process of a widget layer.&#x20;

Access the settings for the widget preview by clicking the :gear:icon in the widget preview toolbar.

<figure><img src="/files/Zj2aB2JTB9VzFqpfAs9Y" alt="" width="563"><figcaption></figcaption></figure>

The following settings can be applied to the widget preview window. Toggle each setting to enable or deactivate it in the preview window.

<table><thead><tr><th width="208">Setting</th><th>Description</th></tr></thead><tbody><tr><td>Highlight all components</td><td>Displays a visual outline around all components in the preview window to help identify their boundaries.</td></tr><tr><td>Show preview indicators</td><td>Displays the layer and breakpoint indicators in the preview window corners.</td></tr><tr><td>Show component hierarchy</td><td>Displays a breadcrumb bar showing the selected component's hierarchy path. Click ancestors to navigate up.</td></tr><tr><td>Interactive mode</td><td>When enabled, clicking on components interacts with them (expand, buttons, etc.) instead of selecting them for editing.</td></tr><tr><td>Custom font URL</td><td>Since the widget inherits fonts from the page on which it is embedded, use the provided field to load and preview a specific font.</td></tr></tbody></table>


# Configure widget breakpoints

{% hint style="success" %}
**Access Type**: Widgets - Editor
{% endhint %}

A responsive breakpoint is a specific screen width where the widget's layout will change in order to better fit the device on which it is viewed. In this article, we will cover how to edit an existing widget so that its layout adjusts per screen size.

Click **Widgets** on the left-hand panel and select the **Edit** icon inline with a widget name.

<figure><img src="/files/5v8XgXQ3a2Lajez6F8DG" alt="" width="563"><figcaption></figcaption></figure>

Navigate to the widget preview toolbar to select the [device](/widgets/widget-editor/widget-preview#device-preview) for which you are adjusting the layout of the widget. The breakpoint for each screen size is inherited from the current [brand preview](/widgets/widget-editor/widget-preview#brand-preview) in the widget editor.

{% hint style="warning" %}
**Note**: While this step is not required to successfully configure a widget breakpoint, it will enable your organization to visualize how your configuration is affecting the design of your widget for that screen size.&#x20;
{% endhint %}

<figure><img src="/files/Downm809DoTKX7gTIvE0" alt="" width="563"><figcaption></figcaption></figure>

Select a component from the widget preview window. With the component highlighted, navigate to the right-hand panel and click the **Style** tab.&#x20;

<figure><img src="/files/AoESCtuy2W2gfrYO2SJc" alt="" width="563"><figcaption></figcaption></figure>

Use the **Breakpoints** drop-down menu to select a specific breakpoint that you wish you configure.&#x20;

<figure><img src="/files/A1jT6Mdm5pFH3i7Epoh5" alt="" width="337"><figcaption></figcaption></figure>

With the breakpoint select, expand the **Global** accordion and use the provided fields to edit the styling of the widget for the breakpoint.

<figure><img src="/files/GX92mb6FlP2kCrXsE0KE" alt="" width="328"><figcaption></figcaption></figure>

Repeat as necessary for other components in each layer of the widget.


# Introduction

The Didomi Consent Management Platform (CMP) enables your organization to collect, transmit, and manage end-user consents provided on your websites/applications. It can be implemented across a variety of platforms (*e.g. web, app, CTV*) and integrates with regulatory (*e.g. GDPR, CPRA*) and industry frameworks (*e.g. IAB TCF, Google Consent Mode*).


# Consent Management Platform (CMP) implementation overview

This guide provides an overview of the key steps for implementing Didomi, including auditing your website, creating a consent notice, managing vendors, configuring tags, and optimizing consent collect.

* [Audit website](#audit-website)
* [Create consent notice ](#create-consent-notice)
* [Manage vendor list](#manage-vendor-list)
* [Configure tag management](#configure-tag-management)
* [Deploy and test](#deploy-and-test)
* [Optimize banner format](#optimize-banner-format)
* [Consent management](#consent-management)
* [Check implementation](#check-implementation)

It serves as a roadmap, pointing you to detailed documentation links for each step. While designed for standard implementation projects, additional steps may be required for advanced setups, such as premium features, mobile application integration or CTV.&#x20;

***

### **Audit website**

{% hint style="info" %}
This step is optional. It is a helpful addition, but not required to set up Didomi on your site.
{% endhint %}

* [Run your compliance report](/tracker-and-vendor-discovery/tracker-and-vendor-discovery-domains): Didomi automatically generates a compliance report for your main domain. If you wish to get more reports, you can run it manually and our bot will scrap random pages according to the number set in the report settings.
* [Visualize results](/tracker-and-vendor-discovery/tracker-and-vendor-discovery-results/tracker-and-vendor-discovery-results-overview):  Learn how to identify the trackers present on your site and evaluate their compliance.

### **Create consent notice**

* [Create a consent notice:](/consent-management-platform-cmp/consent-notices) Follow step-by-step instructions to design and customize your consent notice.

### **Manage vendor list**

Didomi includes several available partners (Facebook, Twitter, and WhatsApp). Default purposes are automatically assigned to those existing vendors and cannot be directly modified or removed.

If you prefer not to use this list of purposes or vendors:

* [Create a custom purpose](/data-manager/purposes/create-custom-purpose): Learn how to define specific purposes for collecting and processing user data that are unique to your business needs.
* [Create a custom vendor](/data-manager/vendors/create-custom-vendor): Set up custom vendors not already included in Didomi’s vendor list.
* Create categories for purpose: Organize your purposes and vendors into meaningful categories for better user navigation and clearer consent choices.
* Create a required purpose for necessary cookies: Ensure cookies essential for site functionality are categorized appropriately and marked as required.

### **Configure tag management**

To ensure tags are fired and cookies are deposited only if the user has given consent, you need to properly configure your tag setup.

* [Use Google Tag Manager](/integrations/google/block-tags-with-google-tag-manager-integration): Configure tags dynamically through GTM.
* [Other Tag managers ](https://developers.didomi.io/cmp/web-sdk/third-parties/tags-management/tag-managers)
* [Hardcoded Tags](https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager): If tags are directly integrated into your HTML, you can use Didomi’s SDK to control the loading of scripts based on consent.&#x20;

**Direct Integration**

* [Understand IAB TCF Integration](https://support.didomi.io/iab-integration): Share user consent status automatically with IAB vendors selected in the Didomi console. This means you won’t need to manage tags to prevent them from firing before user consent through your CMP.
* [Configure Google Consent Mode](/consent-management-platform-cmp/frameworks-regulations/google-consent-mode-v2): Enable Google services to respect user consent for advertising and analytics.
* [Understand Google Advertising Products as a Vendor](/integrations/google/google-advertising-products): Gain insight into managing Google’s advertising products within the IAB framework.

### **Deploy and test**

Deploy Didomi script on every domain you want

* [CMP Web SDK: ](https://developers.didomi.io/cmp/web-sdk/getting-started)Explore technical documentation for integrating and customizing the web SDK.

### **Optimize banner format**

The best performing format is the **pop-up banner** appearing in the center of the page, blocking navigation while no consent choice has been made.&#x20;

Consent notices with a “**Continue Without Agreeing”** link instead of the “Disagree” button may increase your consent rate.

For creative inspiration on cookie banners, explore our article featuring innovative examples and best practices: [Didomi's Creative Cookie Banners.](https://www.didomi.io/blog/cookie-banners-creative-examples)

[Data Privacy Benchmark](http://www.didomi.io/consent-rate-benchmark): Understand industry benchmarks to measure and improve your consent collection practices.

{% hint style="info" %}
Consult with a legal advisor before finalizing your banner format. In some countries, such as Italy, pop-ups are discouraged.
{% endhint %}

### Consent management

* Ensuring Vendor Tags Respect User Consent: Didomi’s CMP ensures that vendor tags and SDKs are only triggered when both the vendor and all associated purposes receive user consent.&#x20;
* [Consent Re-collection:](/consent-management-platform-cmp/consent-notices/re-collect-consent) Consent is recollected every time new vendors or purposes are added.
* Modify the Legal Basis for Your Purposes and Remove Legitimate Interest: Adjust purposes or remove legitimate interest where applicable to align with user consent choices and compliance.
* [Delete first-party cookies from the browser](/get-started/general/delete-first-party-browser-cookies-programmatically):&#x20;

  Integrate a script to remove first-party cookies from the browser when a user initially accepts cookies but later changes their preferences to refuse them.
* **Place the link to your consent banner** in the footer of your website to ensure it is easily accessible. Please avoid adding it to the privacy policy, as it may be too difficult for users to locate.\
  Paste this code  where you want to visualise the link to re-open the notice:\
  `<a href="javascript:Didomi.preferences.show()">Consent choices</a>`

### Check implementation

Check Implementation and Cookie Behavior: Ensure your consent notice functions correctly by verifying its behavior, cookie compliance, consent updates, and vendor requests.


# CMP behavior for granular consent

Granular consent refers to the individual selections an end-user may make on one or more purposes and/or vendors in your consent notice as opposed to a single action granting or denying consent for all purposes and vendors (i.e. Accept all or Refuse all). &#x20;

<figure><img src="/files/Bjd4T7F0yuSm9hoDZlRt" alt="" width="375"><figcaption></figcaption></figure>

In this article, we will cover how the Didomi CMP behaves in regards to granular consent for the following scenarios:

* [Conditioned custom vendor tags](#conditioned-custom-vendor-tags)
* [Agree/Disagree all](#agree-disagree-all)
* [Granular consent on purposes and no choice on vendors](#granular-consent-on-purposes-and-no-choice-on-vendors)

***

### Conditioned custom vendor tags

Conditioned custom vendor tags refers to the methods your organization utilizes to control how and when custom vendors and/or SDKs are triggered for your web/mobile property in regards to end-user consent.&#x20;

<table><thead><tr><th width="264"></th><th>Description</th></tr></thead><tbody><tr><td>Custom Didomi <code>&#x3C;script></code> tags</td><td><p>Used to conditionally load JavaScript tags or other HTML elements on your page. These custom <code>&#x3C;script></code> tags are commonly used for custom vendor tags on your webpage to control when a custom vendor can trigger based on meeting required conditions. </p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><a href="https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager#consent-to-vendors">Click here</a> for more information on the custom Didomi <code>&#x3C;script></code> tags.</p></div></td></tr><tr><td>Tag manager</td><td><p>Tag managers provide a centralized platform that allows marketers and developers to deploy, manage, and update vendor scripts and analytics tags on a website without directly modifying the site's source code.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><a href="https://developers.didomi.io/cmp/web-sdk/third-parties/tags-management/tag-managers">Click here</a> for more information on tag managers.</p></div></td></tr><tr><td>Third-party SDKs</td><td>Your organization can condition custom vendor tags on your mobile app via the Didomi API. <a href="https://developers.didomi.io/cmp/mobile-sdk/third-party-sdks">Click here</a> for more information.</td></tr></tbody></table>

Custom vendor tags can be conditioned on consent to the vendor and/or consent to specific purposes.&#x20;

{% hint style="info" %}
Didomi strongly recommends conditioning your custom vendor tags based on **end-user consent to the vendor** as we feel it is is the best way for your organization to respect end-user consent choices.&#x20;
{% endhint %}

{% tabs %}
{% tab title="Recommended: Conditioned for vendor consent" %}
When conditioning a custom vendor tag based on end-user consent to the vendor the native behavior for Didomi is to check end-user consent values for the vendor first and then consent on the purposes associated with it.&#x20;

If one or more purposes for the vendor associated has not been consented to by the end-user (i.e. purpose set to `false`) then the vendor will also be set to `false`.
{% endtab %}

{% tab title="Conditioned for purpose consent" %}
If your organization decides to condition custom vendor tags based on end-user consent for specific purposes please be advised that you assume the risk of not respecting end-user consent choices. The issues arise when there is a discrepancy between the end-user's consent for the specified purposes in the condition and their consent for the vendor.

Refer to the diagram below for more information:

<figure><img src="/files/p2Cq8iA6jtomKTkdBRA1" alt="" width="563"><figcaption></figcaption></figure>

When conditioning the custom vendor tag based on end-user consent for specific purposes [Schema 3](#schema-3) and [Schema 4](#schema-4) will result in behavior that does not reflect the end-user's selections.

#### Schema 3

In this scenario, the end-user has not provided consent to the specific purpose used in your condition but has granted consent to the vendor. In this case, Didomi will set the consent status for the vendor status to `false` since at least one of the purposes specified in the condition did not have consent and the custom vendor tag will not trigger.

#### Schema 4

In this scenario, the end-user has consented to all purposes specified in the condition but has also denied consent for the vendor. In this case, Didomi will set the vendor status to `false` however, since the purpose conditions were met the custom vendor tag would still trigger.
{% endtab %}
{% endtabs %}

### Agree/Disagree all

{% hint style="info" %}
This behavior is supported for the Web SDK and for APP SDK versions later than 2.7.0 on [Android ](https://developers.didomi.io/cmp/mobile-sdk/android/versions#id-2.7.0-june-6-2024)and 2.8.0 on [iOS](https://developers.didomi.io/cmp/mobile-sdk/ios/versions#id-2.8.0-june-6-2024).
{% endhint %}

Agree all and Disagree all are one-click buttons that will automatically accept or reject all purposes and vendors associated with a consent notice, respectively. If an end-user makes granular selections on purposes and/or vendors and then subsequently selects either the Agree all or Disagree all button, Didomi will give precedence to the Agree all or Disagree all action.

<figure><img src="/files/sdnTLpujXV2qEs8Rgqzp" alt="" width="563"><figcaption></figcaption></figure>

### Granular consent on purposes and no choice on vendors

When an end-user makes granular choices on purposes but does not make any choice on vendors, Didomi will only enable vendors that have at least one purpose enabled.

<figure><img src="/files/DQBrtQ7NOUvznjvwuBeA" alt="" width="563"><figcaption></figcaption></figure>


# CMP glossary

In this article, we provide an overview of common terminology and phrases that your organization may encounter while configuring your Didomi Consent Management Platform (CMP).

{% hint style="info" %}
Utilize your browser's Find feature (`Ctrl + F` or `⌘ + F`) and search a specific term.
{% endhint %}

<table><thead><tr><th width="242">Terminology</th><th>Description</th></tr></thead><tbody><tr><td>Anonymized personal data </td><td>Personal data that has been anonymized to the extent that it cannot lead to the identification of a specific person anymore. It must be irrevocable. In this specific case, the data is not subject to regulations like GDPR anymore. </td></tr><tr><td>Consent notice</td><td>Visual component (banner or widget) deployed on website or app to request and manage cookie consent. </td></tr><tr><td>Controller representative</td><td>Also known as a "local representative," it is an entity residing in the EU who has been designated to represent a non-EU entity subject to GDPR. They do not take any decision upon the personal data use and processing.</td></tr><tr><td>Cookies</td><td>A text file dropped onto your computer by a server (for instance the one hosting your website). Cookies allow websites to keep user data.<br><br><strong>See</strong>: Technical cookies/ Essential cookies and Third-party cookies</td></tr><tr><td>Data controller</td><td>Defines the purposes and means "why" and "how" of personal data processing and bears primary GDPR responsibility.</td></tr><tr><td>Personal data</td><td><p>Any piece of information that enables one to identify a person, alone or when combined with other information (e.g. phone number, client number, card number, etc.). <a href="/pages/yt6xjYRJte7uyj4lGNzj">Click here</a> for more information</p><p><br><strong>See</strong>: Pseudonymized personal data and Anonymized personal data</p></td></tr><tr><td>Processor</td><td>An entity that acts on the data controller’s instructions to process data, such as storing or organizing it.</td></tr><tr><td>Pseudonymized personal data </td><td>Personal data that has been obfuscated so that it can't be attributed to a specific person without searching for additional information. This data is still subject to regulations like GDPR but they are considered as better protected.</td></tr><tr><td>Purpose(s)</td><td>Describes the reason your organization or its vendors is collecting the end-user's data and how your organization processes that data. <a href="/pages/SpxlbgNegz7zSV9d90J5">Click here</a> for more information.</td></tr><tr><td>Receiver</td><td><p>Any entity who receives or obtains access to personal data, whether it is a third-party or not. </p><p><br>There is an exception when some public authorities, as part of an investigation, receive data (e.g. customs, tax authority, etc...). In these cases, they are not considered receivers.</p></td></tr><tr><td>Regulation</td><td>Refers to a privacy law that has been passed in a state, country, or region. Generally, regulation laws apply to any public or private entity, whatever their size and line of business. Some examples include the General Data Protection Regulation (GDPR) in the EU and the California Privacy Rights Act (CPRA) in California, USA.</td></tr><tr><td>Tags</td><td>A code snippet which is executed on your website by a third party. Most tags are meant to send information from your website to a third-party in order for the third party to drop  cookies and process data (<em>e.g. audience measurement, retargeting, etc...</em>).</td></tr><tr><td>Technical cookies / Essential cookies</td><td>Cookies that are necessary for the proper functioning of your website. For instance, they are required to save a shopping cart, remember a website language, memorize the connection credentials, memorize the preferences for privacy, etc... It can also be statistics and audience measurements to determine the number of visitors on your website, to know which sections are visited, etc...</td></tr><tr><td>Third-party</td><td>Any natural or legal person, public authority, agency, or body—excluding the data subject, controller, or processor—that receives personal data.</td></tr><tr><td>Third-party cookies</td><td>Cookies that are dropped by your organization's vendors. The site administrator does not have any authority over these cookies since they are managed by other companies. The only person who can read or modify the cookies' information is the organization that issues them.</td></tr><tr><td>User right</td><td><p>Corresponds to the rights granted to data subjects who live in a state or country that has passed a data privacy law. Subjects or end-users must typically take some action, such as submitting a privacy request, to exercise their data rights. Most data privacy regulations provide certain user rights to consumers such as:</p><ul><li>The right of access - find out what personal data a company holds on them and to receive a copy of the data held.  </li><li>The right of deletion - erase the personal information that a company has collected from them.</li><li>The right to opt-out - withdraw their consent to the processing of their personal information (e.g., a request to “do not sell” my personal data). </li></ul></td></tr><tr><td>Vendor(s)</td><td>A third party (e.g. subcontractor or partner) who collects end-user data on your website or application through tags and cookies. <a href="/pages/xASzANXwG57sp9A9lgec">Click here</a> for more information.</td></tr></tbody></table>


# Manage vendor tags without tag management solution (TMS)

If your organization does not use or a tag management solution for vendor tags or have vendor tags that are not controlled via a tag management solution, your organization can utilize custom Didomi script tags to condition the vendor tags on your website so that they only trigger once consent has been collected.

[Click here ](https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager)for more information on how to leverage custom Didomi tags to condition your vendor tags.


# Use multiple tag managers

You can use different tag managers simultaneously on your website.&#x20;

However, it's important to carefully manage the settings to avoid conflicts between the different tag managers and ensure that the tags load correctly without interfering with each other.

To do so, add the following custom JSON in the 2.Customization step - Advanced settings - Custom json

```
{
    "tagManager": {
        "provider": "adobe|commandersact|eulerian|gtm|tealium"
    }
}
```

This will override any configuration from the Integrations tab of the Didomi console.

You can also use any tag manager at the same time as custom \<script> tags in your source code methods to conditionally manage your vendors.&#x20;

To do this, you should choose, for example, GTM integration under the 2.Customization -> Integration tab of your consent notice.


# CMP behavior with bots

#### What are bots?

👉 Bots are software applications that run automated tasks over the Internet. They are used to index internet content or to automatically gather information from websites.&#x20;

**Some bots work for legit purposes, whereas some collect data for malicious purposes, such as:**

* Content reselling
* Click generation
* Price undercutting
* Etc.

Like any client-based web solution, Didomi is impacted by the bot traffic that generates “false” data. As a consequence, it can generate inaccurate CMP analytics.&#x20;

**Impact on CMP Analytics Indicators**

The most impacted metric is the **total notices** (with an increase in volume), which directly inflates the **notice bounce rate** and **addressability rate** performance indicators.

#### Provide analytics data without bots

👉 Bots impact Web data, so they generate false user data. They deteriorate the **addressability rate,** as well as the **pageview consent rate** by increasing the volume of **notice bounces** and the number of **pageviews without consent**.

{% hint style="danger" %}
In order not to deteriorate the compliance of your reports, we advise you not to exclude all UA (user agents). These UAs can be hiding bots, but also users who have given their consent.&#x20;
{% endhint %}

**In this case, excluding UAs represents both a compliance and legal risk.**

There are two types of bots:

**Declared Bots**: they can be detected thanks to their user agent (UA). They are excluded with the user agent filtering method. A few **examples** of bots:<br>

* Scraper bots: programmed to capture the content offline, such as names, prices, and product details on e-commerce websites.
* Crawler bots: used by large companies, such as Google, Yahoo etc, for content indexing purposes.
* Performance/audit bots: used by website performance tools to perform SEO audit or to evaluate page loading time performance. Didomi also uses a bot to evaluate the compliance of websites.

**Hiding Bots**: they use standard user agents and therefore can’t be identified with the UA filtering method.

A specialized solution/technology is required to detect then to exclude them from analytics data.

#### Example of user agents

**Declared Bots**

* Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_15\_7) AppleWebKit/537.36 (KHTML, like Gecko) **TagInspector**/500.1 Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42
* Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) **HeadlessChrome**/85.0.4183.102 Safari/537.36
* Mozilla/5.0 (**iplabel**; Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36

**Elements** that are not part of a standard user agent.

**Hiding Bot User agents**

* Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
* Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64

Even if the user agents above are used by bots, they are also used by regular visitors: user agents can’t be excluded.

#### **Be careful with your own bots**

If you are using tools to evaluate the performance of your website: page loading time, SEO audit, etc.&#x20;

They probably use bots to do it. As a consequence, they generate data **if** they are not identified by our technology. You can:

1. Check the bots we detect ([see the list below](#didomis-bot-list)).&#x20;
2. Verify with your solutions if the bots have a UA pattern.
3. Add the patterns in your bot management custom feature.

#### Behavior of the CMP with Bots

⚙️ By default, bots will "bypass" the consent notice. And we consider that the consent is already given for the bots and all the scripts will therefore be fired. So the banner is not deployed and doesn't collect any consent from the bots.

➡️ If you need to collect consent for bots in your Consent Notice, you can follow [our Bypass consent collection for bots](https://developers.didomi.io/cmp/web-sdk/consent-notice/bots).

You can add the JSON code to your consent notice in 2.customization; Advanced settings; Custom JSON.&#x20;

Remember that, in that case, the banner is deployed for bots, but they will probably not be able to make a consent choice: there is just a consent notice with the consent string by default. No consent is collected, the bot will probably not be able to browse the website.

**Custom bot management, bypass consent collection for bots**

👉 You can directly customize the bot management with custom json in your SDK implementation.&#x20;

The features offer the following capabilities:

* Defining the category of bots to block
* Adding user agent patterns (terms) for exclusion purposes

[Here](https://developers.didomi.io/cmp/web-sdk/consent-notice/bots) are all the details in the developer documentation.

#### Didomi’s bot list

👉 +90 bots are automatically detected at the CMP level and during data cleaning processing. Below the lists of the bot patterns (terms) used to identify the bot traffic. All the visitors with a user agent containing the following terms are identified as bots.

**Crawler bots**

Googlebot, adsbot, feedfetcher, mediapartners, bingbot, bingpreview, slurp, linkedin, msnbot, teoma, alexabot, exabot, facebot,  facebook, twitter, yandex, baidu, duckduckbot, qwant, archive, applebot, addthis, slackbot, reddit, whatsapp, pinterest, moatbot, google-xrawler, NETVIGIE, PetalBot, PhantomJS, NativeAIBot, Cocolyzebot, SMTBot, EchoboxBot, Quora-Bot, BLP\_bbot, MAZBot, ScooperBot, BublupBot, Cincraw, HeadlessChrome, diffbot, Google Web Preview, Doximity-Diffbot, Rely Bot, pingbot, cXensebot, PingdomTMS, AhrefsBot, semrush, seenaptic, netvibes, taboolabot, SimplePie, APIs-Google, Google-Read-Aloud, googleweblight, DuplexWeb-Google, Google Favicon, Storebot-Google, TagInspector, Rigor, Bazaarvoice, KlarnaBot, pageburst, naver, iplabel, **plus generic terms like “robot”, “scraper”, “crawler”, “spider”, “crawling” and “oncrawl”.**

**Performance bots**

Chrome-Lighthouse, gtmetrix, speedcurve, DareBoost, PTST, StatusCake\_Pagespeed\_Indev.

#### Bot management diagram

<img src="/files/00gUr90rzlAXVzOOZVDS" alt="schema" width="323">

**(1)**  SDK is loaded

**(2)** Notice triggering rules verification:

* SDK scans the user agent to identify if it’s a bot or not.
* If a bot is detected, the behavior of the notice is defined by the notice config (trigger or not the notice).
* If the visitor is not labelled as a bot, the notice is triggered.

**(3)** CMP events (notice display) are triggered

**(4)** Data Processing (turn events into analytics)

**👉 All the events (data) collected from (identified) bots are excluded from the analytics, even if the notice has been displayed to the bot on purpose.**

**(5)** Analytics data is displayed in the dashboards

#### Bot protection tools

![schema\_1](/files/KSnOowxGaKtf4o2U0WwJ)

Some solutions are specialized in **bot detection and protection.** They protect your website from bot traffic.&#x20;

As these solutions detect bots before they reach the website (see drawing), they can prevent the bot to load any page and therefore prevent for impacting the CMP analytics data.

For more information, see solutions such as Datadome, Human, Cloudflare, Netacea, etc.


# Sharing end-user consent with vendors

When an end-user provides their consent selections in response to a Didomi consent notice that end-user consent status is transmitted to your organization's vendors in a variety of ways depending on the integrations enabled on the consent notice and/or the vendor type. Review the table below for more information:

<table><thead><tr><th width="180">Vendor type</th><th>End-user consent sharing</th></tr></thead><tbody><tr><td>IAB vendor</td><td><p>Sharing behavior for an IAB vendor is dependent on whether the consent notice is integrated with the IAB TCF:</p><ul><li><strong>IAB TCF enabled</strong>: End-user consent data is communicated via a standardized consent string (TC string) to the vendor. Vendors will retrieve information through the <code>__tcfapi</code> function</li><li><strong>IAB TCF not enabled:</strong> Vendor's tags on your website must execute custom logic that ensures they only trigger when the appropriate consent is received. This custom logic can be managed via your organization's tag management solution (TMS) or by utilizing the <a href="https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager">custom Didomi script tags</a> to condition the vendor tags on your website so that they only trigger once consent has been collected.</li></ul></td></tr><tr><td>Google ATP vendor</td><td><p>Sharing behavior for a Google ATP vendor is dependent on the kinds of integration(s) enabled for the consent notice:</p><ul><li><strong>IAB TCF enabled</strong>: End-user consent data is communicated via a standardized consent string (TC string) to the vendor. For Google ATP vendors that do not participate with the IAB TCF, <a href="/pages/BfApqPGosToPE5EdqLYw">Google's Additional Consent</a> string will be communicated.</li><li><strong>Google Consent Mode</strong>: Ensures Google vendors associated with a consent notice comply with an end-user's consent choices (called consent types) defined by Google. Consent information is communicated through modifications in tag configurations and API calls, which may involve Google Tag Manager or direct changes in the website's source code. <a href="/pages/mcXR7vNOCKSqRSbDLIij">Click here</a> for more information.</li><li><strong>No integrations enabled</strong>: Vendor's tags on your website must execute custom logic that ensures they only trigger when the appropriate consent is received. This custom logic can be managed via your organization's tag management solution (TMS) or by utilizing the <a href="https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager">custom Didomi script tags</a> to condition the vendor tags on your website so that they only trigger once consent has been collected.</li></ul></td></tr><tr><td>Global vendor</td><td>Regardless of integrations in the consent notice, any global vendor included in a consent notice will need to have its tags on your website execute custom logic that ensures they only trigger when the appropriate consent is received. <br><br>This custom logic can be managed via your organization's tag management solution (TMS) or by utilizing the <a href="https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager">custom Didomi script tags</a> to condition the vendor tags on your website so that they only trigger once consent has been collected.</td></tr><tr><td>Custom vendor</td><td>Regardless of integrations in the consent notice, any custom vendor included in a consent notice will need to have its tags on your website execute custom logic that ensures they only trigger when the appropriate consent is received. <br><br>This custom logic can be managed via your organization's tag management solution (TMS) or by utilizing the <a href="https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager">custom Didomi script tags</a> to condition the vendor tags on your website so that they only trigger once consent has been collected.</td></tr></tbody></table>


# Share end-user consent across multiple domains

{% hint style="success" %}
**Access Type:** Consent Notices - Editor
{% endhint %}

Didomi supports sharing end-user consent across multiple domains via a "group cookies" configuration that is stored and shared from a sub-domain that is delegated to Didomi. In this article, we will cover the following requirements to enable this configuration:

* [Prerequisites](#prerequisites)
* [Considerations](#considerations)
* [Customize consent notice content](#customize-consent-notice-content)
* [Enable group cookies for consent notice](#enable-group-cookies-for-consent-notice)

***

### Prerequisites

Before continuing with the configuration to share end-user consent across multiple domains, your organization will need a subdomain that you own which is then delegated to Didomi. This delegated domain is then used to store and share end-user consent across configured websites.

* [Delegate custom domain](/organization-and-account-settings/domains)

{% hint style="warning" %}
**Note**: End-user consents are only shared with domains that enable the group cookies configuration using the specified domain.
{% endhint %}

### Considerations

When implementing the methodology included in this article, be aware of the following changes and/or limitations to your implementation:

<table data-header-hidden><thead><tr><th width="220"></th><th></th></tr></thead><tbody><tr><td>Third-party cookie limitations</td><td>The methodology included in this article is dependent on browsers accepting third-party cookies. More browsers, by default, are blocking the use of third-party cookies. Therefore, end-users browsing with default settings on Safari, Firefox, or Chrome on iOS, or end-users who have blocked third-party cookies, will not be able to store third-party cookies in their browser. Didomi will fall back to using first-party cookies when third-party cookies are not available.</td></tr><tr><td>Switching from first-party cookies</td><td>If you organization is already using Didomi with first-party cookies (the default behavior) and decide to switch to third-party cookies, the consent notice will be displayed to all visitors again to recollect consent.</td></tr><tr><td>Load time</td><td>Sharing consent between domains increases the load time of the SDK as it involves additional asynchronous operations for reading and writing consent from a different domain.</td></tr></tbody></table>

### Customize consent notice content

When sharing end-user consent across domains your organization will need to inform its end-users via the consent notice. The following information should be included in the consent notice:

* Statement that end-user consent is shared across multiple websites
* List of websites and legal entities where end-user consent is shared

To edit the content of an existing consent notice, click **Consent notices** on the left-hand panel and select the **Edit** icon inline with a consent notice name.

<figure><img src="/files/Mf3gdzbQsXM82jcPvAsB" alt="" width="563"><figcaption></figcaption></figure>

Click the **Customization** tab and select to the **Content editor** sub-tab on the subsequent page.&#x20;

<figure><img src="/files/drxFwOlgVCtM4hRybC3z" alt="" width="563"><figcaption></figcaption></figure>

Navigate to the appropriate layer where your organization plans to inform the end-user about consent sharing and use the text field in the editor to include the information.

<figure><img src="/files/nIYtZwTpE8ddG8eiF3PX" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
If your organization uses different consent notices for the websites that will share the end-user consent, then you must include the text informing end-users of the sharing to each of those consent notices.
{% endhint %}

### Enable group cookies for consent notice

With the consent notice updated to inform end-users of consent being shred across domains, your organization will need to update the consent notice configuration to indicate that the consent notice is using group cookies and from where the end-user's consent is stored and shared.

Review the tabs below to learn more about how to enable group cookies from either the Didomi console or directly on page:

{% tabs %}
{% tab title="Didomi console" %}
From the consent notice, click **Advanced settings** in the upper right-hand corner and select **Custom JSON** from the drop-down menu.

<figure><img src="/files/Y5LzVlzJ2UpZybrgvodn" alt="" width="563"><figcaption></figcaption></figure>

Use the subsequent field to enable group cookies and to input the delegated domain that will be used to store and share the end-user consent cookie.

```json
{
    "cookies": {
      "group": {
        "enabled": true,
        "customDomain": "privacy.your-domain.com"
      }
    }
}
```

Click **Save** when finished.

<figure><img src="/files/XCxEcEm782vcPNWfm7DH" alt="" width="563"><figcaption></figcaption></figure>

Publish your consent notice.&#x20;

{% hint style="info" %}
If your organization uses different consent notices for the websites that will share the end-user consent, then you must enable group cookies for each of those consent notices.
{% endhint %}
{% endtab %}

{% tab title="On-page" %}
If your organization is managing consent notice configuration directly on-page for your websites, your organization should use the `window.didomiConfig` object to enable group cookies and input the delegated domain that will be used to store and share the end-user consent cookie.

```
<script type="text/javascript">
  window.didomiConfig = {
    cookies: {
      group: {
        enabled: true,
        customDomain: 'privacy.your-domain.com'
      }
    }
  };
</script>
```

{% hint style="info" %}
This configuration should be added to every website included in the group of domains that are sharing end-user consents.
{% endhint %}
{% endtab %}
{% endtabs %}


# Share end-user consent with sub-domains

When the Didomi web SDK is installed on a domain (e.g. `domain.com`), an end-user's consent (stored in a cookie) is automatically shared with that domain's sub-domains (e.g. `auto.domain.com`, `shop.domain.com`).&#x20;

{% hint style="info" %}
[Click here](/consent-management-platform-cmp/introduction/share-end-user-consent-across-multiple-domains) for more information if your organization needs to share end-user consent across different domains (e.g. `otherdomain.com`).
{% endhint %}


# Share end-user consent across devices

{% hint style="info" %}
⚠️ Cross-device is a premium feature
{% endhint %}

The Didomi CMP supports syncing to allow consent sharing across devices and environments.

Consent can be shared between all environments that have syncing enabled in the same organization:

* Multiple apps (same or multiple devices);
* Multiple websites;
* Apps together, etc.

#### Enable Cross Device in your Consent Notice

1. Go to your Didomi Console.
2. On the left menu, click on **Consent Notices**.\
   ![cross\_device\_1](https://support.didomi.io/hs-fs/hubfs/cross_device_1.png?width=329\&name=cross_device_1.png)
3. Click on **+ CREATE NOTICE** (or edit an existing notice).
4. Go to the 1. **Regulations** step and then to the **Consent Settings** tab.
5. Scroll down to the **Cross-device Consent** section.
6. Click on **Enable cross-device consent.**
7. Enter the **time-out** duration you wish.
8. Remember to **“save”** and **“publish”** once the changes are made.<br>

   <figure><img src="https://support.didomi.io/hs-fs/hubfs/Cross%20device.png?width=688&#x26;height=587&#x26;name=Cross%20device.png" alt=""><figcaption></figcaption></figure>

If you can't see this box, and assuming that the functionality is enabled for your account (you can check it in the Marketplace section from the left menu), it's still possible to set up the time-out in JSON (cf [our developer documentation](https://developers.didomi.io/cmp/web-sdk/share-consents-across-devices#sync-timeout)).

In all cases you will have to set up the frequency, etc, from the JSON field.

⇒ If you would like more information about Cross-device feature, do not hesitate to read our [blog post](https://blog.didomi.io/en/cross-device) and our [developer documentation.](https://developers.didomi.io/cmp/web-sdk/share-consents-across-devices)


# Vendor cookies dropped before end-user consent

If your organization identifies vendors dropping cookies on end-user devices before the end-user provides their consent selections it can be due to a few reasons. In this article, we provide an overview for why a vendor may be dropping certain cookies before end-user consent:

* IAB vendor using legitimate interest
* Vendor misconfiguration

***

### IAB vendor using legitimate interest

Legitimate interest is a legal basis under the General Data Protection Regulation (GDPR) that permits the processing of personal data without consent where a controller or third party has a genuine interest in doing so, the processing is necessary to achieve that interest, and that interest is not overridden by the rights and freedoms of the data subject.

IAB vendors automatically receive the TC String and drop their cookies according to the end-user's consent status. IAB vendors who utilize legitimate interest as a legal basis for certain purposes (declared when they register for the IAB TCF Global Vendor List) can drop cookies on an end-user's device prior to the end-user providing consent.&#x20;

{% hint style="info" %}
Despite the IAB vendor's purpose declarations, your organization can override these settings directly from the consent notice configuration.&#x20;
{% endhint %}

Your organization can inspect whether an IAB vendor is relying on legitimate interest as a legal basis for one or more purposes via the Data Manager.

Click **Data Manager** in the left-hand panel and select the **Vendors** tab on the subsequent page.&#x20;

<figure><img src="/files/6QE5kYJyyRCJ2hrYBOl2" alt="" width="563"><figcaption></figcaption></figure>

Use the provided filter and search bar to find the IAB vendor.

<figure><img src="/files/LxetY8v2BCRdQ4BOEO8f" alt="" width="563"><figcaption></figcaption></figure>

Purposes that utilize legitimate interest as a legal basis for the IAB vendor will populate in the **Opt-out purposes (based on legitimate interest)** column for the vendor.&#x20;

<figure><img src="/files/rHn6aFnrA0AruHJtWLJO" alt="" width="563"><figcaption></figcaption></figure>

### Vendor misconfiguration

Vendors who are not registered with the IAB TCF do not receive the end-user's consent status automatically. Since non-IAB vendors do not receive the end-user's consent automatically, their technology (tags) on your website need to be conditioned so that they only trigger when the appropriate end-user consent is provided.

If a non-IAB vendor's technology is not properly conditioned, the vendor may drop its cookies prior to the end-user providing consent. Ensure these vendor tags are conditioned properly using one of the following methods:

* [Tag Management Solution (TMS)](https://developers.didomi.io/cmp/web-sdk/third-parties/tags-management/tag-managers)
* [Custom Didomi script tags](https://developers.didomi.io/cmp/web-sdk/third-parties/no-tag-manager)
* [Programmatic API](https://developers.didomi.io/cmp/web-sdk/third-parties/programmatic-api)


# Collect end-user consent before embedded video

Since third-party video vendors (like Youtube, Vimeo, etc...) will have access to an end-user's personal data, it is recommended that your organization collect the end-user's consent before launching any embedded video on your website.&#x20;

[Click here](https://github.com/didomi/samples/blob/main/how-to-embed-youtube/readme.md) for instructions for how to condition an embedded video from a third-party vendor.

{% hint style="info" %}
A working example for the instructions linked above can be accessed [here](https://didomi.github.io/samples/how-to-embed-youtube/).
{% endhint %}


# Collect end-user consent for Google Maps

While Didomi does not have explicit instructions on how to collect end-user consent for Google Map tags on your website, your organization can adapt the instructions for [how to collect end-user consent for embedded videos](https://github.com/didomi/samples/blob/main/how-to-embed-youtube/readme.md) for this particular use-case.

In the contexts of GDPR, your organization will need to request consent to transfer data outside of the European Union (EU). Your organization might consider adding a sentence such as the following:

> I give my consent for the processing of my information (including my IP address) and its transfer outside the EU to Google Maps (USA) for the purpose of displaying the map.

{% hint style="info" %}
Consult with your organization's DPO for your organization's requirements.
{% endhint %}


# Privacy hub widget implementation overview

{% hint style="info" %}
Currently, the Privacy Hub widget **does not have dedicated analytics**. Any data gathered through the Privacy Hub will be integrated without distinction into the existing analytics framework, which includes metrics such as notice displays, consent records, and user preferences.
{% endhint %}

This guide provides detailed instructions on deploying the Privacy Hub widget using a provided script. For a live demonstration of the widget, visit [didomi.io](https://www.didomi.io/) to see it in action.

<img src="/files/QuO6NOuqeGkW47GXJZ5v" alt="Capture d’écran 2024-01-30 à 09.33.51" width="516">

The script is versatile, allowing integration onto any website. It offers customization options for your **widget's links** and **styling**, ensuring it aligns with your site's aesthetic.

There are two methods to implement the Privacy Hub widget:

* **Loader Script**: This approach streamlines deployment by automatically incorporating the necessary stylesheets. You only need to embed a single file into your HTML.
* **Base Script**: This method requires you to manually integrate the stylesheets.

### Deployment using **the loader Script**

To deploy the widget with the loader script, configure it via the `privacyHubWidgetConfig` property in the window object. This configuration object includes:

* `elementSelector`: Defines the widget's placement on your site.
* `stylesheet`: A link to a completely custom stylesheet for full design control. If unspecified, the widget uses default styles (details available [here](https://gitlab.com/-/snippets/3691778)). If this property is defined the style property will be ignored.
* `options`: A list of objects detailing the widget's clickable options, each with a name and a link.
* `style`: A list of objects, each with properties designed to tweak the widget's appearance (recommended option).
* `widgetSrc`: An URL of the widget’s script to be loaded.

For reference: the path of the script that is being loaded is [here](https://gitlab.com/-/snippets/3691778).

**Example of loader script usage**:

```
<html>  
<head>  
    <title>Home</title>  
    <script>  
        window.privacyHubWidgetConfig = {  
            elementSelector: "body",
            options: [  
                {
                    name: "Security", 
                    link: "<https://www.didomi.io/security>" },  
                {
                    name: "Cookie Policy", 
                    link: "<https://www.didomi.io/cookie-policy>" },  
                {
                    name: "Privacy Policy", 
                    link: "<https://www.didomi.io/privacy-policy>" 
                },
                {
                    name: "My Preferences", 
                    link: "<https://didomi-marketing-preferences.preference-center.org/>",
                    target: "_blank" 
                },
                {
                    name: "Consent choices", 
                    link: "javascript:Didomi.preferences.show()", target: null 
                }
            ],
            style: {
                            button_container: {
                                background: "fuchsia",
                                background_hover: "purple",
                                box_shadow: "0px 8px 9px -3px #000000"
                            },
                            button: {
                                background_color: "red",
                                text_color: "blue"
                            },
                            button_inner_container: {
                                background: "green",
                                background_hover: "pink"
                            },
                            title: {
                                text_transform: "lowercase",
                                font_family: "Comic Sans MS",
                                font_size: "11px",
                                font_weight: "100",
                                margin: "-4px",
                                color: "red"
                            },
                            subtitle: {
                                text_transform: "",
                                font_family: "",
                                font_size: "",
                                font_weight: "",
                                margin: "",
                                color: "red"
                            },
                            list_item: {
                                font_family: "Comic Sans MS",
                                font_size: "11px",
                                font_weight: "200",
                                color: "red",
                                background_color: "green",
                                background_hover: "grey"
                            }
                        }
        }
    </script>      
    <script src="./privacy-hub-widget-loader.js"></script>  
</head>  
</html>
```

### Deployment using **the base Script**

The `privacy-hub-widget.js` script exports an object (and creates a `window.privacyHubWidget` property) with functions for widget setup:

* `init(elementSelector = "", options = [])`: Initializes the widget. Specify the selector for the widget's location and the options to be displayed upon interaction.
* `createOptions(options = [])`: A utility function for generating the widget's clickable options.
* `createPrivacyHubButton()`: A function for creating the widget's button.

#### HTML Layout + CSS Classes

The script generates a specific HTML structure (see below) with associated CSS classes. This structure serves as a reference for customizing or extending the base styles to better match your website's design.

```
<div class="privacy-hub">
    <ul class="privacy-hub__options privacy-hub__options--hidden">
        <li class="privacy-hub__options-item">
            <a class="privacy-hub__options-link" href="https://www.mordor.com/">
                Mordor
            </a>
        </li>
        ...
    </ul>
    <div class="privacy-hub__button-container">
        <button class="privacy-hub__button" type="button">
            <div class="privacy-hub__button-inner">
                <span class="privacy-hub__button-title">
                    Privacy
                </span>
                <span class="privacy-hub__button-subtitle">
                    Hub
                </span>
            </div>
        </button>
    </div>
</div>
```


# Privacy center

📕 The privacy center is not required. It's an extra product we have that allows you to manage and publish your data processing easily to be in compliance with the information part of GDPR. It is an easy replacement/compliment for a manual privacy policy.

You can check our Privacy Center:

* <https://privacy.didomi.io/en/>

In order to use it, you need to first define the data processing that your company is using (Data Processing in the left menu) and then publish them in your own Privacy Center.


# Vendor lists


# Manage vendors list template

#### What is it ?

This feature lets you apply templates to your consent notices. A template defines specific parameters for vendors, linked purposes, publisher restrictions, stacks, SPI, and categories.

By using templates, you can update the Vendor Lists across multiple consent notices simultaneously, saving considerable time.

![demo-vendor-list-regulations](/files/UgZJsroyzTyfNnQ1vFnV)

#### Access the feature

1. Go to your Didomi Console.
2. Click on **Consent Notices**, in the left menu.
3. Click on the "Manage vendor lists" section :

![](/files/dVUf0OUjmrodpsWOZHGN)

&#x20;

4\. From here you can **create a template**, and once at least one is created, you will be able to **edit a template**, or **delete a template**.

#### Create a new template

1. Go to the "Manage vendor lists" section.
2. Click on **Create template**.
3. &#x20;![](https://support.didomi.io/hs-fs/hubfs/Capture%20d%E2%80%99%C3%A9cran%202023-11-29%20%C3%A0%2010-28-47-png.png?width=617\&height=1261\&name=Capture%20d%E2%80%99%C3%A9cran%202023-11-29%20%C3%A0%2010-28-47-png.png)
4. Select the **vendors**, **purposes**, **publisher**, **restrictions**, **stacks** and **categories** you want to associate with your template.
5. Choose the regulations within the notices that this template should apply to.

⚠️ It will erase and replace existing **Edit Vendors & purposes** settings done from the notice in the regulation(s) selected.

5\.   Finally, click on **Save as vendor list**.

![](/files/UgbYMeeYHfHfccGKMpsH)

#### Link a template to a notice(s)

1. Go to the "Manage vendor lists" section.
2. Click on **Edit template**.&#x20;
3. Scroll down to the **Notices Linked** section.
4. Choose the regulations within the notice(s) you want to associate with your template.
5. Click on **Apply**. The template is now applied to your notices. \
   or Click on **Apply & Publish** to apply the template and also publish all selected notices at the same time.

#### Edit a template

1. Go to the "Manage vendor lists" section.
2. Click on **Edit template**.&#x20;
3. Make the changes you want, about **vendors**, **purposes**, **publisher**, **restrictions**, **stacks** and **categories**.
4. Click on **Save template**.

⚠️ Saving a template will impact all notices linked.

#### Select template from a notice

1. Go to the "Manage vendor lists" section.
2. Click on **Edit template**.&#x20;
3. Scroll down to the **Notices Linked** section.
4. Check the notice(s) you want to link with this template.
5. Click on **Apply**. The template is now applied to your notices. \
   or Click on **Apply & Publish** to apply the template and also publish all selected notices at the same time.


# CMP Vendor Sync (CVS)

The CMP Vendor Sync is a premium feature. To enable it, please reach out to our Account Manager.

The CMP Vendor Sync (CVS) is a tool that helps you to select the vendors you need to declare on your website.

More specifically, the CVS leverages data from your Didomi Compliance Report,  automatically selecting all detected vendors so they can be easily included in your consent notice configuration.

This feature is currently available only inside a "Vendor List", which is a template that allows you to apply a single configuration to multiple notices. For more information on the Vendor List (formerly known as *Mass update*) please refer to [this article](/consent-management-platform-cmp/vendor-lists/manage-vendors-list-template).

#### How to access the CVS:

1. Click “*Consent Notices*” in the left bar.
2. Click “*Manage Vendors Lists*” in page header.
3. Click “Create a Template” in page header (you can also edit an existing template).
4. Click “*CMP Vendor Sync*” in the “*Vendors”* section (you may need to click “*Save*” before continuing).

![Untitled (13)](/files/DRZZSef1m3Ff74IvOMAd)

![Untitled (14)](/files/GH2jGemlUXH1G98V0I15)

![Untitled (15)](/files/v5FaympZJhkj9GhrAz7Q)

![](/files/eO3DYLLPMM8WHkXQmEz2)

📗 Read also: [How to programmatically add vendors to a notice using the CVS](/consent-management-platform-cmp/vendor-lists/add-vendors-via-cmp-vendor-sync)


# Add vendors via CMP Vendor Sync

{% hint style="info" %}
CMP Vendor Sync is a premium feature. Please contact your Account Manager if you are interested in activating it.
{% endhint %}

Use the data collected from the Compliance Reports and programmatically add vendors to a notice using the CMP Vendor Sync (CSL).

#### 1️⃣ Go to the feature

Go to the "Consent notices" section on the left menu, and click on "**Manage Vendors list**" :

<figure><img src="https://support.didomi.io/hubfs/Capture%20d%E2%80%99%C3%A9cran%202023-07-21%20%C3%A0%2010-36-36-png.png" alt=""><figcaption></figcaption></figure>

Then click on the "**Create a template**" blue button&#x20;

<figure><img src="https://support.didomi.io/hubfs/Capture%20d%E2%80%99%C3%A9cran%202023-07-21%20%C3%A0%2010-38-44-png.png" alt=""><figcaption></figcaption></figure>

**Give a name** to the Vendors list, and click on the **"Save as Vendors list"** button :

![](/files/jPljYEYokgWPHZitbAxe)

Finally, access the CMP Vendor Sync (CVS) from the Vendor List page by clicking in **"CMP Vendor Sync"** button :

![](/files/8pRe9MpECKCCR0RBt6E5)

NB : The CVS is not currently available for the set-up of single notice. It is only available as part of a Vendor List. For more information about Vendor Lists and how you can use them to set-up your notices, please [read this article](/consent-management-platform-cmp/vendor-lists/manage-vendors-list-template).

#### 2️⃣ Select the domain(s)

The table contains all domains already added to the Compliance Report. For each domain it shows the number of vendors detected in the most recent reports and **organised by type**:

* **IAB vendors** : The vendors part of the IAB Global Vendor List, which is managed by IAB.
* **Built-in vendors** : A roster of common vendors available in the Console. It’s managed by Didomi.
* **Google ATP vendors** : The vendors part of the Google ATP vendor list, which is managed by Google.
* **Custom vendors** : The vendors created and managed by your organisation in the Data Manager module.
* **Unmatched vendors** : The vendor domains detected on your domains that were not automatically matched with an already mapped vendor (a built-in vendor, a custom vendor,...).

Select one or more domains from the table.

If you are looking for a domain that is not on the list, simply navigate to the Compliance Report using the left bar menu, add the domain, wait for the report to be generated, and then return to the CVS.

![](/files/d1hS9nzgEtaAA05lYlGe)

#### 3️⃣Click NEXT

This brings you to the full list of detected vendors.

![](/files/dgspdBoydAx0qKmYE4tK)

#### 4️⃣Review the list of the vendors to be added to your Vendor List.

The list showed here contains all the vendors detected on the selected domains.

In case of a vendor with an unknown domain is detected, it’s displayed here too, but with the *“**unmatched**”* label. All the unmatched vendors domains **will not be added in the vendor list until they are not manually matched**. For more information about the vendor matching process, please read [this article](/tracker-and-vendor-discovery/tracker-and-vendor-discovery-results/match-unknown-vendors).

![](/files/avL3oumCXxcYm6XPyZyi)

#### 5️⃣Check the vendor selection options.

By default, all the types of vendors are selected, but you can restrict the selection by using the checkboxes. There are 2 different ways to add vendors to your vendor list:

* A) Choose "**Merge with new vendors"** to keep the vendors already selected on the Vendor List.
* B) Choose **"No, replace all"** ; this will override to deselect the vendors currently selected on the Vendor List.

<figure><img src="https://support.didomi.io/hs-fs/hubfs/image-png-Nov-28-2023-01-24-24-4750-PM.png?width=685&#x26;height=1201&#x26;name=image-png-Nov-28-2023-01-24-24-4750-PM.png" alt=""><figcaption></figcaption></figure>

#### 6️⃣Click “Add these vendors” and confirm.

Please note that after giving the confirmation, you will not be able to undo this action: the vendors will be added to the Vendor List and the changes will be automatically saved.

![](/files/gF5Ygx1pLy2qQFv6pxoh)

You will now be back on the Vendor List page, and you will see that the added vendors are now selected in the Vendors table. You can use the filter “Selected vendors” to easily check the final result.


# Determine purposes for vendors

To determine which purposes should be linked with your vendors, you should consider the following points:

1. Understand the Nature of the Vendor: Identify what services the vendor provides and what data they collect.&#x20;
2. Consult Legal and Compliance Teams to understand the regulatory requirements related to data processing activities for your specific case.&#x20;
3. Vendor's Privacy Policy: Review the privacy policy of the vendor. Often, vendors will specify the purposes for which they process data.
4. Didomi Console: you can access the "Vendors & Purposes" section. Here, you have the option to select our default vendors, which come with purposes generally declared by the vendors themselves.&#x20;
5. Custom Purposes: If the predefined purposes do not fully cover the activities of your vendors, you might consider creating custom purposes. This can be done in the Didomi Console, where you can define and link these custom purposes to the appropriate vendors.


# Consent notices




---

[Next Page](/llms-full.txt/1)

