Products – Compliance Solutions for Websites, Apps and Organizations | iubenda https://www.iubenda.com/en/ Mon, 23 Mar 2026 13:42:14 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 Google Additional Consent: what it is and how to configure it https://www.iubenda.com/en/help/211287-google-additional-consent/ Fri, 13 Mar 2026 09:00:31 +0000 https://www.iubenda.com/?post_type=iub_help&p=211287 What is Google Additional Consent? Google Additional Consent (AC) is a specification that lets cookie banners signal consent to Google Ad Tech Providers (ATPs): advertising technology companies that work with Google but aren’t registered on the IAB Global Vendor List (GVL). The IAB Transparency and Consent Framework (TCF) is the industry standard for consent signaling […]

The post Google Additional Consent: what it is and how to configure it appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

What is Google Additional Consent?

Google Additional Consent (AC) is a specification that lets cookie banners signal consent to Google Ad Tech Providers (ATPs): advertising technology companies that work with Google but aren’t registered on the IAB Global Vendor List (GVL).

The IAB Transparency and Consent Framework (TCF) is the industry standard for consent signaling in digital advertising. It maintains the GVL, a list of registered ad tech vendors. When your cookie banner collects consent, it communicates those choices to vendors on that list. Google Additional Consent extends that signaling to cover Google’s ATPs, which operate outside the GVL.

Without Google Additional Consent, consent signals wouldn’t reach those providers at all.

💡 Google Consent Mode vs. Google Additional Consent

Google Additional Consent and Google Consent Mode are two separate frameworks that serve different functions. Google Consent Mode controls how Google’s own tags behave based on user consent choices: when a user declines cookies, those tags switch to a restricted mode that collects only aggregated, cookieless data. Google Additional Consent works at the consent signal level, extending IAB TCF consent strings to cover Google Ad Tech Providers (ATPs) that aren’t registered on the IAB Global Vendor List (GVL). Both can be active on your site at the same time, handling different things in parallel.

Google Additional Consent v1 and v2: what’s the difference?

Google Additional Consent has two versions: v1 and v2. Both signal consent to Google ATPs, but they differ in format and capabilities.

ACv2 updates the format used to signal consent and adds the ability to declare disclosed vendors. It aligns with more recent TCF implementations and Google’s current requirements.

Which version of Google Additional Consent should I use?

Use v2. It’s the current standard and keeps your setup compatible with Google’s advertising ecosystem going forward.

iubenda sets gacVersion to 2 by default. If you haven’t explicitly set a version in your configuration, your setup already uses v2. If you have gacVersion: 1 in your configuration, we recommend switching to 2.

When should I stay on Google Additional Consent v1?

In most cases you won’t need to. But if your setup includes a legacy integration built around the v1 AC string, internal scripts that expect the v1 format, or a complex ad stack where changes need careful testing, you may want to stay on v1 temporarily while you prepare for the switch.

How to configure Google Additional Consent

Using the Privacy Controls and Cookie Solution Configurator

Enable Google Additional Consent from the Privacy Controls and Cookie Solution Configurator, under the IAB TCF settings. To configure the version (v1 or v2), use the configuration script below.

Using the configuration script

To configure Google Additional Consent manually, add both googleAdditionalConsentMode and gacVersion to your _iub.csConfiguration object, before the iubenda Privacy Controls and Cookie Solution script.

googleAdditionalConsentMode: true enables Google Additional Consent. gacVersion sets the version (1 or 2).

To enable Google Additional Consent with v2 (recommended):

<script>
window._iub = window._iub || {};
_iub.csConfiguration = {
googleAdditionalConsentMode: true,
gacVersion: 2
};
</script>

To enable Google Additional Consent and keep v1:

<script>
window._iub = window._iub || {};
_iub.csConfiguration = {
googleAdditionalConsentMode: true,
gacVersion: 1
};
</script>

If you’re using the unified embed code, add this block immediately before the main iubenda script tag.

Need help?

Reach out to us via support if you need any further assistance.

The post Google Additional Consent: what it is and how to configure it appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Getting Started with iubenda’s Accessibility Widget: A Step-by-Step Guide https://www.iubenda.com/en/help/175600-getting-started-with-iubendas-accessibility-widget-a-step-by-step-guide/ Wed, 19 Mar 2025 10:36:15 +0000 https://help.iubenda.com/?p=175600 The European Accessibility Act (EAA) came into full force on June 28, 2025, bringing new requirements for website accessibility. For businesses operating within the EU, or serving EU customers, it is crucial to improve accessibility and align with these new standards. With iubenda’s Accessibility Widget, making your website more accessible has never been easier. The […]

The post Getting Started with iubenda’s Accessibility Widget: A Step-by-Step Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The European Accessibility Act (EAA) came into full force on June 28, 2025, bringing new requirements for website accessibility. For businesses operating within the EU, or serving EU customers, it is crucial to improve accessibility and align with these new standards. With iubenda’s Accessibility Widget, making your website more accessible has never been easier.

The new iubenda’s Accessibility Widget uses AI-powered adjustments to automatically make your website more accessible for users with various disabilities. The solution supports a range of accessibility features, making it easier for users to navigate and interact with your site.

What is iubenda’s Accessibility Widget?

iubenda’s Accessibility Widget is a fully automated widget designed to enhance your website’s accessibility. It adjusts your website in real-time to accommodate the needs of users with disabilities, including options like text resizing, high-contrast modes, screen reader compatibility, and more. Key features include:

  • 🎧 Screen Reader Compatibility: Helps make your website readable by screen readers for visually impaired users.
  • 🔳 Contrast and Text Resizing: Allows users to adjust the contrast and font size to suit their needs.
  • ⌨ Keyboard Navigation: Improves keyboard navigation for users with motor impairments.
  • 🌀 Control Over Dynamic Content: Lets users with epilepsy or other conditions stop animations or dynamic content that might be harmful.

With a simple installation process, you can get started right away without having to overhaul your website’s code.

Step 1: Activating the Accessibility Widget

  1. Go to the iubenda Dashboard: From your iubenda Dashboard, find the Accessibility Widget tile under your available products.
  2. Activate the Widget: Click the Activate button to start using the Accessibility Widget.
  3. accessibility solution

Step 2: Customizing the Accessibility Widget

Once you’ve activated the Accessibility Widget, you can make it match your website’s look and feel by using the Accessibility Widget Configurator. This tool is available for both new pricing plans and legacy plans.

  1. Go to your iubenda Dashboard.
  2. Find the Accessibility Widget tile.
  3. Click on the Settings button to open the configurator.

The configurator will look like this:

Inside the configurator, you’ll find several options to make the widget your own:

  • Trigger Button Position: Choose where the widget’s button appears on the screen: Top-left, Bottom-left, Bottom-right, Top-right

👉 The main widget panel will always open from the bottom of the screen.

  • Widget Background Color: Change the background color to better fit your site’s design. (Text customization is not available yet.)
  • Trigger Button Appearance: Adjust both the icon color and the background color of the trigger button.
  • Default language: Set the default language for the widget’s interface, making it more accessible for your audience.
  • Accessibility Statement URL: Add a custom link to your site’s accessibility statement, so users can easily find it.

💡 Any changes you make in the configurator will be applied automatically to your Accessibility Widget, even if it’s already embedded on your website.

Step 3: Installing the Accessibility Widget on Your Website

Once you’ve activated and configured the widget, you can embed it on your site.

  1. Embed the Widget: Copy the provided snippet of code for the Accessibility Widget and paste it at the very beginning of the head section of your website (right after the <head> tag) to install the widget.
  2. accessibility solution
  3. Verify the Widget’s Functionality: After embedding, refresh your website to ensure the widget is visible and functional. You should now see a small accessibility icon:
  4. accessibility solution

How it Works for End Users

Once the Accessibility Widget is embedded and active on your website, end users will be able to interact with it to customize their browsing experience. As users change their settings through the widget, real-time adjustments are made to the website’s layout, ensuring that the content is instantly optimized based on the selected preferences. Here’s how the widget behaves and the features it provides:

  1. Widget Appearance: The Accessibility Widget appears as a small icon, when users click on the icon, it opens a menu of accessibility options, providing a seamless way to adjust the website’s layout.
  2. User Preferences: The widget lets users select their accessibility preferences, such as:
    • Text size: Users can adjust the size of the text for better readability.
    • Contrast settings: Adjust the contrast to make content stand out more clearly, especially for those with visual impairments.
    • Other display options: The widget also offers a range of display settings to cater to different needs, making it easier for users to navigate the site in a way that suits them best.
    • Text size and style: Enlarges or adjusts text in a way that makes it more readable without requiring a page reload.
    • Contrast: Applies changes to background and text colors to enhance visibility for users with color blindness or low vision.
  3. Dynamic Content Control: For users who may be sensitive to animations or flashing content, the widget gives them the option to turn off animations or modify the behavior of dynamic content. This is particularly beneficial for individuals with conditions like epilepsy.
  4. Enhanced Navigation: In addition to visual changes, the widget improves keyboard navigation by optimizing focus order, making it easier for users with motor impairments to navigate and interact with the page efficiently.
  5. Screen Reader Compatibility: The widget ensures that all elements are compatible with screen readers, ensuring that visually impaired users can easily understand and interact with all the content on your site.
  6. Convenient and Accessible: The accessibility settings remain easily accessible at any time, with the widget floating in a fixed position on the site, allowing users to make changes whenever they need to.
  7. accessibility solution

With iubenda’s Accessibility Widget, you can improve your website accessibility and provide a better, more inclusive experience for all users.

Get started today and enhance the accessibility of your website!

Activate now

The post Getting Started with iubenda’s Accessibility Widget: A Step-by-Step Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda’s Accessibility Widget: Which Version Is Right for Your Business? https://www.iubenda.com/en/help/175302-iubendas-accessibility-widget-which-option-is-right-for-your-business-3/ Mon, 17 Mar 2025 09:25:55 +0000 https://help.iubenda.com/?p=175302 Web accessibility isn’t just about compliance—it’s about creating digital experiences that everyone can enjoy, regardless of their abilities. As the European Accessibility Act (Directive 2019/882) came into force on June 28, 2025, organizations must ensure their digital presence meets accessibility standards. Powerful Solutions for Digital Accessibility iubenda offers accessibility solutions developed in collaboration with AccessiWay, […]

The post iubenda’s Accessibility Widget: Which Version Is Right for Your Business? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Web accessibility isn’t just about compliance—it’s about creating digital experiences that everyone can enjoy, regardless of their abilities. As the European Accessibility Act (Directive 2019/882) came into force on June 28, 2025, organizations must ensure their digital presence meets accessibility standards.

Powerful Solutions for Digital Accessibility

iubenda offers accessibility solutions developed in collaboration with AccessiWay, designed to support businesses of all sizes in starting their journey toward greater accessibility.


Accessibility Widget Lite Accessibility Widget Standard AccessiWay
Base price $7/month or $84/year $65/month or $720/year
Custom
Monthly pageviews included 10,000 150,000 Unlimited
Monthly extra pageviews $7/month per 10,000 extra pageviews $7/month per 10,000 extra pageviews
AI-powered alt text for images 20* Unlimited Unlimited
Features AI accessibility improvements AI accessibility improvements + Accessibility Profiles** – AI accessibility improvements
– Accessibility Profiles
– Detailed accessibility auditing
– Custom accessibility statement
– Custom implementation support
– Ongoing compliance management
– Advanced technical capabilities for complex websites
– Expert consulting
Limits Max 80,000 pageviews*** Max 1M pageviews

All prices above are intended VAT included.

*Alt text is automatically added to your first 20 images for enhanced accessibility.

**Accessibility profiles combine related settings designed to help users with specific disabilities. Visitors can select the profile that works best for them. Profiles available: Seizure Safe Profile, Vision Impaired Profile, ADHD-Friendly Profile, Cognitive Disability Profile, Keyboard Navigation Profile (Motor), and Blind Users Profile (Screen-readers).

***Sites that exceed this limit will be required to upgrade to the Accessibility Widget Standard tier to maintain accessibility coverage.

Which iubenda Solution Is Right for You?


💡 Choose our Accessibility Widget Lite if:

  • You run a small website with a simpler structure
  • You have fewer than 50 pages to make accessible
  • Your monthly pageviews stay below 80,000*
  • You need essential accessibility features at an affordable price
  • Your accessibility needs are straightforward

Please note: Sites that exceed the 80,000 pageviews limit will be required to upgrade to the Accessibility Widget Standard tier to maintain accessibility coverage.

💡 Choose our Accessibility Widget Standard if:

  • You manage a larger, growing website
  • You need comprehensive accessibility profiles for various disabilities
  • You require unlimited AI image processing
  • You want advanced customization options
  • Your website has higher traffic (up to 1M pageviews)
  • You need to support a more complex website

Why iubenda’s Accessibility Widget Makes Sense for Your Business

1. Budget-Friendly Options

We offer two tiers of accessibility solutions with transparent pricing to provide essential features at price points that make sense for businesses of all sizes.

2. Simple Implementation

No complex integration or technical expertise required. Both solutions install quickly and start working immediately, with minimal configuration needed.

3. Tailored Feature Sets

Our tiered approach ensures you get exactly what you need—essential features for smaller sites or comprehensive capabilities for larger ones—without paying for unnecessary functionality.

4. Scalable Solutions

As your business grows, you can easily upgrade from Accessibility Widget Lite to Accessibility Widget Standard to accommodate increased traffic and more advanced needs. Your accessibility solution grows with your website.

Need Enterprise-Level or Custom Accessibility Services?

For large enterprises with advanced accessibility requirements, AccessiWay offers specialized consulting services to complement our accessibility solutions:

  • Detailed accessibility auditing and compliance evaluation
  • Expert consulting and tailored accessibility strategy
  • Custom implementation support
  • Custom accessibility statement
  • Ongoing compliance management
  • Advanced technical capabilities for complex websites

Their enterprise services include:

✅ Litigation Support Package – Proactive legal protection

✅ Service Level Agreement (SLA) – Guaranteed performance

✅ Dedicated Account Manager – Expert guidance on compliance

✅ Specialized Consultancy Services – Tailored accessibility strategy

Through our partnership with AccessiWay, we can connect you with these enterprise-level services to complement your iubenda accessibility solution.

💬 Get in touch to learn about accessWidget

Ready to Make Your Website More Accessible?

Take the first step toward digital inclusion today with iubenda’s Accessibility Widget. Simple, affordable, and effective accessibility for your business.

Activate iubenda’s Accessibility Widget Now

The post iubenda’s Accessibility Widget: Which Version Is Right for Your Business? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Microsoft Universal Event Tracking (UET) Consent Mode https://www.iubenda.com/en/help/169657-microsoft-universal-event-tracking-consent-mode/ Fri, 20 Dec 2024 09:22:53 +0000 https://help.iubenda.com/?p=169657 UET Consent Mode allows you to customize UET cookie access based on user consent preferences. This feature enhances UET’s privacy capabilities, giving you control over whether to store first-party and third-party cookies. In the context of UET Consent Mode, first-party cookies are generated by your website’s domain (the advertiser), while third-party cookies are created by […]

The post Microsoft Universal Event Tracking (UET) Consent Mode appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
UET Consent Mode allows you to customize UET cookie access based on user consent preferences. This feature enhances UET’s privacy capabilities, giving you control over whether to store first-party and third-party cookies.

In the context of UET Consent Mode, first-party cookies are generated by your website’s domain (the advertiser), while third-party cookies are created by Microsoft Advertising (e.g., Bing.com).

How It Works

Consent mode is set via a property in UET called ad_storage. The possible values for ad_storage are:

Value for ad_storage Description
Granted First and third-party cookies may be read and written for UET. If no default is set, UET uses granted by default.
Denied First-party cookies are not read nor written for UET. Third-party cookies are not written. Third-party cookies are read-only for fraud and spam purposes—not for advertising purposes.

In European Economic Area countries, along with the UK and Switzerland, Microsoft Advertising is gradually enforcing consent mode. This will lead to conversion loss if the granted signal is not passed to UET when a user accepts consent. In scenarios where consent mode is enforced, the default value is denied.

For most countries, if the consent setting is not set, UET uses granted by default.

Set Up Microsoft Consent Mode with iubenda Privacy Controls and Cookie Solution

iubenda Privacy Controls and Cookie solution provide built-in out-of-the-box support for UET consent mode, both using Autoblocking or having the iubenda.com/sync snippet in your configuration available in all the recent integration codes.

If your code is provided with one of the two snippets, you don’t have to do any additional steps: Autoblocking or sync snippet will take care of setting automatically the default state (ad_storage to denied) and send the update signal as soon as the user updates their preferences via the existing global window.uetq property.

In order to make everything work smoothly, make sure you list the “Microsoft Advertising” service in your Privacy and Cookie Policy.

  • If you already use iubenda for your legal documents and cookie banner, you need to add the “Microsoft Advertising” service from the Privacy and Cookie Policy Generator. Once added, the update will be automatically synced with your cookie banner, and our Privacy Controls and Cookie Solution will assign the right purpose to the new service. No need to do it manually!
  • If, instead, you use a custom document, make sure your cookie banner manages the Marketing purpose (5) and list “Microsoft Advertising” under this purpose.

And you’re done!

Validating Consent Mode Implementation with UET Tag Helper Browser Plugin

To verify the implementation of Consent Mode within UET you can:

  • Check in the browser console the value of window.uetq before and after the consent is granted or denied by the user.
  • Use the UET Tag Helper available for Edge and Chrome.

Enable UET Consent Mode Support with iubenda

Start now

The post Microsoft Universal Event Tracking (UET) Consent Mode appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda app for Duda | All-in-one Compliance for GDPR / CCPA Cookie Consent, and more https://www.iubenda.com/en/help/168322-iubenda-all-in-one-plugin-duda-installation-2/ Wed, 04 Dec 2024 12:05:09 +0000 https://help.iubenda.com/?p=168322 The iubenda app for Duda is an all-in-one, extremely easy to use 360° compliance solution, with text crafted by actual lawyers, that quickly scans your site and auto-configures to match your specific setup. The app supports laws like GDPR (DSGVO, RGPD), UK-GDPR, ePrivacy, LGPD, CPRA, CCPA, CalOPPA, PECR, and more. It also works smoothly with […]

The post iubenda app for Duda | All-in-one Compliance for GDPR / CCPA Cookie Consent, and more appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The iubenda app for Duda is an all-in-one, extremely easy to use 360° compliance solution, with text crafted by actual lawyers, that quickly scans your site and auto-configures to match your specific setup. The app supports laws like GDPR (DSGVO, RGPD), UK-GDPR, ePrivacy, LGPD, CPRA, CCPA, CalOPPA, PECR, and more. It also works smoothly with the latest versions of Google Consent Mode and IAB’s TCF.

It allows you to:

  • ⚡Scan your site and have solutions auto-configured to match your site’s specific needs.
  • 🚀 Easily create a fully customizable cookie banner, manage cookie consent, and store the GDPR consent proofs legally required for cookies.
  • Generate a CCPA notice with working DNSMPI link as required by law.
  • Activate IABs TCF to maximize ad earning.
  • 🚀 Quickly create a fully customizable privacy and cookie policy.
  • Automatically detect user location and apply the correct data privacy settings (useful if you have users from different regions like the US and the EU).
  • 🚀 Capture, store and manage GDPR consent records for your webforms.
  • 🚀 Easily create professional Terms and Conditions to protect you from liabilities and more.
  • Translate all documents with a single click (supports 15 languages).
  • Work with Google’s Accelerated Mobile Pages (AMP).

Best of all, the basic setup is completely free.

Features

This all-in-one solution lets you integrate all iubenda compliance solutions with a single installation, and basic setup is completely free.

⚡ The app scans your site and auto-configures everything based on your site’s specific needs.

⭐ All our solutions are fully responsive (perfect for all screen sizes) and WCAG Level AAA Compliant.

Our solutions are automatically updated when laws change, so they are always up-to-date. The built-in site scanner runs periodic scans on your site and alerts you if it detects anything that should be added to your compliance documents.

How to start

As a Duda user, you can easily install and configure the app to make your website compliant with iubenda. Follow these steps to get started:

Firstly, you need to add the app. Start by choosing your site. From the Site List page in your Duda dashboard, select the site where you want to install the app.

iubenda how to start

Go to the Duda Site Editor page for your chosen site. Click on “App Store” from the Sidebar menu. Search for “iubenda” and click “+Install

  • Note: If you have already added the app, click “Open” instead.
duda app search

After clicking “+ Install” a pop-up window will appear. Choose your preferred iubenda plan and click “Choose

duda choose a plan

💡 Note: For a simplified cookie banner/consent banner, and privacy policy setup, you can choose the FREE plan to get started.

👉 To explore our plans, check out our Pricing section.

Once you select a plan, the installation process will start automatically. Wait until it is completed.

duda iubenda installation

After installation, you’ll see a loading page. Our app will automatically scan your site and provide a rating based to your site’s specific needs.

duda iubenda analyzing

Once website scanning is completed, a percentage rating appears on the Welcome to iubenda! page, here you can find your site’s compliance elements summarized including the iubenda products to be configured or activated.

duda iubenda raiting
duda iubenda raiting score

After installing the app, you can click on “Setup” to proceed to the product configurator, or simply click “Dashboard” at any time to setup and configure services as needed. If your current plan does not include any of the products or features you wish to activate, click “Upgrade”.

You can also click on “Make My Website Compliant!” to proceed with plan configuration.

duda iubenda make site compliant

Finally, once you have activated and provisioned your iubenda products, you can directly access the configuration tiles from the Site Editor to start making your site compliant in minutes.

duda iubenda initial setup

Now You Are Ready to Set Up and Configure Services According to Your Needs

To make your website compliant, you can start by activating and using the iubenda solutions. Let’s briefly explore what you can achieve with them:

Privacy Controls and Cookie Solution

duda iubenda initial setup CS

Includes cookie banner/CCPA notice, and cookie consent management (blocking scripts until consent is collected as legally required). Free basic setup and full CCPA support.

  • Easy and guided set-up: Analyzes your site and auto-configures everything to make set-up as easy as possible.
  • Fully customizable cookie banner – change functionality, design, location, colors, add your logo and more.
  • Asynchronously re-activates cookie scripts once consent is collected (no page reload needed).
  • Lightning-fast: won’t affect page performance.
  • Auto-detects and blocks a wide range of 3rd party scripts like Google Analytics, Google Maps, Facebook and Instagram widgets, Youtube, Twitter, PayPal, Disqus, Outbrain, AdRoll, Kissmetrics, Freshchat and more.
  • Allows you to provide your users with granular, per-category preference control (e.g. basic functionalities, experience enhancement, targeting & advertising)
  • Google Consent Mode (both Basic and Advanced implementations; no extra setup required): Enables efficient conversion tracking even without user consent for cookies and tracking technologies, enhancing Google Analytics and Ads performance.
  • Integrates with IAB’s Transparency and Consent Framework (TCF) to maximize ad revenue (needed if your site uses ad networks like Google ads and more)
  • Compatible with Google’s Accelerated Mobile Pages (AMP)
  • Allows you to auto-detect and limit prior-blocking and cookie consent requests only to users from the EU – where this is a legal requirement for GDPR compliance – while running cookies scripts normally in regions where you are still legally allowed to do so.
  • Features an easy-to-use interface for entering custom scripts and iframes
  • Cookie database feature allows you to auto-set cookie lifetime information.
  • Display CCPA / CPRA notice and opt-out link as required by the California Consumer Privacy Act
  • Provides cookie consent analytics for high-traffic sites.
  • Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised

💡 For more customization options, go to your Dashboard and click “Manual.” Next, select “Configure cookie banner by clicking here” to set up your cookie banner on our website. Once you’re finished, paste the embed code and click “Save snippets”, to complete the integration.

duda iubenda initial setup CS extra configurations
👉 Need more help? Check out our full guide on the Privacy Controls and Cookie Solution for step-by-step instructions on configuring your cookie banner.

Privacy and Cookie Policy Generator

duda iubenda initial setup PPC

This solution lets you generate professional privacy and cookie policies in minutes.

  • Super easy interface, guided process, fully customizable
  • All legal text written by actual legal professionals
  • Quick select from over 1900 clauses or create custom clauses
  • Activate cookie policy in a single click
  • Site Scanner to quickly detect which services/ clauses you need to add to your policies.
  • One-click translation. 15 languages supported: Czech, Danish, Dutch, US English, UK English, French, German, Greek, Italian, Polish, Portuguese, Brazilian Portuguese, Russian, Spanish, Swedish
  • One-click activation for country/ region-specific text.
  • Compatible with Google’s Accelerated Mobile Pages (AMP)
  • Documents are remotely updated when legal requirements change
  • Manage documents for multiple sites from a single dashboard
  • White label option allows you to seamlessly integrate your privacy policy text into the body of your webpage

💡 To start configuring, click the Configure button under Privacy and Cookie Policy. Then, select “Setup your privacy and cookie policy on iubenda.com.” This will open the Privacy and Cookie Policy Generator on iubenda.com, where you can easily set up and edit your policy.

duda iubenda initial setup PPC extraconfigurations

💡 Need help setting up your privacy policy? Check out this guide for step-by-step instructions on using your iubenda dashboard.

Consent Database

duda iubenda initial setup Consent Database

Collect consent, document opt-ins and opt-outs via your web forms. This solution smoothly integrates with your consent collection forms to auto-create legally required GDPR and LGPD consent records.

About Legal requirements and Consent Records

These records should include a userid, timestamp, consent proof, record of the consenting action, and the legal documents available to the user at the time of consent, among other things.

This app is THE most complete solution for recording, sorting and maintaining GDPR & LGPD records of consent for optimal privacy compliance.

The app also boasts built-in compatibility with WordPress comment form, Contact Form 7, Elementor forms and WP Forms plugins for your convenience, but can be manually integrated with any type of web-form and can even store consent proofs for consents collected offline (e.g in-store sign-ups) via WP media upload.

  • It’s auto-compatible with and allows super easy mapping of Contact Form 7, WP Forms, WordPress comment, Mailchimp for WordPress, Germanized for WooCommerce, Elementor forms and WooCommerce checkout forms
  • Also allows manual integration with any type of web-form
  • For each consent, track the form/wording the user was prompted with at the time of the consent collection
  • Accurate timestamping and recording of consenting action
  • Flexibly upload any form of proof of consent or legal notice, including a PDF if consent was collected offline
  • It provides a high granularity: map individual form fields, exclude fields (like password inputs), add legal notices available at the time of consent collection, indicate double opt-in, set preferences and more
  • REST HTTP API and JS SDK, to give you total control and how and when consent is stored
  • Store multiple preferences for each user (e.g. if you have multiple newsletters or opt-ins)
  • Features an easy-to-use interface for entering custom scripts and iframes
  • It provides API input field for quick and easy activation

💡 To get started, activate the Consent Database in your iubenda dashboard on iubenda.com and paste the API key when prompted.

duda iubenda initial setup database api key

After that, remember to click on Save settings at the bottom right of the page.

Once saved, you can configure your Consent Database by following this detailed guide.

Terms and Conditions

duda iubenda initial setup TC

Create your terms and conditions in minutes.

Customizable from hundreds of combinations, available in 15 languages, powerful and precise — our solution is capable of handling even the most complex, individual scenarios. Optimized for e-commerce, marketplace, SaaS, apps and more.

  • Easy, guided set-up
  • Expertly crafted at the hands of our international legal team
  • Pre-defined scenarios modules for everything from basic disclaimers to copyright licenses, account terminations rules, product-comparison, age-related disclaimers, virtual currency, and more.
  • Plug-and-go integrations for popular eCommerce solutions like Shopify, Wix, Squarespace, Weebly, WooCommerce, PrestaShop and more
  • One-click translation (15 languages supported Czech, Danish, Dutch, US English, UK English, French, German, Greek, Italian, Polish, Portuguese, Brazilian Portuguese, Russian, Spanish, Swedish)
  • Compatible with Google’s Accelerated Mobile Pages (AMP)
  • Manage documents for multiple sites from a single dashboard
  • White label option allows you to seamlessly integrate your privacy policy text into the body of your webpage

💡 To start, activate and configure your Terms and Conditions on the iubenda website. You can follow our step-by-step guide to the generation here.

Then, paste the embedding code and choose from the integration preferences provided.

duda iubenda embedding database

Once you’re done, remember to click on Save settings at the bottom right of the page.

Compliance Made Easy for Duda Users

Quickly install the app and get on the road to compliance.

Install the app for Duda

Pricing

Plan Pageviews (per month) Features Price (EUR) Price (USD)
Free Tier 5k Privacy Controls and Cookie Solution 0 0
iubenda Essentials (25k) 25k Privacy Controls and Cookie Solution 5.99 6.99
iubenda Essentials Medium (500k) 500k Privacy Controls and Cookie Solution + 1000 consents 16.99 19.99
iubenda Essentials Large (2M) 2M Privacy Controls and Cookie Solution + 2000 consents 34.99 39.99
iubenda Essentials Extra (10M) 10M Privacy Controls and Cookie Solution + 5000 consents 229.99 249.99
iubenda Advanced (50k) 50k Privacy Controls and Cookie Solution 21.99 27.99
iubenda Advanced Medium (500k) 500k Privacy Controls and Cookie Solution + 1000 consents 34.99 39.99
iubenda Advanced Large (2M) 2M Privacy Controls and Cookie Solution + 2000 consents 89.99 99.99
iubenda Advanced Extra (10M) 10M Privacy Controls and Cookie Solution + 5000 consents 249.99 299.99
iubenda Ultimate (150k) 150k Privacy Controls and Cookie Solution 89.99 119.99
iubenda Ultimate Medium (500k) 500k Privacy Controls and Cookie Solution + 1000 consents 119.99 139.99
iubenda Ultimate Large (2M) 2M Privacy Controls and Cookie Solution + 2000 consents 139.99 149.99
iubenda Ultimate Extra (10M) 10M Privacy Controls and Cookie Solution + 5000 consents 349.99 429.99

About iubenda

We help companies all over the world to keep their websites and apps compliant with international privacy laws for optimal peace of mind. More here.

Languages

Our services are currently available in the following languages:

  • English US and UK
  • Italian
  • French
  • Spanish
  • Portuguese
  • Brazilian Portuguese
  • German
  • Dutch
  • Russian
  • Czech
  • Swedish
  • Danish
  • Greek
  • Polish

Support & Updates

All our solutions and plugins are regularly updated and well maintained to ensure that you’re always protected.

You can access our friendly support in multiple languages (currently EN, IT, DE, FR, PT, PT-BR) via info@iubenda.com, our onsite chat (just click the green Help button on the right side of the page).

Other links:

FAQ

Our extensive documentation makes it easy for you to learn all you need to know about compliance and how to use iubenda’s products on your site or app. You can access it here. You can also visit our support forum here.

A good rule of thumb is to always comply with the laws of the region where you are based as well as the region or country in which the users you target are based.

📌 However, for an even easier, more specific way to tell which laws apply to you, you can simply take this 1-minute quiz.

If you’re based in the European Union – including the UK – or target EU users, and your website uses cookies or trackers (which it most likely does), then, yes, you do need a cookie notice.

A privacy policy is a legal requirement almost everywhere in the world. You need it because under most countries’ laws, you’re legally required to inform your users about the data you’re collecting and how you’re processing them.

Find out what should be in a privacy policy here.

While Terms and conditions aren’t always legally mandatory, they’re always recommended. They help you protect you and your business from legal liabilities.

However, please note that if you run an e-commerce, then you’ll most likely need terms and conditions, as they usually contain legally mandatory information related to commerce.

GDPR stands for General Data Protection Regulation (Regulation (EU) 2016/679). The GDPR specifies how personal data should be lawfully processed (including how it’s collected, used, protected or interacted with in general).

While it was still an EU member state, the UK was very instrumental in the creation of the GDPR and therefore, Post-Brexit, has adopted the UK-GDPR – which currently is essentially the same as the European GDPR.

DSGVO & RGPD are, respectively, the German and Spanish translations of the English acronym of the General Data Protection Regulation (GDPR).

Learn more about the GDPR here.

In effect since 2002, the ePrivacy Directive (Cookie Law) was created to put guidelines in place for electronic privacy, including email marketing and cookie usage.

Under the Cookie law, organizations that target users from the EU must inform users about data collection activities and give them the option to choose whether it’s allowed or not.

This means that if your site/app (or any third-party service used by your site/app) uses cookies or similar technologies, you must first obtain valid consent prior to the installation of those cookies, except where they fall into the exempt category.

In practice, you’ll need to:

  • show a cookie banner at the user’s first visit;
  • implement a cookie policy that contains all required information;
  • allow the user to provide or refuse consent;
  • block cookie/ tracker scripts from running until consent is provided.

You can learn more about how the ePrivacy and GDPR interact in regards to cookies and trackers here.

The Privacy and Electronic Communications Regulations 2003 (PECR) is the UK’s implementation of the EU’s ePrivacy directive and sets out rules for electronic privacy.

California’s most well-known privacy laws are some of the most robust in the United States. They are both relevant to you if you likely have users that are based in the state of California.

California Online Privacy Protection Act (CalOPPA) – since 2002

  • Must clearly state what info is collected and who it’s shared with.
  • Must disclose how a business’s website or online service responds to Do Not Track signals from Web browsers.
  • Must include the effective date of the Privacy Policy and more.

California Consumer Protection Act (CCPA)

  • Grants users additional rights such as the right to be informed and the right to access information you’ve collected about them – but perhaps, most relevant to marketing is the right to Opt-out.
  • Under the CCPA, users have the right to opt-out of any processing that can be considered a sale of their data. Sale, in this context, is quite broad and simply means sharing for any profit- monetary or otherwise.

Note that in the case of minors, they are granted the right to Opt-in.More about the CCPA here.

The Brazilian General Data Protection Law, the Lei Geral de Proteção de Dados Pessoais, (LGPD) can be considered as Brazil’s answer to the GDPR – with the Brazilian law aligning with the EU Regulation in many ways, while differing in others. You can learn more about it here.

The post iubenda app for Duda | All-in-one Compliance for GDPR / CCPA Cookie Consent, and more appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How Ad-Blockers Affect iubenda’s Privacy Controls and Cookie Solution or Cookie Banner: What You Should Know https://www.iubenda.com/en/help/166973-what-happens-to-compliance-when-ad-blockers-and-browsers-block-cookies-2/ Tue, 12 Nov 2024 17:14:46 +0000 https://help.iubenda.com/?p=166973 Many website owners worry about GDPR compliance when users visit their sites with ad-blockers enabled. Ad-blockers and browsers like Brave might block iubenda’s Privacy Controls and Cookie Solution, or even other products, preventing the cookie banner from displaying. This raises concerns about compliance with GDPR regulations. This article explains why website owners can still be […]

The post How Ad-Blockers Affect iubenda’s Privacy Controls and Cookie Solution or Cookie Banner: What You Should Know appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Many website owners worry about GDPR compliance when users visit their sites with ad-blockers enabled. Ad-blockers and browsers like Brave might block iubenda’s Privacy Controls and Cookie Solution, or even other products, preventing the cookie banner from displaying. This raises concerns about compliance with GDPR regulations. This article explains why website owners can still be compliant and what steps they should take to demonstrate their efforts.

Understanding the Issue

Ad-blockers can prevent cookie banners or privacy notices from appearing on your website. This might seem problematic because it could appear that you’re not informing visitors about cookie usage or collecting their consent. However, compliance can still be achieved by understanding a few things, let’s see!

GDPR Compliance and Accountability

Under the GDPR, website owners (Data Controllers) must follow the accountability principle. This means they need to show they have procedures in place that allow users (Data Subjects) to exercise their privacy rights.

Key Points:

  1. Accountability Principle: Website owners must prove they have implemented processes to protect user privacy.
  2. User Consent: If users willingly use ad blockers, they effectively waive certain privacy rights, as stated in the tool’s terms and conditions.
  3. No Liability: Data Controllers can avoid liability if they show they comply with GDPR and have no control over users’ use of ad blockers. This is supported by Article 82(3) of the GDPR.

🇪🇺 Learn more about the 7 principles of GDPR to ensure your site meets key compliance standards effectively.

US Perspective on Privacy Compliance

Similar principles apply in the US. Website owners (Controllers) must demonstrate accountability and show they have enabled individuals to exercise their privacy rights. If individuals willingly use tools that block privacy features, they waive some of their rights.

Key Points:

  1. Accountability: Controllers must show they have implemented privacy procedures.
  2. User Consent: Conscious use of ad blockers means users waive certain privacy rights.
  3. No Liability: Controllers are not liable if they comply with legal requirements and cannot control the use of ad blockers.

🇺🇸 Learn about key compliance steps with our US State Privacy Laws Overview to keep your business aligned with state regulations.

Best Practices for Website Owners

  1. Implement Privacy and Cookie Policies: Ensure you have all necessary GDPR measures in place, including a comprehensive Privacy Policy and Cookie Policy. Clearly outline how your site handles data and cookies.
  2. Detecting Ad-Blockers: According to the European Commission, you can detect if a user is using an ad-blocker without needing their prior consent. This detection should be included in your Privacy Policy, explaining that it’s necessary to ensure proper consent management. You can easily integrate this detection via a custom clause using iubenda’s generator as detailed here.
  3. Inform Users: If an ad-blocker is detected, inform users that their use of such tools may prevent them from seeing important privacy notices and cookie consent banners. Encourage them to disable the ad-blocker for full functionality.

💡 How You Can Integrate Ad-Blocker Detection into Your Privacy Policy with iubenda


To add a custom service for ad-blocker detection to your iubenda privacy policy, you can follow these detailed steps:

  1. Log in to your iubenda account and go to the Dashboard.
  2. Once in the Privacy and Cookie Policy generator, choose the "Add service" option.
  3. Click on "Create custom service." This will lead you to the input prompts for creating a custom clause.
  4. Fill Out Mandatory Fields
    • Service Name: Enter a clear and concise title, such as "Ad-Blocker Detection"
    • Privacy Policy Description: Detail the types of data collected by the ad-blocker detection service, how this data is used, and if shared with any third parties. Include information about the third party, if applicable, such as their headquarters location and a link to their privacy policy.
  5. Optional Fields:
    • Purpose: Assign a purpose from the provided drop-down list to categorize the data collection activities. For example, you might select "Handling activities related to compliance"
    • Show this service on: Specify where this service will appear—either in the privacy policy, the cookie policy, or both.
  6. By checking the "Specify service translations" box, you can provide translations for different languages, ensuring your policy is accessible and clear to all users.
  7. Once all fields are completed, save the custom service. It will automatically integrate into your privacy policy text, ensuring that it appears seamlessly alongside other pre-made clauses.
adblocker service

By following these steps, you ensure that the ad-blocker detection feature is transparently disclosed in your privacy policy, helping to maintain compliance with GDPR and providing users with clear information about data collection practices.

👉 While ad blockers and certain browsers can pose challenges, demonstrating that your site has the necessary privacy tools installed will keep you compliant with GDPR and other privacy and cookie laws. This proactive approach helps protect your business and ensures that you are fulfilling your legal obligations.

⚖ Legal Framework and Liability

Perimeter of Liability of the Controller: The concept of “strict” liability in GDPR means that a controller may be held liable even in the absence of personal fault. This applies particularly to (1) obligations that impose a result-based requirement on the controller and (2) liability for actions taken by processors under the controller’s authority.

  • Recital 74; Article 24: The controller is responsible for implementing appropriate technical and organizational measures to ensure and demonstrate that its processing activities are compliant with GDPR requirements. These measures may include adopting a suitable privacy policy.
  • Article 82(3): A controller or processor is exempt from liability if they can prove that they are not responsible for the event causing the damage.
  • Recital 55 of Directive 95/46: Provides examples of how a controller might demonstrate that they are “not responsible for the event giving rise to the damage.”

Need a solution for cookie consent management?

Stay compliant, manage consent to cookies and store your users’ preferences with iubenda’s Privacy Controls and Cookie Solution.

Get started for free today!

The post How Ad-Blockers Affect iubenda’s Privacy Controls and Cookie Solution or Cookie Banner: What You Should Know appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Hide the iubenda Banner on Specific Pages https://www.iubenda.com/en/help/166100-how-to-hide-the-iubenda-banner-on-specific-pages/ Thu, 17 Oct 2024 10:56:14 +0000 https://help.iubenda.com/?p=166100 Sometimes, you may want to hide the iubenda cookie consent banner on certain pages of your website. For example, if you have a cookie policy page or any other specific page where the banner is not necessary, it’s possible to exclude the banner from appearing. This guide will show you how to easily achieve that […]

The post How to Hide the iubenda Banner on Specific Pages appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Sometimes, you may want to hide the iubenda cookie consent banner on certain pages of your website. For example, if you have a cookie policy page or any other specific page where the banner is not necessary, it’s possible to exclude the banner from appearing. This guide will show you how to easily achieve that by making a simple customization within your site.

Step 1: Ensure the iubenda Privacy Controls and Cookie Solution Script is Embedded

First, make sure that the iubenda Privacy Controls and Cookie Solution script is already embedded on your site.

Once the script is in place, you can customize it to prevent the banner from displaying on specific pages.

Step 2: Hide the Banner on a Specific Page

To hide the cookie banner on a particular page, you can implement a quick adjustment, by adding a custom script after the iubenda Privacy Controls and Cookie Solution script. For example, if you want to hide the banner on your cookie policy page, follow these steps:

  1. Identify the page where you want to exclude the banner. In this example, let’s say the URL is http://provawordpress.local/cookie-policy/.
  2. You can add a simple rule that ensures the banner won’t appear on that specific page.

Here’s an example of how you can achieve this:

<script>
if(window.location.pathname === "/cookie-policy/") { 
    
     document.head.innerHTML = document.head.innerHTML + '<style>div#iubenda-cs-banner { display: none !important; } </style>';

}
</script>

In this case, the banner will be hidden when someone visits the cookie-policy page.

Here’s an example of how this script might look:

<script type="text/javascript">
var _iub = _iub || [];
_iub.csConfiguration = {"cookiePolicyUrl":"http://provawordpress.local/cookie-policy/","consentOnContinuedBrowsing":false,"enableTcf":false,"whitelabel":false,"lang":"en-GB","siteId":1129739,"floatingPreferencesButtonDisplay":"bottom-right","perPurposeConsent":true,"cookiePolicyId":33731144, "banner":{ "closeButtonRejects":true,"acceptButtonDisplay":true,"customizeButtonDisplay":true,"explicitWithdrawal":true,"position":"float-top-center","closeButtonCaption":"<button type=\"button\" class=\"iubenda-cs-close-btn\" tabindex=\"0\" role=\"button\" aria-pressed=\"false\" style=\"background-color: rgb(239, 239, 239) !important; border-radius: 55px !important; border: 1px solid rgb(119, 119, 119) !important; font-size: 16px !important; font-weight: bold !important; padding: 10px 20px !important; height: 34px !important; color: rgb(102, 102, 102) !important; visibility: visible;\">Continue without accepting</button>" }, "footer":{"btnCaption":"Custom Test Here"}};

</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

<script>

//custom script to add

if(window.location.pathname === "/cookie-policy/") { 
    
     document.head.innerHTML = document.head.innerHTML + '<style>div#iubenda-cs-banner { display: none !important; } </style>';

}
</script>

Step 3: Customize for Any Page on Your Website

You can easily apply this same logic for any other page on your website. Let’s say you want to hide the banner on a different page, like www.test.com/about-us. In that case, simply update the script to match the URL of the page where you want the banner hidden.

For example:

<script>
if(window.location.pathname === "/about-us/") { 
    
     document.head.innerHTML = document.head.innerHTML + '<style>div#iubenda-cs-banner { display: none !important; } </style>';

}
</script>

This script will hide the banner whenever a user visits the /about-us/ page.

This small adjustment allows you to decide where the iubenda cookie banner displays on your website. Whether you want to hide the banner on a specific policy page or any other section of your site, you can easily customize the banner’s visibility according to your needs.

The post How to Hide the iubenda Banner on Specific Pages appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Keep Your Consent Data in Sync Across Different Platforms with iubenda’s 2-Way Sync https://www.iubenda.com/en/help/165790-how-to-set-up-and-manage-webhooks-in-iubendas-consent-database/ Tue, 15 Oct 2024 10:22:40 +0000 https://help.iubenda.com/?p=165790 Managing consent across different platforms just got easier. With iubenda’s 2-Way Sync for the Consent Database, you can automatically synchronize consent statuses in real-time across all your third-party tools, like CRM platforms (e.g., HubSpot), email marketing tools (e.g., Mailchimp), and more. This two-way synchronization makes it simple to keep your consent data accurate and compliant, […]

The post How to Keep Your Consent Data in Sync Across Different Platforms with iubenda’s 2-Way Sync appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Managing consent across different platforms just got easier. With iubenda’s 2-Way Sync for the Consent Database, you can automatically synchronize consent statuses in real-time across all your third-party tools, like CRM platforms (e.g., HubSpot), email marketing tools (e.g., Mailchimp), and more. This two-way synchronization makes it simple to keep your consent data accurate and compliant, all without the need for manual updates or complex coding.

In this guide, we’ll walk you through how to easily set up and manage webhooks for 2-Way Sync, ensuring your consent data is always up-to-date across all your platforms.

Before we get started with the setup, let’s take a look at the key features of the 2-Way Sync system powered by webhooks:

  • 2-Way Sync: More than just a simple webhook feature, this system offers two-way synchronization between your Consent Database and external platforms, including CRMs and email marketing tools. This means that any update to consent data (like a user opting in or out of your newsletter) is automatically reflected across all connected platforms—in both directions.
  • Centralized Privacy Compliance: Manage all your consent preferences from one central hub, helping you comply with privacy regulations effortlessly. This is particularly beneficial for activities like newsletters and lead generation, where data privacy is crucial.
  • Automated Data Management: Whenever changes occur on one platform (e.g., a user unsubscribes in Mailchimp), this system automatically updates all connected platforms (e.g., HubSpot). It also keeps a log of these changes in your Consent Database, saving you time and minimizing the manual effort required to stay compliant.
  • No Custom Code Needed: Streamline your consent management process without the hassle of custom coding or third-party services. This system simplifies integrations, making it accessible for users at any technical level.
  1. Go to Settings: From the iubenda Dashboard, select the project and click the settings icon.
  2. Open Consent Database Webhooks: In the side menu, click on “Consent database webhooks“. This section is your starting point for setting up the synchronization between the Consent Database and your connected platforms.
  3. webhooks iubenda consent database
  4. Activate the Consent Database (If required): If the Consent Database is not yet active, you’ll see a message: “To start setting up webhooks, you first need to activate the Consent Database.” Click Activate Consent Database and follow the prompts.
  5. webhooks iubenda consent database
  6. If your Consent Database is already active, proceed to create a new webhook. You’ll see a description of how webhooks work, with a “+ Create a new webhook” button available to get started.
  7. webhooks iubenda consent database

2. Creating a New Webhook

Setting up a webhook lets you automatically synchronize and notify connected platforms about consent status changes. Here’s how to set one up:

  1. Click “+ Create a new webhook”, this will open the webhook creation modal.
  2. Select the Webhook Type: You’ll see two options at the top:
  3. webhooks iubenda consent database
  • 📥 Inbound: Use this to automatically update your Consent Database when a specific event, like a user consent change, is triggered on an external platform. It reacts to updates made outside the Consent Database (e.g., a user updating their preferences in your CRM or email tool), ensuring those updates are promptly reflected within your database.
  • 📤 Outbound: Use this to notify external systems whenever an event, such as a consent status change, is registered in your Consent Database.

In some cases, the Consent Database can serve as a bridge between two platforms. For example, an inbound webhook can capture consent changes from a platform like Mailchimp, and an outbound webhook can send those updates to another platform, like HubSpot. This allows you to keep all systems in sync through iubenda, without manual intervention.

Let’s go through how to set up each type.

3. How to Set Up an Inbound Webhook

An inbound webhook is used to automatically update the Consent Database when user actions, like consent changes, occur on an external platform. For example, if a user opts in to your newsletter via a form on your website, this change will automatically sync with your Consent Database.

Step-by-Step Instructions

  1. Choose the “Inbound” Tab.

👉 This webhook updates your Consent Database whenever a specific event, like a user opting in or out, is triggered on an external platform.

  1. Specify the Preference to Be Updated:
  • Newsletter (These details are based on the Newsletter Opt-in Booster naming):
    • Use the dropdown to select the preference value (e.g., True for Subscribed, False for Unsuscribed). This refers to the actual value associated with the user’s consent preference in your Consent Database.
    • webhooks iubenda consent database
  • If you wish to use different names and values, choose the ‘Custom’ option below. (This option is needed if you’ve set up custom preferences or values that are specific to what you’re saving in the Consent Database.)
    • Enter your custom preference name (e.g., tosAccepted).
    • Enter the value (e.g., true). Remember, both fields must be filled.
    • webhooks iubenda consent database
  1. Click “Save” to complete the setup and save the webhook.

✅ Your Consent Database will now automatically receive updates whenever the specified event occurs, matching the subject’s email and updating the corresponding consent status.

4. How to Set Up an Outbound Webhook

An outbound webhook sends notifications to external systems (like Mailchimp or your CRM) whenever there’s a change in the Consent Database. This is useful for keeping your platforms updated with the latest consent preferences.

⚠ Note: To connect to third-party platforms, you will need to use an external integration service like Zapier, N8n, or Make. These tools act as intermediaries, receiving the webhook data and then forwarding it to the desired platform (e.g., Mailchimp, HubSpot) to keep everything in sync.

💡 You can also check the guide on integrating with services like Zapier and Make for additional help.

Step-by-Step Instructions

  1. Select the “Outbound” Tab.

👉 This webhook sends notifications to external systems when consent status changes.

  1. Specify the Endpoint URL: Enter the URL where updates should be sent. (Note: This is a required field.)
  2. Choose the Preference to Track:
  • Newsletter (These details are based on the Newsletter Opt-in Booster naming):
    • Optionally, select “Set for specific preference value only” to track changes for a specific value and use the dropdown to select the preference value (e.g., True for Subscribed, False for Unsubscribed).
    • webhooks iubenda consent database
  • If you wish to use different names and values, select the ‘Custom’ option below.”
    • Enter a custom preference name (e.g., tosAccepted).
    • If you only want to send notifications for specific values, check “Set for specific preference value only” and enter the value (e.g., true).
    • webhooks iubenda consent database
  1. Click “Save” to create the outbound webhook.

✅ It will now notify the specified platform whenever the chosen consent changes occur in the Consent Database.

5. Managing Webhooks in the Consent Database Dashboard

Activating or Pausing Webhooks

Each webhook (inbound or outbound) has a toggle switch that allows you to enable or pause updates. This control is helpful when you need to temporarily stop syncing data.

Editing a Webhook

Find the webhook you want to modify and click the “Edit” button. This opens the webhook setup interface, where you can change the endpoint URL, tracked preferences, or any other settings. Click Save to apply the updates.

webhooks iubenda consent database

Deleting a Webhook

To delete a webhook, click the trash icon next to it. A confirmation prompt will appear to ensure you want to proceed. Click “Confirm” to permanently remove the webhook.

💡 Note: Once deleted, a webhook cannot be recovered, so make sure to double-check before confirming.

🔍 Example Use Case: Syncing Your Newsletter and CRM

Suppose you use Mailchimp for newsletters and HubSpot as your CRM. Here’s how you can sync consent preferences across both platforms using iubenda’s webhooks:

  1. Inbound Webhook (e.g. Mailchimp to iubenda): Set up an inbound webhook in iubenda to capture subscribe or unsubscribe events from Mailchimp. This updates the Consent Database automatically.
  2. Outbound Webhook (e.g. iubenda to HubSpot):: Create an outbound webhook from iubenda to HubSpot. Using a service like Zapier, N8n, or Make, you can forward consent status updates to HubSpot, ensuring the CRM always has the most current data.

With this 2-way synchronization, your consent preferences are automatically updated across both Mailchimp and HubSpot—saving you time and reducing manual work. This means, your Consent Database keeps a record of all changes, helping you stay compliant with privacy regulations.

Example:

Webhooks in iubenda’s Consent Database are a powerful way to keep your marketing tools, CRMs, and other platforms updated with the latest consent preferences. With just a few clicks, you can ensure that user preferences are always in sync across your platforms, helping you maintain compliance and streamline your processes.

Set up 2-Way Sync Now to Simplify Consent Management!

Stay compliant effortlessly and start syncing data across all your platforms with ease.

Get started today!

The post How to Keep Your Consent Data in Sync Across Different Platforms with iubenda’s 2-Way Sync appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Why Is Data Decreasing After Installing Google Consent Mode v2? https://www.iubenda.com/en/help/151085-why-is-data-decreasing-after-installing-google-consent-mode-v2-2/ Fri, 12 Apr 2024 14:10:08 +0000 https://help.iubenda.com/?p=151085 Have you noticed that you’re losing some analytics data after setting up Google Consent Mode v2 on your website? If you see your analytics numbers dropping, you’re not alone. Many website owners observe a decrease in analytics figures after implementation, which can be quite concerning. However, this is a normal effect of how Google Consent […]

The post Why Is Data Decreasing After Installing Google Consent Mode v2? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Have you noticed that you’re losing some analytics data after setting up Google Consent Mode v2 on your website?

If you see your analytics numbers dropping, you’re not alone. Many website owners observe a decrease in analytics figures after implementation, which can be quite concerning. However, this is a normal effect of how Google Consent Mode works. Let’s dive deeper to understand why this occurs.

data loss consent mode

Google Consent Mode v2 and its advanced features, along with Google Analytics 4’s (GA4) behavioral modeling, play a significant role in understanding this data loss. When you first switch to Consent Mode v2, especially without using its previous version, you might see a significant drop in your reported data. This reduction might alarm you, but the duration of this data loss depends on specific aspects of GA4’s behavioral modeling.

Here’s what needs to happen for behavioral modeling, which helps compensate for lost data when users do not consent to analytics, to start working:

  1. Advanced Consent Mode Usage: Your site should use not only the basic features of Consent Mode but also its advanced functionalities.
  2. Required Data Volume: Your site needs to collect at least 1,000 events per day where analytics storage is denied (analytics_storage=’denied’) for at least seven consecutive days.
  3. Minimum User Engagement: You need at least 1,000 daily users sending events with analytics storage granted (analytics_storage=’granted’) for at least seven of the past 28 days.

👉 Imagine your site’s cookie consent rate is 50%. This means you would need around 2,000 daily visitors to achieve the necessary conditions for half of them to enable the analytics storage required.

After your site meets these conditions, it qualifies for behavioral modeling. Initially, you may see a steep decline in your data, but as the site complies with the behavioral modeling criteria, you will observe a recovery in data collection, though there may still be a gap from when the conditions were unmet.

🔎 What Can You Do?

If you’re facing these challenges, here are a few strategies you could try:

  • Drive More Traffic: Boosting your site’s traffic can help meet the thresholds needed for behavioral modeling.
  • Estimate Manually: If some of your visitors consent to tracking, manually estimate your overall traffic based on this data.
  • Explore Other Analytics Tools: Use tools like Google Search Console for verification, or switch to privacy-focused analytics platforms like Piwik Pro or Microsoft Clarity, which offer privacy considerations similar to those of Universal Analytics.

💡 Remember, although adapting to Google Consent Mode might initially seem daunting, the process is quite straightforward. Relying on a Google-certified Consent Management Platform (CMP) with built-in Google Consent Mode like iubenda significantly simplifies the implementation, making it easier to manage and more effective

The post Why Is Data Decreasing After Installing Google Consent Mode v2? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
HubSpot Cookie Banner: How to Add a Cookie Banner on HubSpot with iubenda https://www.iubenda.com/en/help/148057-hubspot-cookie-banner-how-to-add-a-cookie-banner-on-hubspot-with-iubenda-2/ Fri, 16 Feb 2024 17:42:10 +0000 https://help.iubenda.com/?p=148057 Adding a HubSpot cookie banner to your website is easy with iubenda’s Privacy Controls and Cookie Solution. Just follow these steps, and you’ll have it up and running in no time! How do I add a cookie banner in HubSpot? To add a cookie banner in HubSpot, you simply create a JavaScript file with the […]

The post HubSpot Cookie Banner: How to Add a Cookie Banner on HubSpot with iubenda appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Adding a HubSpot cookie banner to your website is easy with iubenda’s Privacy Controls and Cookie Solution. Just follow these steps, and you’ll have it up and running in no time!

How do I add a cookie banner in HubSpot?

To add a cookie banner in HubSpot, you simply create a JavaScript file with the iubenda code, attach it to your site’s template, and include it on all relevant pages.

Here’s the step-by-step process ⬇

Step 1: Create a New JavaScript File for the iubenda Privacy Controls and Cookie Solution

  1. Go to Your HubSpot Account:
    • Click on Marketing then Design Tools.
hubspot cookie banner
  1. Create a New File:
    • In the sidebar, click File > New file. (You might need to click the folder icon first.)
    • Choose JavaScript from the “What would you like to build today?” dropdown.
    • Click Next.
cookie consent banner
  1. Name Your File:
    • Type in a name for your script in the File name field.
  1. Select File Location:
    • Click Change in the File location section and pick a folder.
    • Click Create.
hubspot cookies
  1. Enter the iubenda Code:
    • Paste the iubenda Privacy Controls and Cookie Solution code into the editor.
    • If ESLint shows warnings or errors, use the Show output switch to see them.
    • Click Publish changes when you’re done.
hubspot cookie banner
❗
Still Without a Cookie Banner?

Easily generate a compliant cookie consent banner for free with our user-friendly generator.

👉 Generate your Free Cookie Banner for HubSpot Now!

Step 2: Attach the iubenda Privacy Controls and Cookie Solution to a Template

  1. Find Your Template:
    • Use the finder on the left to pick the template you want to update.
  1. Edit Template:
    • In the inspector on the right, click the Edit tab.
    • Under Linked JavaScript files, click Add and select your iubenda script.
    • Click Publish changes to finish.
hubspot cookie consent banner

Step 3: Include the iubenda Privacy Controls and Cookie Solution on HubSpot Pages

  1. Accessing the File’s Public URL:
    • Find your script in the sidebar and click Actions > Copy public URL.
  1. Add Script to All Pages on a Domain:
    • Go to Settings: Click the settings icon in the main navigation bar.
    • Navigate to Your Site’s Pages: Choose Website > Pages in the sidebar.
    • Select Your Domain: Use the dropdown to pick a domain or set it for all domains.
    • Add Your Script: In Site footer HTML, paste the script tag with your public URL.

    Example:

    <!-- start iubendaCookieSolution.js Do Not Remove -->
    <script src='insert your file's public URL here'></script>
    <!---End iubendaCookieSolution.js-->
    • Click Save.
  1. Add Script to an Individual Page:
    • Edit Your Page: Go to Marketing > Website > Website Pages or Landing Pages. Hover over a page and click Edit.
    • Page Settings: Click the Settings tab, then Advanced options.
    • Insert Your Script: In Footer HTML, paste the script tag with your public URL.

    Example:

    <!-- start iubendaCookieSolution.js Do Not Remove -->
    <script src='insert your file's public URL here'></script>
    <!---End iubendaCookieSolution.js-->
    • Click Update in the upper right to apply your changes.

That’s it! You’ve successfully added a cookie banner to your HubSpot site using iubenda.

Remember, keeping your website up-to-date with the latest privacy standards is crucial. If you have any more questions or need further assistance, don’t hesitate to reach out for help. Happy website updating!

FAQs

Why is my cookie banner not appearing in HubSpot?

Several reasons could cause your cookie banner, also called a cookie consent banner not to appear in HubSpot:

  • The JavaScript file containing the iubenda Privacy Controls and Cookie Solution might not have been properly created or published.
  • The script may not have been correctly attached to your template or included in the HubSpot pages.
  • Your browser’s cache might need to be cleared.

To add a cookie consent banner on HubSpot, follow these steps: First, create a JavaScript file and insert the iubenda code into it. Next, attach this file to your site’s template. Finally, ensure you include this script on all relevant pages of your site by following the detailed instructions above to integrate the iubenda Privacy Controls and Cookie Solution into your website.

The purpose of HubSpot cookies is to track visitors’ interactions with your website. This collected data can include pages viewed, time spent on the site, and how the visitor arrived at your site. HubSpot uses this data for analytics and personalized marketing, helping you understand and engage your audience more effectively.

See also

The post HubSpot Cookie Banner: How to Add a Cookie Banner on HubSpot with iubenda appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda mobile SDK – Integration with Google Consent Mode v2 for Firebase Analytics https://www.iubenda.com/en/help/145991-iubenda-sdk-integration-with-google-consent-mode-v2-for-firebase-analytics/ Wed, 17 Jan 2024 17:20:17 +0000 https://help.iubenda.com/?p=145991   Google Analytics for Firebase offers a consent mode that allows you to adjust the SDK’s behavior based on your user’s consent status. This guide will walk you through integrating Google Consent Mode v2 for Firebase Analytics using the iubenda SDK. Integrating Google Consent Mode v2 in your App Setting Up Consent Mode For Android […]

The post iubenda mobile SDK – Integration with Google Consent Mode v2 for Firebase Analytics appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 

Google Analytics for Firebase offers a consent mode that allows you to adjust the SDK’s behavior based on your user’s consent status. This guide will walk you through integrating Google Consent Mode v2 for Firebase Analytics using the iubenda SDK.

Integrating Google Consent Mode v2 in your App

Before starting, ensure Firebase SDK is correctly integrated into your app. Find more information here for Android and iOS. Follow this guide to integrate the iubenda SDK with your app.

To set up Consent Mode v2 in your app, you need to:

  1. Set the default consent state: By default, no consent mode values are set. You need to define these in your app’s manifest (Android) or Info.plist (iOS) file.
  2. Update consent values: Based on user preferences captured through the iubenda SDK, update the consent values in Firebase Analytics.

Consider that consent types indicate the type of storage being used. These types include:

Consent TypeDescription
ad_storageEnables storage, such as cookies (web) or device identifiers (apps), related to advertising.
ad_user_dataSets consent for sending user data to Google for online advertising purposes.
ad_personalizationSets consent for personalized advertising.
analytics_storageEnables storage, such as cookies (web) or device identifiers (apps), related to analytics, for example, visit duration.
functionality_storageEnables storage that supports the functionality of the website or app, for example, language settings
personalization_storageEnables storage related to personalization, for example, video recommendations
security_storageEnables storage related to security such as authentication functionality, fraud prevention, and other user protection

You can find the official documentation for using Consent mode with Firebase SDK here.

Let’s see how it works: ⬇

For Android Apps

1. Set default consent state

First, you need to set the default consent state for your app since by default, no consent mode values are set

To set them, open the manifest file (the AndroidManifest.xml) and add the consent mode key-value pairs.

The keys provided are: 

  • google_analytics_default_allow_analytics_storage
  • google_analytics_default_allow_ad_storage
  • google_analytics_default_allow_ad_user_data
  • google_analytics_default_allow_ad_personalization_signals

The keys are set with a value that indicates the consent state:

– true, meaning consent was granted, or 
– false, meaning consent was denied.

In the example below, we added all the default values set to false:

<meta-data android:name="google_analytics_default_allow_analytics_storage" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_storage" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_user_data" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_personalization_signals" android:value="false" />

Next, you need to implement the consent values update method.

2. Update consent values

  • Open the Activity/Fragment where you prompt the cookie notice with the iubenda SDK, 
  • implement “IubendaCMPChangeListener” interface with this code:
public class MainActivity extends AppCompatActivity implements IubendaCMPChangeListener
  • add “onConsentChanged()” override method to get consent changes:
@Override
public void onConsentChanged() {
}

Doing so, the iubenda SDK will trigger onConsentChanged() whenever a user sets their consent preferences (e.g. with the IubendaCMP.askConsent() method.

After capturing consent settings, you need to send them to Firebase Analytics SDK

To update consent values after the user has expressed their preferences, you need to call the setConsent method.

Use this code to update the different consent values to granted:
@Override
public void onConsentChanged() {
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap = new EnumMap<>(FirebaseAnalytics.ConsentType.class);
if(IubendaCMP.isPurposeEnabled(4)){
consentMap.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, FirebaseAnalytics.ConsentStatus.GRANTED);
}
if(IubendaCMP.isPurposeEnabled(5)){
consentMap.put(FirebaseAnalytics.ConsentType.AD_STORAGE, FirebaseAnalytics.ConsentStatus.GRANTED);
consentMap.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, FirebaseAnalytics.ConsentStatus.GRANTED);
consentMap.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, FirebaseAnalytics.ConsentStatus.GRANTED);
}
mFirebaseAnalytics.setConsent(consentMap);
}

As you can see, the ANALYTICS_STORAGE consent type is mapped with the purpose 4 of the Privacy Controls and Cookie Solution (Measurement), while the others (AD_STORAGE, AD_USER_DATA and AD_PERSONALIZATION) are mapped on the purpose 5 of the Privacy Controls and Cookie Solution (Marketing).

Verify consent settings

To verify that your consent settings are working as expected,  enable verbose logging on your device, and in the Android Studio logcat, find the log message that starts with Setting consent

For iOS Apps

1. Set default consent state

First, you need to set the default consent state for your app since, by default, no consent mode values are set.

To set them, open the Info.plist file and add the consent mode key-value pairs.

The keys provided are: 

  • GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE
  • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE
  • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA
  • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS

The keys are set with a value that indicates consent state:

– true, meaning consent was granted, or 
– false, meaning consent was denied.

In the example below, we added all the default values set to false:

<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE</key> <false/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE</key> <false/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA</key> <false/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS</key> <false/>

Next, you need to implement the consent values update method.

2. Update consent values

  • Open the ViewController where you prompt the cookie notice with the iubenda SDK, 
  • implement “NSNotification.Name.ConsentChanged” selector with this code:
NotificationCenter.default.addObserver(self, selector: #selector(consentDidChange), name: NSNotification.Name.ConsentChanged, object: nil)
  • add “consentDidChange()” method to get consent changes:
@objcfunc consentDidChange() {
}

Doing so, the iubenda SDK will trigger consentDidChange() whenever a user sets their consent preferences (e.g. with the IubendaCMP.askConsent(from: self) method.

After capturing consent settings, you need to send them to Firebase Analytics SDK.

To update consent values after the user has expressed their preferences, you need to call the setConsent method.

Use this code to update the different consent values to granted:

@objc func consentDidChange() {

var analyticsStorageGranted = false
var adStorageGranted = false
var adUserDataGranted = false
var adPersonalizationGranted = false

if(IubendaCMP.isPurposeEnabled(id: 4)){
analyticsStorageGranted = true
}else{
analyticsStorageGranted = false
}
if(IubendaCMP.isPurposeEnabled(id: 5)){
adStorageGranted = true
adUserDataGranted = true
adPersonalizationGranted = true
}else{
adStorageGranted = false
adUserDataGranted = false
adPersonalizationGranted = false
}

Analytics.setConsent([
.analyticsStorage: analyticsStorageGranted ? .granted : .denied,
.adStorage: adStorageGranted ? .granted : .denied,
.adUserData: adUserDataGranted ? .granted : .denied,
.adPersonalization: adPersonalizationGranted ? .granted : .denied,
])
}

As you can see, the analyticsStorage consent type is mapped with the purpose 4 of the Privacy Controls and Cookie Solution (Measurement), while the others (adStorage, adUserData and adPersonalization) are mapped on the purpose 5 of the Privacy Controls and Cookie Solution (Marketing).

Verify consent settings

To verify that your consent settings are working as expected, enable verbose logging on your device, and in the Xcode, find the log message related to the parameters. For example:

ad_storage is granted. 
analytics_storage is granted. 
ad_user_data is granted. 
ad_personalization is granted.

Remember, these settings help tailor your app’s functionality to respect user preferences and legal requirements. For detailed steps and code snippets, refer to the official documentation and ensure your app is set up correctly.

The post iubenda mobile SDK – Integration with Google Consent Mode v2 for Firebase Analytics appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda’s Guide to the EU Whistleblower Directive & Our Dedicated Tool https://www.iubenda.com/en/help/141269-eu-whistleblower-directive-guide-iubenda-tool-2/ Thu, 26 Oct 2023 15:30:17 +0000 https://help.iubenda.com/?p=141269 Short on time? Jump to: How Iubenda’s Whistleblowing Management Tool Works. Directive (EU) 2019/1937, also known as the Whistleblower Directive, came into effect on December 16, 2019. This directive marked the beginning of heightened protections for those who report breaches of EU law within their professional environment. It required Member States to align their national […]

The post iubenda’s Guide to the EU Whistleblower Directive & Our Dedicated Tool appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Short on time? Jump to: How Iubenda’s Whistleblowing Management Tool Works.

Directive (EU) 2019/1937, also known as the Whistleblower Directive, came into effect on December 16, 2019. This directive marked the beginning of heightened protections for those who report breaches of EU law within their professional environment. It required Member States to align their national laws, guaranteeing a consistent protection level for whistleblowers throughout the EU.

This Directive emphasizes the significance of safeguarding whistleblowers and ensures that entities have appropriate channels for reporting breaches of Union law.

Understanding the EU Whistleblower Directive

Objective: Its primary intent is to set a baseline and align national legislations across the EU regarding the protection of individuals who disclose violations of Union law.

Implementation Timeline

  • General Adoption: EU Member States had a deadline until December 17, 2021, to enact laws and regulations in line with the Directive’s requirements.
  • Specific Provisions for Medium-Sized Entities: The Directive stipulates that private sector and legal entities employing between 50 and 249 individuals have until December 17, 2023, to implement an Internal Reporting Channel (IRC).

The establishment of this IRC must emphasize the following pillars:

  • Confidentiality: Ensuring the privacy of the whistleblower.
  • Prompt Acknowledgment: Recognizing received reports within a 7-day window.
  • Impartial Management: Appointing an impartial person designated specifically for handling reports.
  • Timely Feedback: Committing to provide feedback on reports within a span of three months.
  • Effective Safeguards: Clearly delineating the methods and pathways available for reporting.
  • Transparent Reporting Avenues: Ensuring protection for whistleblowers who report truthfully within the Directive’s scope. Safeguards include strict confidentiality, assistance from authorities, legal aid and protection against retaliation, including the exclusion of liability in certain cases and a reversed burden of proof.

Additionally, entities are obligated to preserve all records pertaining to reports and their accompanying documentation, in order to comply with the requirements imposed.

Key aspects and objectives of the EU Whistleblower Directive

  • Broad Scope of Application: The directive covers a wide range of areas, including public procurement, financial services, money laundering, product and transport safety, nuclear safety, public health, consumer protection, environmental protection, and more.
  • Multiple Reporting Channels: Whistleblowers are encouraged to use internal reporting channels within their organizations first, but if these are not effective or could lead to retaliation, they can also report directly to competent national authorities or even make a public disclosure in certain circumstances.
  • Protection Measures: The directive sets out that member states should prohibit any form of retaliation against whistleblowers, including dismissal, demotion, harassment, and other forms of unfair treatment.
  • Confidentiality: The identity of whistleblowers must remain confidential unless they give their express consent to disclose their identity.
  • Public and Private Sector: The directive applies to both the public and private sectors. In the private sector, it applies to entities with more than 50 employees, unless a special provision is made for entities with fewer employees.
  • Burden of Proof: If any adverse actions are taken against the whistleblower, presumably in retaliation to a report, then the burden of proof shifts to the person who has carried out the detrimental action to demonstrate that they acted for reasons other than retaliation.
  • Support and Assistance: Member states are required to provide information, advice, and even free legal aid to whistleblowers to ensure they know their rights and are supported throughout the process.

IMPORTANT: iubenda has built a dedicated tool to help you manage written whistleblower reports, but the Directive also requires businesses to set up in-person and oral reporting methods within their internal channel (and to provide all the same protections to whistleblowers who use it).

💡 To learn more about the details of this directive, please read our article “EU Whistleblower Directive: Stronger protection for reporting breaches of EU law”.

iubenda’s Whistleblowing Management Tool 🚀

iubenda’s Whistleblowing Management Tool helps EU businesses ensure compliance. We’ve designed our product to streamline management within organizations, protect whistleblowers, and ensure businesses consistently adhere to the law.

Our tool offers an easy-to-use reporting form for employees and other stakeholders and allows businesses to manage the entire process from an intuitive all-in-one dashboard.

IMPORTANT: Even if your company is based outside the EU, if you have an EU branch with at least 50 employees, it also needs to comply with the directive.

💡 Haven’t used our solutions yet? 👉 Start generating here.

How It Works

⚠ iubenda’s Whistleblowing Management Tool is included in the Ultimate Plan, it can be activated with one click. No configuration needed.

1. Activate the Whistleblowing Management Tool

From your iubenda Dashboard, simply click on “Activate

⚠ Once you’ve activated the Whistleblowing Management Tool, be sure to click on the “Embed” button within the Whistleblowing tile to proceed with the form embedding. If you don’t do so, you won’t be able to receive any whistleblower reports. See below how to embed your Whistleblowing Management Tool ⬇

2. Embedding

💡 Remember, a clearly visible form ensures that anyone who wishes to report can easily do so.

After activation, click on “Embed” to integrate the reporting form for easy access by employees or other potential reporting persons.

Next, in this section, you’ll find all the options to embed the form:

  • Direct link: Use a direct link if you wish to send your users to your form directly, rather than using a modal window. Copy it, and then paste it strategically on your website, intranet, whistleblower policy, or wherever else you need it.
  • Add a widget to the footer: Use the provided code to embed the form directly on your site. You can choose to have the button in white, black, or remove the styling altogether. Just copy and paste it in the body of your website, wherever you wish to display the button. When users click this button, the form will open in a modal.
  • Embed the form in the body: Embedding the form directly into the body of your webpage integrates it as if it were part of your website. For this, copy the JavaScript snippet and paste it into the HTML of the specific page you’ve designated for this purpose.
  • Printable PDF with QR code: It serves as an offline extension of the online form. Designed for physical distribution. Simply print the PDF and display or distribute it as needed. The PDF includes a QR code that, when scanned, directs users to the associated online whistleblower reporting form.

⚠ Tips:

  • Using a direct link guarantees that the form displays consistently across different platforms.
  • Ensure the form is easily noticeable, regardless of the chosen embedding method.
  • While the site’s footer is recommended for universal access, consider other strategic locations based on your organization’s structure.

Where do I put the iubenda Whistleblowing link?

That depends entirely on you. But the rule of thumb is your site’s footer. It’s a good way for it to be seen from every page.

3. User Reporting

Once activated, reporting persons can choose to report either anonymously or by providing their identity using the form embedded on your website. They can specify details such as the type of wrongdoing or misconduct, provide an exact date, and describe the facts. Once completed, they simply click on “Submit report” to send it.

After submitting the form, reporting persons will automatically receive an acknowledgment of receipt.

3.1 Appointing a Whistleblowing Manager

❗ Direct Appointment Through Our Tool

Appoint a Whistleblowing Manager efficiently and seamlessly within our tool, making the process smoother and more integrated. This eliminates the need for a separate appointing form.

Dashboard Access Message

When someone without the necessary permissions tries to access the Whistleblowing Dashboard, they’ll see this message:

You don’t have the necessary permissions to access this tool.

Whistleblowing Dashboard access is limited to Whistleblowing Managers only.
If you require access to this dashboard, please contact the account admin to request a Whistleblowing Manager role. For admins, role management can be handled via the ‘Teams’ section located in the ‘Account & Billing Info’ page.
Please note: Admins cannot assume the role of Whistleblower Managers due to role-specific restrictions & cannot use certain embedding features like pdf downloads, preview, etc.

Steps for Admins

  1. Go to ‘Teams’: This is found in the ‘Account & Billing Info‘ page in the top right drop-down menu.
  2. Assign the Role: Click on “+ Add user” and then choose the appropriate team member to be the Whistleblowing Manager by entering their email address.
  3. Send Invitation: The chosen member will receive an email to accept this role.
  4. Role Acceptance: Once accepted, they can access the Whistleblowing Dashboard.

Note for Admins

Admins can’t be Whistleblowing Managers due to specific role restrictions. This ensures a clear separation of duties within the organization for better compliance and management.

4. Whistleblower dashboard

When a reporting person submits a report, the Whistleblowing Manager immediately receives an email notification. The Whistleblowing Manager can then access all reports from the Dashboard, and quickly identify the status of each.

In your Whistleblowing Management Dashboard you have full access to all the requests, with all the necessary details — the Creation Date, Type, Reporting Person, Status and a Detail Icon.

When you click on a report, all report details become visible. This allows you to promptly address any reported issues while ensuring a secure and confidential channel for whistleblowers.

From this “Report details” panel, you have the capability to assign different statuses, add notes, and see the full history for each report, helping you track the different phases of report processing.

The status of each report is now clearly marked, making it easier to track where each report stands in the process.

Step-by-Step Status Confirmation

  • Review Before Proceeding: A Whistleblowing Manager must review and confirm the current status before moving to the next. This ensures that each phase of the report is properly handled.
  • Confirmation Required: It’s no longer possible to skip ahead without confirming the current status. This adds an extra layer of diligence to the process.

Option to Leave Notes

  • Add Context: Whistleblowing Managers can now leave notes for each status. This is great for adding details or context, making the report handling more transparent and informative.
  • Easy Tracking: These notes help keep a clear record of thoughts, actions, and decisions made at each stage.

Detailed Log for Every Report

  • Chronological Order: At the bottom of the details modal of each report, you’ll find a detailed log. This log lists all the status changes in chronological order.
  • Full History: This feature provides a complete history of each report’s journey through the process, making it easier to review and understand the actions taken.

These updates to status management and the addition of a detailed log improve the overall process of managing whistleblowing reports. They provide clarity, ensure accountability, and make it easier to maintain a thorough record of each report’s handling.

Consider that each status in the whistleblowing report process represents a specific stage. Here’s what they mean and how to manage them:

  • Received: Once a report is received, review it and advance to the next step. Remember that upon submission, by default, the online form displays an acknowledgment receipt to the whistleblower. For non-anonymous reports, consider reaching out to the whistleblower in writing within 7 days.
  • Admissibility → Admissible/Not admissible: Your initial task is to assess the report’s admissibility. If the report meets the set criteria and is deemed admissible, continue with its processing. However, if it’s found inadmissible, consider the processing complete. For non-anonymous reports, inform the reporting person.
  • Processing (relevant only if admissible): After marking a report as admissible, ensure diligent follow-up. As per the Whistleblower Directive, advance to the subsequent step and provide feedback to the reporting individual within 3 months from the acknowledgment date.
  • Feedback Provided (relevant for non-anonymous reports only): Upon completion of the follow-up activities, share your assessment and subsequent steps taken with the reporting person, if their identity is known. As stipulated by the Whistleblower Directive, offer this feedback within 3 months of acknowledgment.
  • Processed: At this point, you’ve executed all requisite actions, deeming the report processed. Assess if additional steps are necessary for further follow-up or internal purposes before contemplating deletion.
  • Information Deleted: In accordance with the Whistleblower Directive, reports must be retained only for the duration necessary and proportionate to comply with the requirements of the directive or other mandates from Union or national law. In instances where national legislation specifies deletion requirements, ensure compliance. Exercise caution when deleting, as this action is irreversible.

Additional Resources

To help our users and enhance the efficiency of managing whistleblowing, we’ve prepared a set of downloadable resources:

  • 📜 Customizable Whistleblowing Policy Template — The whistleblower policy serves as a foundational blueprint for organizations to personalize, featuring a section that allows for the addition of a link to the form for online submissions, while offering flexibility for customization to meet the organization’s unique needs and operational style. It establishes clear guidelines, ensuring that the team knows exactly how to proceed when encountering unethical or illegal behavior.
  • 👥 Appointment Template: Assigning Responsibility — We prepared an appointment template for the designation of a person or department to handle whistleblowing reports. It helps streamline the reporting and investigation process, ensuring accountability and that concerns are addressed by those best equipped to handle them.

Meet EU Whistleblower Directive Requirements Today!

Activate now

The post iubenda’s Guide to the EU Whistleblower Directive & Our Dedicated Tool appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
What Are the Terms and Conditions and When Are They Needed? https://www.iubenda.com/en/help/2859-terms-and-conditions-when-are-they-needed/ Thu, 13 Jul 2023 13:00:00 +0000 http://help.iubenda.com/?p=2859&lang=en “Terms and Conditions” is the document governing the contractual relationship between the provider of a service and its user. On the web, this document is often also called “Terms of Service” (ToS), “Terms of Use“, EULA (“End-User License Agreement”), “General Conditions” or “Legal Notes”. Short on time? Jump to ⬇️ The Terms and Conditions are […]

The post What Are the Terms and Conditions and When Are They Needed? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

“Terms and Conditions” is the document governing the contractual relationship between the provider of a service and its user. On the web, this document is often also called “Terms of Service” (ToS), “Terms of Use“, EULA (“End-User License Agreement”), “General Conditions” or “Legal Notes”.

The Terms and Conditions are nothing other than a contract in which the owner clarifies the conditions of use of its service. Some quick examples are the use of the content (copyright) , the rules that users must follow while interacting with one another on the website / app and, finally, rules related to the cancellation or suspension of a user’s account etc.

Particular emphasis should be given to the limitation of liability clauses (and disclaimers) , for example in cases of malfunctions of the app/ website, or user generated content. You can see an example of a Terms and Conditions clause below.

Terms and conditions example template

The Terms and Conditions therefore, represent the document that helps in dealing with problems or preventing them in the first place. Because of that, the Terms and Conditions are fundamental in many cases in order to mount an adequate and proper defense.

Terms of Service set the way in which your product , service or content may be used, in a legally binding way. They are crucial for protecting your content from a copyright perspective as well as for protecting you from potential liabilities.

What should I do if I run an e-commerce website? Is it recommended to create a Terms and Conditions document?

Yes, it is not only advisable but also often mandatory.

Not only are terms critically important for protecting you from potential liabilities, but they regularly contain legally mandated information such as users’ rights, withdrawal or cancellation disclosures.

Generally, a website/app should have an accurate and valid Terms of Service document in place whenever complex issues are at stake, such as in the case of e-commerce, where sensitive information such as payment data is processed.

In e-commerce sites, the Terms of Service is typically the document that contains information related to conditions of sale and disclosures on methods of payment, shipping, delivery, withdrawals, and cancellation conditions etc. – as commonly required by consumer protection regulations.

💡 You can read more about eCommerce requirements here.

What should I put for terms and conditions?

Creating this document for a website, app, or any other type of service can be complex and requires a comprehensive understanding of your business, legal requirements, and specific risk factors.. While the full content may vary based on the particulars of your business, your document should at least include the following basic information:

  • Identification of the business
  • Description of the servicethat your site/app provides
  • Information on risk allocation, liability, and disclaimers
  • Warranty/Guarantee information (where applicable)
  • The existence of a withdrawal right (if applicable)
  • Safety information, including instructions for proper use (where applicable)
  • Terms of delivery of product/service (where applicable)
  • Rights of use (if applicable)
  • Conditions of use/purchase (eg. age requirements, location-based restrictions)
  • Refund policy/exchange/termination of service and related info
  • Info related to methods of payment
  • Any additional applicable terms

Remember the document must be up-to-date with all applicable regulations, precise, visible and easily understandable so that users can both easily see it and agree to it.

You need to enable cookies to see the quiz

Can I use a terms and conditions template?

Despite how simple they appear, terms and conditions are meant to meet incredibly complex and highly specific scenarios. Because each terms and conditions document is a legally binding contract that is meant to protect you, the business owner, it’s imperative that the document matches your specific business processes, model, and remains up-to-date with the various laws referenced in its contents. Templates simply cannot do this, therefore, we strongly suggest that you avoid using templates. Read our extended answer to this question here.

How do I write my own terms and conditions?

They are such an important and legally-binding document that you should make sure they are professional and respect your business situation.
Without any legal background, it’s very complicated to write them on your own. That’s why it’s best to seek legal advice. Another strong and probably easier alternative, you can use a Terms and Conditions Generator. It allows you to build and generate your own document in a few clicks, and then install it on your website. Learn how to do this here.

Terms of Use vs. Terms of Service: what’s the difference between Terms and Conditions, Terms of Service and Terms of Use?

In general, there is no legal difference. Terms and conditions, terms of service and terms of use are names all used to refer to the same document. The particular name used at any point in time is simply a matter of preference.

Privacy Policy vs. Terms and Conditions: what’s the difference between these two legal documents?

Privacy policy and terms and conditions are both legally binding agreements, but:

  • Privacy policies are legally required under most countries’ legislations. They protect and inform your users and declare your compliance with applicable privacy laws in a legally binding way. While they do give you some leeway in terms of stating things such as how you handle “do not track” requests, they are generally aimed at protecting the user (more in our Legal Requirements Overview).
  • Terms and conditions are aimed at protecting the business (you). They give business owners the opportunity to set their rules (within applicable law) of how their service or product may be used including, but not limited to, things like copyright conditions, age limits, and the governing law of the contract. While terms are generally not legally required (like the privacy policy), it is essential for protecting your interests as a business owner.

How iubenda can help you generate and manage a Terms and Conditions document

Customizable from over 100 clauses, available in 11 languages, drafted by an international legal team and up to date with the main international legislations, our Terms and Conditions Generator is capable of handling even the most complex, individual scenarios and customization needs.

Our solution works for businesses of any size, from the single blogger to enterprise level organizations, protecting their interests and their content.It’s optimized for e-commerce, marketplace, SaaS, mobile apps, blogs, publications and more.

🚀
For more information on how to create your terms of use for your site/app

read our guide on How to Generate a Terms and Conditions document.

Generate a Terms and Conditions document

Optimized for E-commerce, Marketplace, SaaS, Apps and more

Start generating

See also

The post What Are the Terms and Conditions and When Are They Needed? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Prior Blocking of Cookies: Automatic Blocking (auto-blocking) https://www.iubenda.com/en/help/133036-prior-blocking-of-cookies-automatic-blocking-auto-blocking-2/ Wed, 12 Jul 2023 11:58:26 +0000 https://help.iubenda.com/?p=133036 In addition to displaying a cookie banner and in accordance with laws like the GDPR, you must obtain consent for any cookies that are not essential for the technical functions of a website. This means that any cookie that is not considered strictly necessary should not be placed on users’ browsers until they have given […]

The post Prior Blocking of Cookies: Automatic Blocking (auto-blocking) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

In addition to displaying a cookie banner and in accordance with laws like the GDPR, you must obtain consent for any cookies that are not essential for the technical functions of a website. This means that any cookie that is not considered strictly necessary should not be placed on users’ browsers until they have given their consent.

In this guide, we will show you how to automate the process of setting your cookies, scripts, and tags to respond to the preferences selected by your site visitors.

❗ We’re continually fine-tuning the auto-blocking feature to provide the best possible experience. However, please be aware that it remains experimental, and its accuracy may not be flawless. For a safer approach, consider relying on other methods for prior blocking.

In short

Until users have provided their consent, all non-exempt cookies should be blocked, and no data should be collected from them. Similarly, if users reject the use of cookies, the cookies should not be set.

What is Automatic Blocking?

Auto-blocking is a feature that automatically blocks the scripts that may install cookies/trackers on the website until the user gives consent. It’s required for compliance with privacy laws such as the GDPR by preventing the setting of third-party cookies.

The purpose of auto-blocking is to ensure that only strictly necessary cookies are set by a website. This is crucial because regulations like the GDPR require opt-in consent before placing any cookies on a user’s device, unless they are considered strictly necessary or essential.

Our Privacy Controls and Cookie Solution takes care of automatically blocking third-party scripts that install cookies, so you don’t have to do it manually.

How to install the iubenda Privacy Controls and Cookie Solution

For an installation guide, please see our introduction to the Privacy Controls and Cookie Solution. For WordPress, please read our dedicated post for WordPress that teaches you how to use the iubenda Privacy Controls and Cookie Solution plugin for WordPress to automate the blocking of scripts.

Which Cookie-installing Scripts Should be blocked?

This depends on the legal jurisdiction applicable to your site. In Europe, you’re legally required to block cookie scripts and similar technologies until informed user consent is obtained. Almost all cookies must be blocked, however, there are a few specific exemptions, the so-called strictly necessary cookies.

If you’re not sure if the cookies running on your site falls into this category, it’s always better to take a safe approach and block until consent is received.

How Automatic Blocking Works

The iubenda scanner crawls your website, identifying all cookies, services, scripts, iframes, videos, images, and other tracking methods employed to track users and set cookies. Using this information, the automatic blocking feature loads domains associated with these services and prevents requests from them until the user provides consent.

iubenda automatically blocks selected sources from setting cookies on the user’s browser based on the results from the site scanner with consideration to the cookie classifications listed in the Cookie Policy, as well as commonly used scripts and tracking technologies.

In cases where there are cookies that are not automatically blocked, you have the option to block custom domains by directly adding them or choosing to exempt specific domains from being blocked.

How to Implement Automatic Blocking

❗Please note that for new installations of the Privacy Controls and Cookie Solution, auto-blocking is enabled by default with the stricter approach (Basic implementation of “Google Consent Mode”). With this method, Google services are blocked completely until the user provides consent. This ensures that no data processing occurs without explicit user permission. Once consent is granted, Google services are unblocked and data processing activities commence.

This means that the checkbox ‘Do not block Google’s services that adhere to Consent Mode‘ and ‘Do not block vendors that adhere to the TCF when the TCF is enabled‘ are NOT checked by default.

If instead, you want to use the Advanced implementation of “Google Consent Mode”, and allow Google services to dynamically adapt based on changes in consent set by the user, simply follow these steps:

⚠ Note that this method offers flexibility, but requires careful consideration to ensure privacy compliance.

Once the site/project is selected in the “Dashboard”, you can configure automatic blocking by clicking on the settings icon located in the site info panel:

icon dashboard

Next, in the tab: “Block scripts prior to consent“, you will find the configuration option for Automatic blocking:

Automatic Blocking Panel

Once you activate “Automatic blocking,” you can choose to enable or disable the pre-set toggles, allowing you to block cookies from selected sources according to your specific requirements and the legal jurisdiction applicable to your site:

✅ Block scripts detected from site scanner:

When this option is enabled, “perfect match” third-party scripts identified by our site scanner will be automatically blocked to prevent them from installing cookies on your site.

✅ Block scripts related to services listed in your Privacy and Cookie Policy:

Enable this option to automatically block scripts linked to services listed in your Privacy and Cookie Policy. Exclusively available for policies created with the Privacy and Cookie Policy Generator.

To fine-tune how these services are categorized and influence how they are blocked, check out Customize Service Categorization.

✅ Block well-known scripts and tracking technologies:

Enable this option to block widely recognized scripts and tracking technologies. Note: if a script is blocked in this manner, it may not be loaded by the Privacy Controls and Cookie Solution, making it impossible to associate it with the relevant purpose. If you are using one of these technologies on your website, we highly recommend that you add them to your iubenda Privacy and Cookie Policy.

✅ Do not block Google’s services that adhere to Consent Mode:

When this option is enabled, our Privacy Controls and Cookie Solution will automatically activate advanced implementation of Google’s Consent Mode. This method allows Google services to adapt dynamically based on changes in consent set by the user.

For example, if a user initially denies consent for certain data processing activities, Google services will respect this choice and adjust their behavior accordingly. Even if consent is denied, certain user data, such as IP addresses, may still be processed by Google services. ⚠ Please note that this method offers flexibility but requires careful consideration to ensure compliance with privacy regulations.

✅ Do not block vendors that adhere to the TCF when the TCF is enabled:

When this feature is enabled, ad delivery is driven by the TCF consent string, reflecting the user’s preferences. We recommend that you check with your associated vendors to find the best strategy that balances optimal performance with compliance.

block scripts prior to consent

❓ What well-known scripts and tracking technologies are automatically blocked?

The services for which scripts and tracking technologies are blocked by default are:

  • Google Fonts
  • Font Awesome
  • Google Analytics
  • Google Analytics 4
  • Facebook Ads conversion tracking
  • YouTube video widget
  • Video Vimeo
  • Google Ads conversion tracking

Customize Service Categorization

Our Privacy and Cookie Policy Generator now lets you customize how services are categorized in your Privacy and Cookie Policy, giving you more control over auto-blocking behavior within the Privacy Controls and Cookie Solution (Cookie Banner), and automatically updating your cookie policy to reflect these changes.

Why It Matters

Auto-blocking: Auto-blocking prevents third-party cookies and trackers from loading until users give explicit consent, as required by laws like GDPR. By adjusting a service’s category, you decide which consent is needed to unblock it.

Legal documents (Cookie Policy): Your Cookie Policy dynamically reflects these categorizations, and any changes you make are automatically updated in your cookie policy.

How It Works

  • Services are grouped into five categories: Necessary (1), Functionality (2), Experience (3), Measurement (4), and Marketing (5).
  • By default, iubenda assigns categories, but you can now reassign them.
  • A service under Marketing (5) stays blocked until marketing cookies are accepted.
  • If you change it to Experience (3), it requires only experience cookies.
  • If moved to Necessary (1), it loads immediately without consent.

Simply open the Privacy and Cookie Policy Generator, select a service, click the edit icon, update its category in the “Change the default purpose categorization inside the Cookie Policy” section, and save—your policy and cookie banner behavior will update accordingly.

service categorization

Advanced settings

Block Custom Domains

❗ Please note that if you want to use the “Advanced Settings” you will need to upgrade your plan.

You can manually add a domain that may contain a script that installs cookies or trackers, if this domain has not been detected by our system. This way, requests from that domain will be restricted until consent is given for the specific purpose mentioned.

In this case, you’ll need to specify the relevant purpose (e.g. Necessary, Functionality, Experience, Measurement, Marketing) that must be accepted by the user when collecting consent for the manually added script. This is because manually add scripts are not initially categorized under one of the predefined purposes.

To do this, enable the “Block custom domains” toggle and select “Add domain”. At this point, you can specify the domain and indicate the purpose. Finally, click “Save domain” to block any requests until consent is given for the specified purpose.

Automatic Blocking Panel
block custom domains
block custom domains purposes

Additional settings

  • Block inline scripts: When this option is enabled, scripts that are directly integrated within your website’s HTML will be blocked prior to consent
  • Block synchronous scripts: When this option is enabled, synchronous scripts will be blocked on your website prior to consent.
  • Block images: When this option is enabled, images from third-party sources will be blocked on your website
  • Block stylesheets: When this option is enabled, third-party stylesheets will be blocked on your website
  • Block content from same domain: When this option is enabled, content from your own domain will be blocked on your website. This includes scripts, images, stylesheets, and other resources originating from your own domain. Please use caution when enabling this option, as it may impact the functionality and appearance of your site.

👉 Note that the default configuration of the checkboxes will be set as shown below:

autoblocking checkboxes

Ignore specific domains from automatic blocking

Enable this option to exempt specific domains from being blocked, allowing their scripts, resources, and content to remain unaffected on your website. This feature ensures that selected domains are exempted from the blocking mechanism, maintaining their intended functionality.

Embedding section

⚠ Once you click “Save changes“, you will be redirected to the embedding section, where you can verify the activation of “Prior Blocking of Cookies“. From there, you can easily copy and paste the code snippet at the very beginning of the <head> tag of your pages.

autoblocking embedding section

Remember, in the event that you make changes to the automatic blocking status (enabled/disabled), the embedded code snippet will be modified accordingly. Therefore, it is necessary to copy and embed your code again.

And you’re done! ✅ Get started implementing iubenda’s automatic blocking now for effortless legal compliance.

The post Prior Blocking of Cookies: Automatic Blocking (auto-blocking) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database Integration Guide (All Major Platforms) https://www.iubenda.com/en/help/129285-consent-database-integration-guide-all-major-platforms/ Wed, 17 May 2023 10:36:20 +0000 https://help.iubenda.com/?p=129285 Have a website and need to meet GDPR consent requirements? Well, you’re in the right place. In this guide, we’ll take a look at: 🔎 GDPR consent proof requirements Maintaining comprehensive records of consent is a vital part of privacy compliance in general, but is specifically required under the GDPR. These records should include a […]

The post Consent Database Integration Guide (All Major Platforms) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Have a website and need to meet GDPR consent requirements?

Well, you’re in the right place. In this guide, we’ll take a look at:

  • GDPR consent proof requirements, and
  • how to add iubenda’s Consent Database to your website platform of preference.

🔎 GDPR consent proof requirements

Maintaining comprehensive records of consent is a vital part of privacy compliance in general, but is specifically required under the GDPR. These records should include a way of identifying the user, proof of consent, a record of the consenting action, and the legal documents available to the user at the time of consent, among other things.

👉 You can read about the full requirements here.

How to record and manage GDPR consent with the Consent Database

The Consent Database allows you to record consent preferences performed by your users (subjects), storing the information necessary for proof of consent according to the GDPR. The database captures a series of legally required values about your users’ consent preferences, which you can easily review within a visual dashboard. These values include the user’s consent status, time stamps, which legal documents were available to the user on your site at the time, the consent collection mechanism, and more.

The Consent Database provides you with an API to:

  • Add, revoke, and manage user consent
  • For each consent, get a certified timestamping
  • Store multiple preferences for each user (e.g. if you have multiple newsletters or opt-ins)
  • Store whether a user was verified with double opt-in
  • Store additional information about the user, allowing you to identify him/her in the future
  • For each consent, track the legal or privacy notice the user has accepted
  • For each consent, track the form/wording the user was prompted with
  • Flexibly upload any form of proof of consent or legal notice, including a PDF if consent was collected on paper
  • For each user, get the latest preferences and which consent action is the proof of consent

📌 How to integrate the Consent Database

At iubenda, we strive to make the integration process as easy as possible. That’s why we offer multiple integration options, including some that are no-scripting required, all compatible with a wide range of platforms.

No matter what platform you’re using, our integrations are designed to be user-friendly, and our guides are easy to follow, so you can get up and running in no time.

Setting up your Consent Database is easy! Let’s take a look at the individual integrations available ⬇

⚙ Platform-specific Integrations

To make it easier for you to integrate the iubenda Consent Database with your preferred platform, we’ve compiled a list of guides that you can use to get started. In short, the process involves 3 main steps, which we’ll walk you through. Some integrations are no-scripting required, while others may need a bit of scripting.

Step 1 👉

Simply select your platform from the list below, and you’ll be directed to a dedicated guide that provides step-by-step instructions on how to integrate the iubenda Consent Database with your platform.

💡 Prefer to use an API? Use the private API key (select the dedicated guide below) and install the Consent Database via Zapier or Make (no scripting required, no programming experience necessary).

or


⚙ If you prefer a backend integration, check our HTTP API documentation.

Step 2 👉

Once you’ve selected the platform you’re using, you’ll find step-by-step instructions on how to integrate iubenda’s Consent Database into your website. These instructions are easy to follow and guide you through the process smoothly.

Step 3 👉

After you’ve followed the integration guide: Test your configuration and fill out your form — you should see your consent data in the Consent Database Dashboard.

details consent database

🎉 There you have it! Now, you will be able to see your subjects’ consent records in your iubenda dashboard!

The post Consent Database Integration Guide (All Major Platforms) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to solve common Cookie Solution issues with cache plugins and optimization features https://www.iubenda.com/en/help/105616-how-to-solve-common-cookie-solution-issues-with-cache-plugins-and-optimization-features/ Thu, 10 Nov 2022 15:52:39 +0000 https://help.iubenda.com/?p=105616 In some cases, when iubenda’s inline JavaScript is delayed due to: This could occur specifically when a feature called “JS Optimizations” is configured in cache plugins. Like for example: WP-Rocket, Autoptimize, and similar. Since our Cookie Solution is written in JavaScript, if other plugins try to optimize it, sometimes our script gets broken – so […]

The post How to solve common Cookie Solution issues with cache plugins and optimization features appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

In some cases, when iubenda’s inline JavaScript is delayed due to:

  • External JavaScript is loaded, and that relies on inline JavaScript.
  • JavaScript minification is active, which saves files locally.
  • Default exclusions are in place.

This could occur specifically when a feature called “JS Optimizations” is configured in cache plugins. Like for example: WP-Rocket, Autoptimize, and similar.

Since our Cookie Solution is written in JavaScript, if other plugins try to optimize it, sometimes our script gets broken – so you should configure each cache plugin so that it “ignores” our “inline” script, which refers to the part that the user pastes into the <head> tag when installing our Cookie Solution or use our plugin.

For example, in the case where the default exclusions are in place, a JavaScript error pops up:

How to avoid the delay of JavaScript execution with iubenda’s default exclusions?

WP-Rocket plug-in

In this case, you just need to do the following:

1. exclude _iub from the “combine” and “minification” feature in the WP-Rocket settings, to do so, add it in the exclusion field, as shown below:

Since our script was broken due to previous JS Optimization, now we need to re-add the original Cookie Solution script in the <head> tag (as the first element) or in our all-in-One WordPress plugin:

Note

If you use WP-Rocket from version 3.13 and the “Delay JavaScript execution” feature is enabled, you can exclude our plugin from the “One-click exclusion” area by selecting our plugin in this way:

exclude plugin one click

2. Re-add the original Cookie Solution script in the <head> section as the first element:

<script type="text/javascript">
var _iub = _iub || [];
_iub.csConfiguration = {"enableCcpa":true,"countryDetection":true,"askConsentAtCookiePolicyUpdate":true,"consentOnScroll":false,"consentOnDocument":true,"ccpaAcknowledgeOnDisplay":false,"whitelabel":false,"lang":"en","siteId":1264045,"cookiePolicyId":93663998, "banner":{ "position":"bottom" }};
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/ccpa/stub.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

3. make sure the default exclusions are in place;

4. and check the JavaScript console for the error.

Autoptimize plug-in

This same problem can happen when you are using the Autoptimize plugin and you can solve it by adding only the attribute data-noptimize to our inline Cookie Solution script.

Autoptimize recognizes a script attribute, data-noptimize, which means the inline script won’t be inlined or anyway it should be ignore by autoptimize and many users add it in our inline script in this way:

<script data-noptimize="true">
var _iub = _iub || [];
_iub.csConfiguration = {"enableCcpa":true,"countryDetection":true,"askConsentAtCookiePolicyUpdate":true,"consentOnScroll":false,"consentOnDocument":true,"ccpaAcknowledgeOnDisplay":false,"whitelabel":false,"lang":"en","siteId":1264045,"cookiePolicyId":93663998, "banner":{ "position":"bottom" }};
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/ccpa/stub.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Doing these steps, the expected behavior is that there should be no errors when JavaScript Execution Delay is active.

Note

In general also consider to exclude from every JS Optimization feature of your cache plugin also our external file iubenda_cs.js, stub-v2.js and stub.js

See also

The post How to solve common Cookie Solution issues with cache plugins and optimization features appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database for Prestashop https://www.iubenda.com/en/help/74560-consent-solution-for-prestashop/ Tue, 09 Aug 2022 05:53:56 +0000 https://help.iubenda.com/?p=74560 Have you generated a website using Prestashop and need to meet GDPR consent requirements? Well, you’re in the right place. In this guide, we’ll take a look at GDPR consent proof requirements and how to add iubenda’s Consent Database to your Prestashop site. → Jump to How to add the Consent Database on Prestashop Why do […]

The post Consent Database for Prestashop appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Have you generated a website using Prestashop and need to meet GDPR consent requirements?

Well, you’re in the right place. In this guide, we’ll take a look at GDPR consent proof requirements and how to add iubenda’s Consent Database to your Prestashop site.

Jump to How to add the Consent Database on Prestashop

To put it simply, you do need GDPR proof of Consent Database for your Prestashop site, and here’s why:

Consent records are specifically required under the GDPR. Keeping a complete and thorough record of consent is required and is an essential part of privacy compliance. The records of proof are managed by you, the Data Controller. As a result, the GDPR requires you to keep “proofs” or records of consent that contain specific details that might prove that the consent received is genuine and therefore valid under the GDPR. Consent must be explicit, freely provided, and verifiable under the GDPR. You can read up more on iubenda’s Consent Database here.

These records should include a way of identifying the user, proof of consent, record of the consenting action, and the legal documents available to the user at the time of consent, among other things.

The following information should be recorded:

  • who provided the consent; 
  • when and how consent was obtained from the particular user; 
  • the consent collecting form they were presented with at the time of collection; and 
  • whatever conditions and legal documents were in effect at the time the consent was obtained.

You can read about the full requirements here.

iubenda’s Consent Database automatically records and manages GDPR & LGPD consent and privacy preferences for each of your users. You can read up more on iubenda’s Consent Database here.

How to add iubenda’s Consent Database on Prestashop 1.7 

💡Using Prestashop 1.6? See here →

This guide is in two parts; please select and follow one of the processes provided below.

  1. How to add Consent Database to the default Contact Us page on Prestashop
  2. How to add Consent Database to the default Newsletter form on Prestashop

Contact us page on Prestashop 

Please note that this guide is written for Prestashop 1.7; some parts of this guide may differ if you use an older version of Prestashop. Before starting, we suggest disabling Cache from Prestashop settings.

To begin, head to your Prestashop dashboard and click on advance parameters.

How to add Consent Solution on Prestashop

Next, click on Performance.

How to add Consent Solution on Prestashop


After that, in the Template Compilation drop-down menu, select > Recompile templates if the files have been updated from Template compilation.

How to add Consent Solution on Prestashop

Then toggle the Cache button to No in order to disable cache.

How to add Consent Solution on Prestashop

After that, scroll down to the bottom of the page and select the “Use Cache” setting and toggle to No. Finally, click on Save.

How to add Consent Solution on Prestashop

Next, we need to connect Contact US Page to your iubenda Consent Database. Here we are referring to the default ‘contact us page’ that Prestashop adds on the home page (usually at the top of the homepage, depending on your Theme) 

For example:

How to add Consent Solution on Prestashop

Which would link to a contact page like the one below: 

How to add Consent Solution on Prestashop

From here, we need to manually add IDs to the <form> tag and submit button of the form; to do this, follow the next steps:

1. Open contactform.tpl from your theme folder

You can find it in prestashop_folder\themes\YOUR_THEME\modules\contactform\views\templates\widget

(Replace YOUR_THEME, with the name of your theme in use)

2. Now, add id="form_contact" to <form> tag.

How to add Consent Solution on Prestashop

3. After that, add id="submit_button" to submit button.

How to add Consent Solution on Prestashop

4. Now the form is ready; we need to add the Load function of your Consent Database after the </form> closing tag

Please remember that the Load should be customized in this way: 

You can find a demo here.

The script should be added between the {literal} {/literal} tags

You will add in the load function as described below: 

  • ID "submit_button" in the submitElement:

submitElement: document.getElementById("submit_button"),

  • ID "form_contact" in the form object:

form: {
selector: document.getElementById("form_contact"),

  • in the subject, we should add the name attribute of the email field of our form; in this case, it is "from":

subject: {

email: "from"

How to find it? Go to your contact us page, click on the email field, right-click with your mouse, then click Inspect.

A tab with the HTML of that field will show you the name attribute:

How to add Consent Solution on Prestashop

The final Load script will look like the following: 

{literal}
<script type="text/javascript">
_iub.cons_instructions.push(["load",{
submitElement: document.getElementById("submit_button"),
form: {
selector: document.getElementById("form_contact"),
map: {
subject: {
email: "from"
}
}
},
consent: {
legal_notices: [
{
identifier: 'privacy_policy',
},
{
identifier: 'cookie_policy',
},
{
identifier: 'terms',
}
],
}}]);
</script>
{/literal}

Lastly, you will paste it after the </form> closing tag:

How to add Consent Solution on Prestashop

Next, we need to add the INIT function in the <head> of the website. 

Without modifying your theme’s template, we suggest you use a module that allows you to add scripts in the head tag. We recommend HTML box or something similar. 

After installing the HTML box or something similar, you can copy the INIT function from your iubenda’s dashboard → Consent Database → Embed

Before copying our INIT function, HTML BOX suggests disabling the HTML Purifier library; you can find it in Shop Parameters → General.

How to add Consent Solution on Prestashop


Copy INIT function in the HTML BOX module. Click on Module Manager.

How to add Consent Solution on Prestashop


Type in “html box” into the search bar. 

How to add Consent Solution on Prestashop

Then click on the Configure button.

How to add Consent Solution on Prestashop


After that, paste the INIT function into the text box provided and click on Save, and you’re done! 

How to add Consent Solution on Prestashop

Default Newsletter form on Prestashop

This step-by-step guide explains how to install Consent Database on the Newsletter form created using the default ps_emailsubscription module.

If ps_emailsubscription module is enabled, Prestashop creates a newsletter subscription form at the website’s footer.

Here is an example: 

How to add Consent Solution on Prestashop

Now we need to add IDs to the form and submit button of our form. To do so, you will need to open the ps_emailsubcription.tpl file and modify it.

You can find it in the folder themes/YOUR_THEME/modules/ps_emailsubscription/views/templates/hook/

(Replace YOUR_THEME, with the name of your theme in use)

After that, add id="newsletter_subscription" to the <form> tag.

How to add Consent Solution on Prestashop

Next, add id="submit_button" to the submit button.

How to add Consent Solution on Prestashop

Now the form is ready; we need to add the “submit” function of your Consent Database after the </form> closing tag. 

Please note that the Submit function should be customized in this way:

Please note that Prestashop requires you to paste the script between {literal} {/literal} tags. 

  1. ID "submit_button" here:
    document.getElementById("submit_button").onclick=function (e) {
  2. ID newsletter_subscription in the form object:
    form: {
    selector: document.getElementById("newsletter_subscription"),
  3. in the subject-object, we should add the name attribute of the email field of our form; in this case, it is “email”:
    subject: {
    email: "email"

How to find it? Go to your contact us page, click on the email field, right-click with your mouse, then click Inspect. 

A tab with the HTML of that field will show you the name attribute.

How to add Consent Solution on Prestashop

The final submit script will be:

{literal}
<script type="text/javascript">
document.getElementById("submit_button").onclick=function (e) {
_iub.cons_instructions.push(["submit",{
form: {
selector: document.getElementById("newsletter_subscription"),
map: {
subject: {
email: "email"
}
}
},
consent: {
legal_notices: [
{
identifier: 'privacy_policy',
},
{
identifier: 'cookie_policy',
},
{
identifier: 'terms',
}
],

}}])
};
</script>
{/literal}

You will paste it after the </form> closing tag

How to add Consent Solution on Prestashop

We need to add the INIT function in the <head> of the website.

Without modifying your theme’s template, we suggest you use a module that allows you to add scripts in the head tag. We recommend HTML box or something similar. 

After installing the HTML box or something similar, you can copy the INIT function from your iubenda’s dashboard → Consent Database → Embed

Before copying our INIT function, HTML BOX suggests disabling the HTML Purifier library; you can find it in Shop Parameters → General.

How to add Consent Solution on Prestashop


Copy INIT function in the HTML BOX module. Click on Module Manager.

How to add Consent Solution on Prestashop


Type in “html box” into the search bar. 

How to add Consent Solution on Prestashop

Then click on the Configure button.

How to add Consent Solution on Prestashop


After that, paste the INIT function into the text box provided and click on Save, and you’re done! 

How to add Consent Solution on Prestashop

Prestashop 1.6 with iubenda’s Consent Database

You can install iubenda’s Consent Database on the contact-us page of Prestashop 1.6.

Start by modifying (in the main theme folder) the file contact-form.tpl.Here you paste the Load function (before the form closing tag) and the header.tpl file where you paste the init function.

Please note that in the following script:
"submitMessage" is the ID of the submit button
"contact-form" is the ID of the form

You can save the consent by launching _iub.cons.sendData() using a javascript onclick event.

In the Load function, you are going to map the form fields, in this case only the email, where the name attribute is “from”.

The Load function is modified since we delete the “submitElement” and use the first javascript onclick event to send the consent mapped by the Load function.

{literal}
<script type="text/javascript">
document.getElementById("submitMessage").onclick=function(e){

_iub.cons.sendData();
}
</script>

<script type="text/javascript">

_iub.cons_instructions.push(["load",{


form: {

selector: document.getElementById("contact-form"),

map: {

subject: {

email: "from"

}

}

},

consent: {

legal_notices: [

{

identifier: 'privacy_policy',

},

{

identifier: 'cookie_policy',

},

{

identifier: 'terms',

}

],

}}]);

</script>

{/literal}

The init function should be pasted in the header.tpl file:
Please note that there is sendFromLocalStorageAtLoad: false

<!-- start init cons -->
{literal}
<script type="text/javascript">var _iub = _iub || {}; _iub.cons_instructions = _iub.cons_instructions || []; _iub.cons_instructions.push(["init", {api_key: "PUBLIC_TEST_API_KEY", *sendFromLocalStorageAtLoad**: false* }]);</script><script type="text/javascript" src="https://cdn.iubenda.com/cons/iubenda_cons.js" async></script>
{/literal}
<!-- end consent solution iubenda -->

The post Consent Database for Prestashop appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Google Consent Mode: Set up Google Tag Manager with iubenda https://www.iubenda.com/en/help/74198-google-consent-mode-set-up-google-tag-manager-with-iubenda-5/ Thu, 04 Aug 2022 16:33:54 +0000 https://help.iubenda.com/?p=74198 Google Consent Mode: With Google Tag Manager (GTM), you can simplify the process of tag configuration by using pre-configured templates created specifically for your GTM configuration. In the GTM Gallery you can choose from a library of templates that you can easily add to your installation. ⏰ Short on time? Jump straight to How To […]

The post Google Consent Mode: Set up Google Tag Manager with iubenda appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Google Consent Mode: With Google Tag Manager (GTM), you can simplify the process of tag configuration by using pre-configured templates created specifically for your GTM configuration.

In the GTM Gallery you can choose from a library of templates that you can easily add to your installation.

⏰ Short on time? Jump straight to How To Start!

What Is Google Tag Manager?

Google Tag Manager (GTM) is a powerful tool used for efficiently managing website tracking codes, commonly referred to as GTM tags. But what is GTM, and how can you use it to your advantage?

What is GTM?

GTM stands for Google Tag Manager, a free tool offered by Google. GTM tags are snippets of code that serve various purposes, such as collecting data and facilitating communication between your website or app and external analytics and marketing platforms.

What is Google Tag Manager Used For?

Google Tag Manager is primarily used for simplifying and centralizing the management of these tags on your website or app. It eliminates the need for manual code implementation, streamlining the process and reducing the risk of errors. It’s a versatile tool that helps you manage and deploy tags more efficiently.

How to Use Google Tag Manager:

  1. Code Installation: GTM provides a container-specific code snippet. Insert this code into your website or app’s header or body section, as required by the tags you wish to implement.
  2. Tag Implementation: Begin adding tags to your container. These tags can include tracking codes for various tools, such as Google Analytics, Google Ads, and more. GTM offers pre-built templates to simplify this process.
  3. Trigger Definition: Determine when and where your tags should activate by creating triggers. Customize triggers based on specific events or conditions, such as user interactions or page views.
  4. Variable Creation: Variables are used to store and retrieve data for tags and triggers. You can use existing variables or create custom ones to capture dynamic data.
  5. Preview and Debug: Before making your changes live, use GTM’s preview and debug mode to test your tags and ensure they function correctly.
  6. Publish Your Container: Once you’re satisfied with your setup and testing, publish your container. This action makes your changes live on your website or app.

How to Set Up Google Tag Manager

Important

This guide specifically explains how to integrate Google Consent mode with the iubenda Privacy Controls and Cookie Solution template. However, if you prefer to set up Google Consent mode without using the template, you can follow this guide.

If you’re looking to simplify the blocking of cookies and trackers using Google Tag Manager together with the auto-blocking feature, it’s important to note that the related snippet cannot be loaded directly via GTM. However, you can still refer to the following guide to streamline the cookie-blocking process using GTM.

By using the Google Tag Manager Template, you can automate the following tasks:

  1. Adding the cookie banner script to your website.
  2. Managing Google Consent Mode (GCM) automatically for tags that are natively compatible with Google Consent Mode, such as Google Analytics, AdSense, Floodlight, and Conversion Linker. Currently, the template allows you to manage prior consent for Custom HTML tags using the ‘additional consent checks’ feature in a few simple steps.
  3. Emit GTM Events – when enabled, iubenda automatically sends the event iubenda_gtm_consent_event to GTM whenever user preferences change.
    • This option is particularly useful if you’re using Custom HTML tags (e.g. Facebook Pixel, Hotjar, LinkedIn Insight Tag) that need to fire only after consent.
    • ➡ For built-in GTM tags (Google Analytics, Ads, Floodlight, Conversion Linker), this option is not required, since they already support native consent checks.

How To Start

First, you have to create a GTM account and set up a container.

account setup

Then, you’ll be required to paste the GTM snippet into your website’s <head> section.

gtm installation

Finally, you’ll reach the GTM dashboard.

Adding iubenda Privacy Controls and Cookie Solution template

Once in the dashboard, click on Add a new tag.

new tag

Then, click on the Tag configuration area, select “Discover more tag types in the Community Template Gallery”, click on the magnifier icon, and search: iubenda

Select “iubenda Privacy Controls and Cookie Solution” and click “Add to workspace” to add it to your GTM installation.

Import the template

Before setting up the template, you need to import it. Here’s how:

  1. Download the template from here
  2. On your GTM dashboard, click on Templates
  3. Under Tag Templates, click on “New.”
  4. Click on the three dots icon at the top right of the page and select Import.
  5. Unzip the file you downloaded and select the template.tpl file from the folder
  6. Click on Save at the top right of the page and close the template editor

Add the tag

Once back in the dashboard, click on Add a new tag.

Then, click on the Tag configuration area, scroll down to the Custom section, and click on iubenda Privacy Controls and Cookie Solution to add it to your GTM installation.

Tag Configuration

Once you have added the template, you will get to the Tag configuration page.

Here you will have to:

1. Set the default consent options

The defaults are all set to Denied to ensure the best privacy protection for your users. 

We suggest being extremely careful in modifying such parameters to ensure they align with best practices for obtaining user consent through positive action.
For more information about Consent types, you can check the Google official documentation here.

Optional parameters

  • URL passthrough is an optional parameter, useful to improve the quality of your measurements when ad_storage is denied (Targeting & Advertising purpose). It can be used to send event and session-based analytics (including conversions) without cookies across pages. 
  • Ads data redaction is a parameter that allows redacting Ad click identifiers sent in network requests by associated Google Ads and Floodlight when ad_storage is denied .

You can see the official Google Tags documentation for further information about these parameters.

2. Privacy Controls and Cookie Solution embedding

There are now two main auto-embedding options for integrating the Privacy Controls and Cookie Solution in Google Tag Manager (GTM):

  1. Option 1: Unified Snippet (With remote configuration active)🎖 Recommended option
  2. Option 2: Extended Snippet (Used when remote configuration is not active)

Additionally, manual embedding is still available as an alternative.

Auto embedding

Option 1: Unified Snippet (With Remote Configuration)

When remote configuration is enabled, the method uses the unified snippet. This option allows you to manage the Privacy Controls and Cookie Solution settings remotely, this means, updates and changes made in the Privacy Controls and Cookie solution will automatically apply to your website without needing to re-embed the snippet and republish in GTM.

  • How it works:
    • When remote configuration is enabled, the unified snippet is used. This short snippet points to a URL hosted remotely by iubenda.
    • The advantage of this method is that any updates made in your iubenda Dashboard (e.g. changes to the banner design, TCF tile, or support for US laws) will automatically reflect on your website without needing to update the GTM configuration or republish the container.
  • Steps to embed using the unified snippet (with remote configuration):
  1. In the Privacy Controls and Cookie Solution settings, you should have enable remote configuration.
  2. Copy the unified snippet URL from your iubenda Dashboard. It will look something like this:
  3. In your GTM dashboard, choose the option “Unified snippet via GTM template,” then paste the URL embeds.iubenda.com/widgets/[sitecode].js into the GTM template Embedding URL box. Make sure to add https:// at the beginning to include the full URL.

⚠ Important

As you may notice, the code to paste for the unified snippet is slightly different from the code included on your iubenda embedding page.

Here’s an example of the parts not to paste into the configuration box (strikethrough):

‹script type="text/javascript"
src="//embeds.iubenda.com/widgets/[site-code].js"></script>
  1. Save the changes in GTM and publish the container.
  2. Once this is set up, any changes made to your configuration (like adjusting the banner appearance, enabling TCF, or updating US laws) will automatically apply to your website, with no need to re-embed or republish the tag in GTM.

Option 2: Extended Snippet (Used when remote configuration is not active)

This method uses the extended snippet and is used when remote configuration is not enabled. Updates to the Privacy Controls and Cookie Solution will require manual updates in GTM whenever changes are made to the Privacy Controls and Cookie Solution configuration.

  • How it works:
    • When remote configuration is not enabled, the extended snippet is used, and a portion of it with the parameters should be inserted into the GTM template. This means, any changes made to your Privacy Controls and Cookie Solution settings will require you to manually update the snippet in GTM and republish the container to apply those changes, as updates are not applied automatically.
  • Steps to embed using the extended snippet (no remote configuration):
  1. Copy the embedding code (extended snippet) from your iubenda Dashboard.
  2. In your GTM dashboard, choose the option “Extended snippet via GTM template”, then paste only the part after var _iub = _iub || []; and within the _iub.csConfiguration = {...} into the GTM CS configuration box.

⚠ Important

As you may notice, the code to paste for the extended snippet is slightly different from the code included on your iubenda embedding page.

Here’s an example of the parts not to paste into the configuration box (strikethrough):

<script type="text/javascript">
var _iub = _iub || [];
_iub.csConfiguration =

{
"ccpaAcknowledgeOnDisplay": true,
"ccpaAcknowledgeOnLoad": true,
"ccpaAppliesToEntireUSA": true,
"consentOnContinuedBrowsing": false,
"countryDetection": true,
"enableCcpa": true,
"gdprAppliesGlobally": false,
"lang": "it",
"perPurposeConsent": true,
"siteId": 2398592,
"whitelabel": false,
"cookiePolicyId": 55062451,
"banner": {
"acceptButtonDisplay": true,
"backgroundColor": "#FF0000",
"closeButtonDisplay": false,
"customizeButtonDisplay": true,
"logo": null,
"position": "float-top-center",
"rejectButtonDisplay": true
}
}
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/ccpa/stub.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
  1. Save the changes and publish the GTM container.
  2. Whenever you make changes to the configuration, you will need to copy the updated extended snippet and re-paste the corresponding portion in GTM, followed by re-publishing the container.

You can also embed the Privacy Controls and Cookie Solution code manually. To do that, you have to follow the standard embedding method described in this guide.

❗ To make sure this method works correctly, remember to add the parameter: "googleConsentMode": "template" to your Privacy Controls and Cookie Solution configuration. Follow these steps to add it properly:

In your Privacy Controls and Cookie Solution settings, make sure to uncheck the “Enable remote configuration” option. This is essential for manual embedding to work properly.

After disabling remote configuration, copy the updated snippet and add the following parameter:

"googleConsentMode": "template"

Your updated snippet with the added parameter should look like this example:

<script type="text/javascript">
 var _iub = _iub || [];
 _iub.csConfiguration = {
 "countryDetection": true,
 "consentOnContinuedBrowsing": false,
 "perPurposeConsent": true,
 "lang": "en",
 "siteId": 11111111, //use your siteId
 "cookiePolicyId": 11111111, //use your cookiePolicyId
 "floatingPreferencesButtonDisplay": "bottom-right",
 "banner": {
 "acceptButtonDisplay": true,
 "customizeButtonDisplay": true,
 "rejectButtonDisplay": true,
 "position": "float-top-center"
 "googleConsentMode": "template"
 }
 };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Finally, you can choose the Privacy Controls and Cookie Solution channel (Beta, Current, Stable).

Use collected preferences to set default consents

You can optionally enable a feature that sets default consent values by reading stored user preferences from cookies or localStorage.

This feature is experimental and has some limitations. Use it only if you fully understand how it works to avoid improper consent handling.

consent default from storage

How does this feature work?

When this option is enabled, the tag checks for specific storage items to determine whether to automatically grant consent. Consent is set to “granted” only if all the defined items confirm the user has opted in (or hasn’t opted out) for that purpose.

To configure this:

  1. Enable Default consent from storage (experimental).
  2. Choose the Storage type: Cookie or Local Storage.
  3. Choose the ID type and enter the ID value:
    • Site ID (preferred)
    • Cookie Policy ID (use only if you have a single Cookie Policy configured)

Important notes

  • Works only with a single Cookie Policy ID or if storage.useSiteId = true.
  • As GTM does not support country detection, the safest assumption is applied: consent is granted only if all relevant storage items indicate an opt-in or no opt-out.

Remember, this is an experimental feature intended to improve consent handling before the iubenda banner is shown. Use it carefully due to its experimental nature and current limitations.

Advanced Settings

In this section, some advanced settings can be set up, such as the Tag firing priority, Tag Sequencing, and advanced Consent settings. Please note that there’s no need to edit these settings for the template to work, so if you’re unfamiliar with them, you can ignore them. 

3. Triggering

After configuring the tag, you need to set up the trigger to make the tag fire. 
You can select “Consent Initialization – All Pages” as the trigger.

triggering

Publish the Container

After completing the configuration, click the Save button at the top right of the page. The tag is now ready to be published.

From the GTM dashboard, click on Submit at the top right of the page:

Finally, add a version name and description, click on Publish, and that’s it! The tag is up and running, seamlessly integrated with our Privacy Controls and Cookie Solution!

How to control cookies

Built-in consent checks

Tags like Google Ads, Analytics, Floodlight, and Conversion Linker have built-in consent checks. They are natively compatible with Google Consent Mode.

This implies that these tags possess a mechanism that alters their functionality in response to the user’s consent status.

Please note that no consent configuration is needed for this type of tags.

You can simply assign “All pages” trigger to tags that have built-in consent checks like Google Ads, Google Analytics, Floodlight or Conversion Linker

Example:

gtm tags

Additional consent checks

Some tags — like Google Ads, Google Analytics, Floodlight, and Conversion Linker — are natively compatible with Google Consent Mode. These tags include built-in consent checks, meaning they automatically adapt their behavior based on the user’s consent status.

➡ For these tags, no extra configuration is required: you can safely use the “All pages” trigger.

However, tags that do not support built-in consent checks (for example, Custom HTML tags embedding Facebook Pixel, Hotjar, LinkedIn Insight, or other third-party scripts) must be configured with additional consent checks.

Step 1: Enable emitGtmEvents

To make additional consent checks possible, you need the event iubenda_gtm_consent_event to be sent whenever user preferences change.

You now have two options:

  • Recommended: enable the emitGtmEvents toggle directly in the iubenda GTM template. This automatically handles event emission with no need to edit code.
  • Alternative (manual method): add "emitGtmEvents": true inside your _iub.csConfiguration snippet. This is only needed if you prefer not to use the template option.

Step 2: Create your Custom HTML tag

  1. In GTM, add a new Custom HTML tag.
  2. Paste the script you want to use (e.g. Hotjar, Facebook Pixel, LinkedIn Insight Tag).

Example (Hotjar script as placeholder):

gtm html custom

Step 3: Configure consent requirements

Go to Consent Settings in your Custom HTML tag and select:
“Require additional consent for tag to fire”

Then, choose the relevant purpose based on the type of script. For example:

Purpose Google Consent Type(s) Description
Functionality functionality_storage Supports the website or app’s functionality, for example, by saving language settings.
security_storage Protects users by enabling security features like authentication and fraud prevention.
Experience personalization_storage Enhances user experience by personalizing features, like video recommendations.
Measurement analytics_storage Collects data (such as cookies) for analytics purposes, e.g. tracking visit duration.
Marketing ad_storage Stores data for advertising purposes.
ad_user_data Allows sending user data related to advertising to Google.
ad_personalization Enables personalized advertising by adjusting ads based on user preferences.
gtm additional consent

Step 4: Assign the trigger

Instead of using “All pages,” create a Custom Event trigger with the following settings:

Event name:

iubenda_gtm_consent_event
gtm trigger configuration

This ensures that the Custom HTML tag fires only after the user has given valid consent for the selected purpose(s).

Note: when the user preferences change, the Privacy Controls and Cookie Solution sends the event iubenda_gtm_consent_event to GTM

Prior-blocking is set for the tag!

✅ With these steps, you can safely integrate third-party tracking tools that don’t natively support Google Consent Mode.

💡 Keep in mind, the new template-level emitGtmEvents option streamlines this process by removing the need to edit your configuration code manually.

For US users, things to know: how to honor opt-out

The explanation for built-in and additional consent checks is also valid in this case. If you enable US Law in the ‘Privacy Controls and Cookie Solution’ configurator, the default behavior for a US user is that the Cookie Solution sets all the GCM (Google Consent Mode) purposes to ‘granted‘.

Note: If you are on a “Free” Plan, this is true if you disable GDPR and apply only US Law in the configurator. Alternatively, if you want to apply GDPR for EU Users and US Law for US users, you’ll need at least an “Advanced” plan.

When the user opts out of a specific purpose under US Law, we adjust the settings for ‘ad_storage‘ and ‘analytics_storage‘ accordingly.

Specifically:

ad_storage‘ is granted when the user either hasn’t opted out of any of the following USPR (US Privacy Rights) purposes or when they are not relevant (e.g., USPR does not apply):

  • Sale of my personal information (purpose s)
  • Sharing of my personal information (purpose sh)
  • Processing of personal information for targeted advertising (purpose adv)

analytics_storage‘ is set to granted when the user either hasn’t opted out of the US purpose ‘Sale of my personal information’ (purpose s) or when it’s not relevant (e.g., USPR does not apply).

Unlock additional features with just one click 👉 Upgrade to the Advanced Plan now!

Apply US Law exclusively for US users, and unlock the full range of iubenda’s features

Unlock now →

How to Set Up iubenda’s GTM Template for Multilingual Sites

If you manage a multilingual website and are implementing Google Consent Mode with the iubenda GTM template, it’s essential to ensure that your cookie consent banner adapts seamlessly to different languages. Here’s how you can configure the iubenda GTM template for multilingual sites:

CS Configuration Textarea

In the first textarea related to CS Configuration, insert the JSON of the main script, which will also be used as a fallback. However, it is important to remove the “lang” parameter from this script. This script can contain the siteID and cookiePolicyId parameters.

CS Language Configuration Textarea

In the CS Language Configuration textarea, insert the initial language code and, if possible, only the cookiePolicyId that identifies the language in the configuration. Do not include the “lang” parameter in this configuration.

Visual Example

Below is an example of how the setup looks in the GTM interface:

gtm multilingual lang parameter

Code Example to Copy

For CS Configuration, use this example code:

{
  "askConsentAtCookiePolicyUpdate": true,
  "floatingPreferencesButtonDisplay": "bottom-right",
  "perPurposeConsent": true,
  "siteId": "your-site-id", // <-- Replace with your actual site ID
  "whitelabel": false,
  "cookiePolicyId": "your-cookie-policy-id", // <-- Replace with your actual cookie policy ID
  "emitGtmEvents": true,
  "banner": {
    "acceptButtonDisplay": true,
    "closeButtonRejects": true,
    "customizeButtonDisplay": true,
    "explicitWithdrawal": true,
    "listPurposes": true,
    "position": "float-top-center",
    "showTitle": false
  }
}

For CS Language Configuration, use this example code:

{
  "it": {
    "cookiePolicyId": "your-cookie-policy-id", // <-- Replace with your actual IT cookie policy ID,
    "emitGtmEvents": true
  },
  "es": {
    "cookiePolicyId": "your-cookie-policy-id", // <-- Replace with your actual ES cookie policy ID,
    "emitGtmEvents": true
  }
}

Note: You can copy and paste these examples into the respective textareas. Be sure to replace "your-site-id" and "your-cookie-policy-id" with your specific values, ensuring the lang parameter is removed.

How it Works:

  • The Privacy Controls and Cookie Solution detects the correct language from the HTML code of the page (lang attribute in the <html> tag).
  • If the attribute is not available, it uses the main language set in the user’s browser.
  • If both are unavailable, the default language is English.

See Also

Feature Advanced Implementation Basic Implementation
Tag Behavior Google tags are loaded before the consent dialog appears, sending cookieless pings when cookie consent is declined. Google tags are blocked until consent is explicitly granted.
Behavioral Modeling in GA4 ✅ Enabled ❌ Not Available
Conversion Modeling in GA4 ✅ Enabled ✅ Enabled, but limited*
Conversion Modeling in Ads ✅ Enabled ✅ Enabled, but limited*
* When tags are blocked due to consent choices, no data is collected, and conversion modeling in Ads relies on a general model. This model uses non-identifying variables such as browser type, key event action type, and time of day.

👉 Your choice between Basic and Advanced Consent Mode should be informed by your specific needs, compliance requirements, and the level of data insight required for your advertising strategies. Consider that our integration supports both modes, allowing you to select the one that best suits your strategy and legal obligations.

Don’t confuse Consent Mode with Additional Consent Mode, a feature that allows you to gather consent for Google ad partners that are not yet part of the Transparency and Consent Framework but are on Google’s Ad Tech Providers (ATP) list.

One way that Google Consent Mode can help website owners increase their advertising revenue is by providing better targeting and bidding optimization for Google Ads campaigns.

By using the consent signals provided by Google Consent Mode, website owners can ensure that their ads are only shown to users who have given their consent for their data to be used for advertising purposes. This means that website owners can deliver more relevant ads to users who are interested in their products or services, leading to higher engagement rates and better ROI for advertisers.

For example, let’s say a website owner runs a Google Ads campaign promoting a new line of athletic shoes. With Google Consent Mode, the website owner can ensure that the ads are only shown to users who have given their consent for their data to be used for advertising purposes.

This means that the ads will only be shown to users who are interested in athletic shoes and are more likely to engage with the ad.

Yes, iubenda is among the Partner CMPs of Google. Our CMP is integrated with Google Consent Mode v2 and Google Tag Manager, allowing seamless implementation and helping to address technical challenges and comply with Google’s latest requirements.

iubenda’s Privacy Controls and Cookie Solution is designed to manage the consent to cookies on a website or app and allows you to adjust how your Google tags behave based on the consent status of your users, particularly in relation to advertising and analytics cookies.

🔎

Here are your options to verify Google Consent Mode status: ⬇

1. Use iubenda to Scan Your Site [Recommended]

iubenda makes checking easy:

  1. Go to the iubenda site scan page
  2. Type in your website’s URL for the scan
  3. Enter your email address to get the results
  4. Check your inbox to find out if your site is using Google Consent Mode

2. Check Manually

To manually check if Google Consent Mode is working on your site, follow these steps:

  1. Open your website in Incognito or Private Browsing mode to ensure a clear cache
  2. Use your developer console and type in dataLayer and open the relative object
  3. Search for the very first consent event. The analytics_storage parameter should have a value equal to denied
  4. Accept all cookies on your cookie banner (or at least the categories related to the Google services).
  5. Find the consent event that changed in the dataLayer; analytics_storage should have a value equal to granted.
  6. If everything matches up, Google Consent Mode is up and running on your site!

3. Via Google Tag Manager (GTM)

To verify your consent mode implementation:

  1. Start
    Tag Assistant
    and enter your site’s URL. If Tag Assistant can’t connect, your Tag Manager might be blocked
  2. Open the cookie banner on your site and accept all cookies. If your container was blocked, Tag Assistant should connect now
  3. Check Consent Settings
    • Go to the Summary in Tag Assistant and click the first Consent event
    • In the  API Call section, make sure ad_storage, ad_personalization, ad_user_data, analytics_storage are correctly set
    • Alternatively, in your tag’s Output section, click the Consent tab and check the On-page Default column
  4. Check for Consent Updates:
    • Go to the Summary and click the latest Consent event
    • Make sure the consent parameters updated correctly, either in the API Call section or in the On-page Update column under the Consent tab
  5. Test Tags:
    • Look under the Tags tab to see if tags behave according to the consent settings

🔔 Google Consent Mode activation is available for all users— this includes both free and legacy plans! No need to change your plan or upgrade to get started with Consent Mode. You can implement it seamlessly using iubenda’s Privacy Controls and Cookie Solution, with no additional steps or cost involved.

Google’s Consent Mode marks a significant step forward in simplifying the management of cookies for ads and analytics. This latest version removes the need for code adjustments, providing an even more user-friendly approach to ensure compliance and optimize user experience.

To effectively implement Google Consent Mode with iubenda, efficiently manage cookies and obtain user consent for ads and analytics, you have these options:

⚠ Important: Remember to update your privacy policy!

Since you’re using Google services, don’t forget to add the required clauses and disclosures in your privacy policy, such as Google Analytics 4 and Google Ads conversion tracking. You can find them in our Generator.

1. Autoblocking [Preferred Method]

The preferred method for implementing Google’s Consent Mode is to use the auto-blocking feature (enabled by default), which allows you to automatically trigger and manage Google’s Consent Mode on scripts related to Google services without requiring any additional action.

This method allows the auto-blocking feature to set the default consent states, while the Privacy Controls and Cookie Solution works with the Consent Mode to enable or disable Google services based on user consent.

❗Please note that for new installations of the Privacy Controls and Cookie Solution, auto-blocking is enabled by default with the stricter approach (Basic implementation of “Google Consent Mode”). With this method, Google services are blocked completely until the user provides consent. This ensures that no data processing occurs without explicit user permission. Once consent is granted, Google services are unblocked and data processing activities commence.

This means that the checkbox ‘Do not block Google’s services that adhere to Consent Mode‘ and ‘Do not block vendors that adhere to the TCF when the TCF is enabled‘ are NOT checked by default.

If instead, you want to use the Advanced implementation of “Google Consent Mode”, and allow Google services to dynamically adapt based on changes in consent set by the user, simply follow these steps:

⚠ Note that this method offers flexibility, but requires careful consideration to ensure privacy compliance.

Once the site/project is selected in the “Dashboard”, you can configure or edit automatic blocking by clicking on the settings icon located in the site info panel:

icon dashboard

On the site info section “Block scripts prior to consent” under “Automatic blocking” you can find these two checkboxes:

✅ Do not block Google’s services that adhere to Consent Mode: When this option is enabled, our Privacy Controls and Cookie Solution will automatically activate advanced implementation of Google’s Consent Mode. This method allows Google services to adapt dynamically based on changes in consent set by the user.
For example, if a user initially denies consent for certain data processing activities, Google services will respect this choice and adjust their behavior accordingly. Even if consent is denied, certain user data, such as IP addresses, may still be processed by Google services.

✅ Do not block vendors that adhere to the TCF when the TCF is enabled: When this feature is enabled, ad delivery is driven by the TCF consent string, reflecting the user’s preferences. We recommend that you check with your associated vendors to find the best strategy that balances optimal performance with compliance.

block scripts prior to consent

2. For Users with Existing Configurations [Legacy Users]:

Users who already have our solutions integrated (known as ‘legacy users’) need only a simple code update.

Copy and paste the new iubenda code to replace the existing code on your site.

To do this, once the site/project is selected in the “Dashboard”, click Embed:

embed code

Copy and place this new script in the <head> section of your website’s HTML, as the first element, to ensure the consent management functions load before any other scripts, and you’re done!

copy paste code

This way, our Privacy Controls and Cookie Solution will automatically set the default consent state for Google services, allowing you to manage them directly through ‘Consent Mode’ without any further action.

3. Via Google Tag Manager

Google Tag Manager (GTM) allows you to use already-configured templates for your GTM installation to simplify tag configuration. The iubenda Privacy Controls and Cookie Solution template is now listed in the Featured Community CMP Templates.

By using the Google Tag Manager Template, you can manage Google Consent Mode (GCM) automatically for tags that are natively compatible with Google Consent Mode, such as Google Analytics, Google Ads, Floodlight, and Conversion Linker. Currently, the template allows you to manage prior consent for custom HTML tags using the ‘additional consent checks’ feature in a few simple steps.

💡 For more information on integrating Google Consent Mode with the iubenda Privacy Controls and Cookie Solution, see our guide here.

Troubleshooting Google Consent Mode Misconfigurations

If your Site Scanner shows an “Attention Required” alert, or you encounter issues with Google Consent Mode, a misconfiguration likely needs fixing. Here are some common reasons why:

1. Outdated Snippet or Missing DataLayer

Problem:
Your website is using an old version of the iubenda snippet. This outdated snippet doesn’t support important features like autoblocking or managing user consent with Google Consent Mode. Your website might also be missing the required dataLayer configuration. (The dataLayer sends user consent choices to Google, and without it, your tags may not work correctly.)

💡 How to fix it:
Re-embed the updated code snippet on your site to ensure proper functionality.

2. Incorrect Script Placement

Problem:
The iubenda snippet might be placed incorrectly, such as after Google’s script, causing Google Consent Mode to not function as expected.

💡 How to fix it:
Ensure the Iubenda snippet is positioned correctly in the code—ideally, for example, before any Google-related scripts.

Correct placement:

<!-- iubenda snippet placed before Google script -->
<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>

<!-- Google script -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXX-X"></script>

This ensures that the iubenda Consent Mode activates first and properly manages user consent before other scripts load.

For US users, things to know: how to honor opt-out

If you enable US Law in the ‘Privacy Controls and Cookie Solution’ configurator, the default behavior for a US user is that the Cookie Solution sets all the GCM (Google Consent Mode) purposes to ‘granted‘.

Note: If you are on a “Free” plan, this is true if you disable GDPR and apply only US Law in the configurator. Alternatively, if you want to apply GDPR for EU Users and US Law for US users, you’ll need at least an “Advanced” plan.

When the user opts out of a specific purpose under US Law, we adjust the settings for ‘ad_storage‘ and ‘analytics_storage‘ accordingly.

Specifically:

ad_storage‘ is granted when the user either hasn’t opted out of any of the following USPR (US Privacy Rights) purposes or when they are not relevant (e.g., USPR does not apply):

    • Sale of my personal information (purpose s)
    • Sharing of my personal information (purpose sh)
    • Processing of personal information for targeted advertising (purpose adv)

analytics_storage‘ is set to granted when the user either hasn’t opted out of the US purpose ‘Sale of my personal information’ (purpose s) or when it’s not relevant (e.g., USPR does not apply).

Unlock additional features with just one click 👉 Upgrade to the Advanced Plan now!

Apply US Law exclusively for US users, and unlock the full range of iubenda’s features

Unlock now →

See also

The post Google Consent Mode: How to Manage Cookies for Ads and Analytics appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to embed the Privacy Controls and Cookie Solution on a Ucraft site https://www.iubenda.com/en/help/26363-cookie-solution-ucraft/ Thu, 23 Jul 2020 15:37:35 +0000 https://help.iubenda.com/?p=26363 Created your Ucraft website and need to manage cookies? We’ll show you how! In this guide, you’ll learn if and when you need a cookie consent management system (CMS) for Ucraft and how to add iubenda’s Privacy Controls and Cookie Solution to your Ucraft site. ➜ Jump directly to How to add iubenda’s Privacy Controls and […]

The post How to embed the Privacy Controls and Cookie Solution on a Ucraft site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Created your Ucraft website and need to manage cookies? We’ll show you how! In this guide, you’ll learn if and when you need a cookie consent management system (CMS) for Ucraft and how to add iubenda’s Privacy Controls and Cookie Solution to your Ucraft site.

➜ Jump directly to How to add iubenda’s Privacy Controls and Cookie Solution to your Ucraft site.

Yes, you do, and here’s why!

If you have EU-based users, and your website uses cookies (which it most likely does!) you need to manage cookie consents according to the ePrivacy and GDPR. This means that you’ll need to block cookie scripts and similar technologies until the user gives consent. 

Also, for the consent to be considered valid, you’ll need to make certain disclosures via a cookie banner and link to a more detailed cookie policy. More details here.

💡 Need to add a Privacy policy to your Ucraft site? See the Ucraft privacy policy integration guide. 

How to add iubenda’s Privacy Controls and Cookie Solution to Ucraft

💡Not sure what privacy documents you need for your Ucraft site? Do this quick quiz to see which laws apply to you and your business. 

Once you’ve generated and customized your Privacy Controls and Cookie Solution you can follow these steps to integrate it with your Ucraft website:

To install the Privacy Controls and Cookie Solution you’ll need to modify the HEAD of your site, a Ucraft premium feature available only on their paid plans. More info here.

To get started first head over to your iubenda dashboard click on [Your website] > Privacy Controls and Cookie Solution > Embed.

How to add the Privacy Controls and Cookie Solution to Ucraft

Here you can customize and then click on copy to copy your Privacy Controls and Cookie Solution.

How to add the Privacy Controls and Cookie Solution to Ucraft

Next, go to your Ucraft dashboard and select your Site settings.

How to add the Privacy Controls and Cookie Solution to Ucraft

Then, click on the Code Injection tab and scroll down until you find the Before </head> tag text box.

How to add the Privacy Controls and Cookie Solution to Ucraft

After that, paste your Privacy Controls and Cookie Solution code in the Before </head> tag section, (as shown above) click on Save and you’re done!

Please note: the code will go live once you’ve connected a Custom Domain to your Ucraft website.

Few categories of cookies are exempt from the consent requirement. Therefore, you’ll need to block scripts from running until you get valid user consent.

💡 Simplify your cookie-blocking process with auto-blocking!

Did you know that there’s a simpler option available for the prior blocking of cookies and trackers? Our auto-blocking feature automates the process, saving you time and effort.

If you prefer to manually tag your scripts that install or may install cookies, you can still follow the process below for step-by-step instructions and practical examples. However, we highly recommend considering the auto-blocking feature for a more streamlined approach.

👉 Click here to learn more about auto-blocking and how it can simplify your cookie-blocking process

How to implement prior blocking via manual tagging on your Ucraft site

Manual tagging is the method of prior-block we’ll be using for the tutorial below. You can view other methods here.

To set up prior blocking, you’ll need to make some minor changes to your site’s scripts. But it’s simple; just do the following:

  1. Identify the script/iframe for any additional services that are running on your website (e.g., Twitter follow button)
  2. Add some simple text to the HTML code (we’ll show you how below!)
  3. Save!

In this tutorial, we are going to block a Twitter follow button.

💡 Not sure which services you need to block? If you’re using a Cookie Policy generated by iubenda, the services listed in your Cookie Policy are most likely the ones you need to modify now.

In your Ucraft site editor,, find the script you need to modify (simply search for the service you want to block, in this case, it is the Twitter follow button)

Then click on the EDIT CUSTOM HTML icon to open the code editor.

Now, we’re going to change the script. To do this, we will make 3 simple changes:
  • add this class: _iub_cs_activate to the script tags, and change the “type” attribute from text/javascripttext/plain
  • replace the src with data-suppressedsrc or suppressedsrc
  • specify the categories of the scripts/iframes with a special comma-separated data-iub-purposes attribute, e.g. data-iub-purposes="2" or data-iub-purposes="2, 3"

More about categories and purposes

Purposes are your legal reasons for processing the particular type of user data. Different scripts on your site will fall into different categories and serve different purposes. For example, Google Analytics may be used for measurement, while the Pinterest button may be used for Experience (Purpose 3 below). Purposes are grouped into 5 categories each with an id (1, 2, 3, 4, and 5):

  • Necessary (id: 1)
  • Functionality (id: 2)
  • Experience (id: 3)
  • Measurement (id: 4)
  • Marketing (id: 5)

For even more detailed info on categories and purposes, see our guide here.

Let’s take the Twitter follow button as an example:

We need to 1. Add the class and change the “type” attribute, 2. replace the src and 3. specify the categories.

And the code structure should be like this:

Prior blocking checkbox - Flow page
<p>Twitter follow button:</p>

        <!-- please note type="text/plain" class="_iub_cs_activate" data-suppressedsrc="..." (manual tagging) and data-iub-purposes="3" (per-category consent) -->
<a href="https://twitter.com/iubenda" class="twitter-follow-button" data-show-count="false">Follow @iubenda</a>
  <script async type="text/plain" class="_iub_cs_activate" data-suppressedsrc="https://platform.twitter.com/widgets.js" data-iub-purposes="3" charset="utf-8"></script>
Now that you’ve made your changes, simply hit save, and you’re done.

Not sure if you’ve set up correctly? Check out the live example and FAQs below

Live example

This is an example that shows everything we have described above, you can use this code pen as a guide to see what happens before and after blocking scripts via manual tagging.

(see the example)

To demonstrate the cookie blocking feature, we’ve embedded a YouTube video, and a Twitter follow button:
Follow @iubenda

Both scripts are blocked through manual tagging. Since both the YouTube video widget and the Twitter follow button are part of the Experience purpose (id 3) we’ve added data-iub-purposes="3" to their scripts so that the Privacy Controls and Cookie Solution can properly identify them for release.

Click on the Accept button – or just activate the “Experience” toggle – to release these scripts (refresh the page to return to the starting point).

How can I tell if I’ve set prior blocking up properly?

As you can see in the code pen example, the Youtube and Twitter scripts do not load if you do not consent. (You can test this function again by opening this link (https://codepen.io/iubenda/pen/KKKxmVO/?editors=1000) in incognito mode in your browser)

After you have saved, open your site in an incognito mode and check if the scripts you have blocked via manual tagging stay blocked until you consent.

Please refer to this dedicated article if you’d like to know how to block cookies before consent using other options available. ➔ Take a look at Google Consent Mode as an alternative to prior blocking, Google Tag Manager to Simplify the Blocking of Cookies, or the IAB Transparency & Consent Framework and how to enable it.

See also

The post How to embed the Privacy Controls and Cookie Solution on a Ucraft site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Integrate iubenda’s Privacy Policy on a Website Made with Ucraft https://www.iubenda.com/en/help/26324-privacy-policy-ucraft-2/ Thu, 23 Jul 2020 13:38:02 +0000 https://help.iubenda.com/?p=26324 Once you’ve generated your privacy policy with iubenda, you have three ways to integrate it on your Ucraft website. You can either: 1. Widget You’ll need a Ucraft paid plan to include HTML code into your footer. Now: What does this look like? Here is a working example. Click on the button to open the […]

The post How to Integrate iubenda’s Privacy Policy on a Website Made with Ucraft appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Once you’ve generated your privacy policy with iubenda, you have three ways to integrate it on your Ucraft website. You can either:

  1. take advantage of iubenda’s free version by using our widget;
  2. add a direct link to your Ucraft site that will then lead your users to your iubenda-hosted privacy policy; or
  3. directly embed the privacy policy text into your Ucraft privacy policy page.

1. Widget

You’ll need a Ucraft paid plan to include HTML code into your footer.

  • Access your iubenda dashboard
  • Click on [Your website] > Privacy and Cookie Policy > Embed
  • Copy the code under the Add a widget to the footer tab
iubenda privacy policy - Add a widget to the footer

Now:

  • Go to your Ucraft project
  • Add an Custom HTML element to your footer (more info on this Ucraft support article)
    Ucraft - Custom HTML element
  • Paste your iubenda snippet and click Embed code (please note that the embedded code will become available once you have connected a domain to your website)

What does this look like?

Here is a working example. Click on the button to open the policy:

Privacy Policy

Notice for our Legacy Users: This method requires a iubenda Pro/Ultra License, but it works also with the Ucraft free plan.

  • Access your iubenda dashboard
  • Click on [Your website] > Privacy and Cookie Policy > Embed
  • Copy the privacy policy URL you find under the Use a direct link tab
iubenda privacy policy - Use a direct link

Now:

  • Go to your Ucraft project
  • Add a Paragraph to your footer or edit an existing one (if you need help with Ucraft blocks, take a look at the this guide)
  • Insert the text “Privacy Policy” and highlight it
  • Click on the Insert/edit link button
  • Paste the privacy policy URL in the link settings URL field
Privacy Policy link on a website made with Ucraft

And you’re done.

3. Direct text embedding

Notice for our Legacy Users: This method requires a iubenda Pro/Ultra License and a Ucraft paid plan.

The direct text embedding option makes your privacy policy look as if it were natively a part of your own site:

  • Access your iubenda dashboard
  • Click on [Your website] > Privacy and Cookie Policy > Embed
  • Copy the code under the Embed the text in the body tab
iubenda privacy policy - Embed the text in the body

Now:

  • Go to your Ucraft project
  • Add a new page and name it “Privacy Policy” (or empty an existing one of all its contents)
  • Add a Custom HTML element to your Privacy Policy page (check the Ucraft support for more info about custom code embedding)
    Ucraft - Custom HTML element
  • Paste your iubenda snippet and click Embed code (please note that the embedded code will become available once you have connected a domain to your website)
    Privacy Policy on a Ucraft website - Embed HTML code

And you’re done.

Create a privacy policy for your site made with Ucraft

Start generating

See also

The post How to Integrate iubenda’s Privacy Policy on a Website Made with Ucraft appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Display the Cookie Lifetime in Your Cookie Policy https://www.iubenda.com/en/help/25434-cookie-lifetime/ Wed, 24 Jun 2020 15:35:28 +0000 https://help.iubenda.com/?p=25434 Following the European Court of Justice’s ruling on the Planet49 case, it’s very likely that the various EU Data Protection Authorities will soon match the Court’s decision. This likely means requiring website and app owners that use cookies and trackers, to display cookie lifetime details in their cookie policy. To comply with this recommendation, you’ll […]

The post How to Display the Cookie Lifetime in Your Cookie Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Following the European Court of Justice’s ruling on the Planet49 case, it’s very likely that the various EU Data Protection Authorities will soon match the Court’s decision. This likely means requiring website and app owners that use cookies and trackers, to display cookie lifetime details in their cookie policy.

To comply with this recommendation, you’ll need to specify how long the cookies you use – directly or through third parties – are active before they expire (cookies generally last for a determined amount of time).

In both the case of first-party or third-party cookies, iubenda can help.

Cookie database – automatic detection of cookies’ and trackers’ lifetime

With this feature, when you add/edit a service inside the generator, the lifetime for every cookie/tracker is automatically prefilled and added into your cookie policy.

As you can see, the default setting is “Auto”, and the storage duration of cookies and trackers will be sourced and kept updated from our central database.

If you select the “Custom” option, you can define a maximum storage duration across all cookies and trackers, or define a storage duration for each cookie or tracker:

If using the custom option, to find out how long third-party cookies last, you can:

  • use the browser console, or
  • check the cookie policies of the related services

Choosing the “Custom” option will exclude that service from the iubenda-sourced trackers. This means that only the data manually inserted will be shown in the cookie policy generated.

Accurately identifying each tracker and its duration can be challenging. Therefore, especially if you’re not very familiar with these topics, we highly recommend using the “Auto” option.

If the service added doesn’t require any customization (i.e. types of personal data collected, region, and so on) when you add the service, the generator will automatically use the “Auto” setting. If you want to customize the lifetime of cookies and trackers, you can click on the customize button within the corresponding service.

*Not all services install cookies/trackers. In those cases (where a tracker or cookie is not installed by the service) the cookie lifetime section will be empty.

Technical Cookies – Cookie Policy Settings

Lastly, once you’ve generated your privacy policy, you can activate your cookie policy by clicking on the Activate cookie policy button you’ll find under “Cookie policy” label in the right column of the Privacy and Cookie Policy Generator.

Next, indicate whether or not the cookies or trackers that you use are strictly necessary for the operation or delivery of your service (this includes technical cookies). You can do this by selecting the related option under “Cookie Policy settings”.

If you use first-party technical cookies, you can specify a generic maximum lifetime or for each cookie/tracker in hours, days, months, or years.
Furthermore, our solution will detect any cookie/tracker found by our site scanner that is not linked to a service in your privacy policy. These cookies will be shown inside the cookie policy settings, with the option to add them within your documents.

The result? Your iubenda cookie policy will show the cookie lifetime of the various cookies attached to the services in use by your site/app.

See also

The post How to Display the Cookie Lifetime in Your Cookie Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Cookie Banner for Wix Websites https://www.iubenda.com/en/help/24221-cookie-banner-wix-2/ Fri, 08 May 2020 14:26:53 +0000 https://help.iubenda.com/?p=24221 Cookies are small pieces of data stored on a site visitor’s browser. They are typically used to keep track of the settings users have selected and actions they have taken on a site. In accordance with the Cookie Law, if you operate in the EU (or could potentially have EU users) and you’re using cookies on […]

The post Cookie Banner for Wix Websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Cookies are small pieces of data stored on a site visitor’s browser. They are typically used to keep track of the settings users have selected and actions they have taken on a site.

In accordance with the Cookie Law, if you operate in the EU (or could potentially have EU users) and you’re using cookies on your site, you must:

  1. provide a cookie policy (this can be done by adding a section about your site’s cookies in your privacy policy – Learn more about creating a Privacy and Cookie Policy for Wix);
  2. display a cookie banner at the user’s first visit;
  3. block non-exempt cookies (e.g. via Google Analytics) before obtaining user consent;
  4. release cookies only after informed consent has been provided.

On the Cookies and Your Wix Site guide, Wix invites you to consider adding a third-party tool to notify your site visitors of cookies, since their Cookie Alert App only alerts your site visitors of cookies placed on their browsers, and it doesn’t address all Cookie Law requirements (like the prior blocking). 

How to add the iubenda cookie banner on your Wix website

Here’s where our Privacy Controls and Cookie Solution comes in very handy: it allows you to display a fully customizable cookie banner, collect cookie consent, implement prior blocking and more. It’s easy to run, fast and free up to 25k pageviews/month.

To install the Privacy Controls and Cookie Solution you’ll need to edit the HEAD of your site, a Wix premium feature available only on their paid plan.

  1. Generate your cookie banner: Cookie banner configurator
  2. Copy and paste the resulting code snippet within the HEAD tag of your pages as the first element (learn more about embedding custom code on Wix) and you’re done!
Cookie banner example

This above is an example of a cookie banner created with our Privacy Controls and Cookie Solution. Remember that cookie notices are just one part of the requirements: in order to be fully compliant, you must also link to an accurate cookie policy and block cookies prior to consent.

Few categories of cookies are exempt from the consent requirement. Therefore, you’ll need to block scripts from running until you get valid user consent.

💡 Simplify your cookie-blocking process with auto-blocking!

Did you know that there’s a simpler option available for the prior blocking of cookies and trackers? Our auto-blocking feature automates the process, saving you time and effort.

If you prefer to manually tag your scripts that install or may install cookies, you can still follow the process below for step-by-step instructions and practical examples. However, we highly recommend considering the auto-blocking feature for a more streamlined approach.

👉 Click here to learn more about auto-blocking and how it can simplify your cookie-blocking process

How to implement prior blocking via manual tagging on your Wix site

Manual tagging is the method of prior-block we’ll be using for the tutorial below. You can view other methods here.

To set up prior blocking, you’ll need to make some minor changes to your site’s scripts. But it’s simple; just do the following:

  1. Identify the script/iframe for any additional services that are running on your website (e.g., Twitter follow button)
  2. Add some simple text to the HTML code (we’ll show you how below!)
  3. Save!

In this tutorial, we are going to block a Twitter follow button.

💡 Not sure which services you need to block? If you’re using a Cookie Policy generated by iubenda, the services listed in your Cookie Policy are most likely the ones you need to modify now.

In your Wix dashboard, click on Edit Site

Prior blocking checkbox - Flow page

Then, open your Page Code tab to find the script you need to modify (simply search for the service you want to block, in this case, it is the Twitter follow button) and then click Edit Code to open the code editor.

Prior blocking checkbox - Flow page
Now, we’re going to change the script. To do this, we will make 3 simple changes:
  • add this class: _iub_cs_activate to the script tags, and change the “type” attribute from text/javascripttext/plain
  • replace the src with data-suppressedsrc or suppressedsrc
  • specify the categories of the scripts/iframes with a special comma-separated data-iub-purposes attribute, e.g. data-iub-purposes="2" or data-iub-purposes="2, 3"

More about categories and purposes

Purposes are your legal reasons for processing the particular type of user data. Different scripts on your site will fall into different categories and serve different purposes. For example, Google Analytics may be used for Measurement, while the Pinterest button may be used for Experience (Purpose 3 below). Purposes are grouped into 5 categories each with an id (1, 2, 3, 4, and 5):

  • Necessary (id: 1)
  • basic interactions & functionalities (id: 2)
  • Experience enhancement (id: 3)
  • Measurement (id: 4)
  • Marketing (id: 5)

For even more detailed info on categories and purposes, see our guide here.

Let’s take the Twitter follow button as an example:

We need to 1. Add the class and change the “type” attribute, 2. replace the src and 3. specify the categories.

And the code structure should be like this:

Prior blocking checkbox - Flow page
<p>Twitter follow button:</p>

        <!-- please note type="text/plain" class="_iub_cs_activate" data-suppressedsrc="..." (manual tagging) and data-iub-purposes="3" (per-category consent) -->
<a href="https://twitter.com/iubenda" class="twitter-follow-button" data-show-count="false">Follow @iubenda</a>
  <script async type="text/plain" class="_iub_cs_activate" data-suppressedsrc="https://platform.twitter.com/widgets.js" data-iub-purposes="3" charset="utf-8"></script>
Now that you’ve made your changes, simply hit save, and you’re done.

Not sure if you’ve set up correctly? Check out the live example and FAQs below

Live example

This is an example that shows everything we have described above, you can use this code pen as a guide to see what happens before and after blocking scripts via manual tagging.

(see the example)

To demonstrate the cookie blocking feature, we’ve embedded a YouTube video, and a Twitter follow button:
Follow @iubenda

Both scripts are blocked through manual tagging. Since both the YouTube video widget and the Twitter follow button are part of the Experience purpose (id 3) we’ve added data-iub-purposes="3" to their scripts so that the Privacy Controls and Cookie Solution can properly identify them for release.

Click on the Accept button – or just activate the “Experience” toggle – to release these scripts (refresh the page to return to the starting point).

How can I tell if I’ve set prior blocking up properly?

As you can see in the code pen example, the Youtube and Twitter scripts do not load if you do not consent. (You can test this function again by opening this link (https://codepen.io/iubenda/pen/KKKxmVO/?editors=1000) in incognito mode in your browser)

After you have saved, open your site in an incognito mode and check if the scripts you have blocked via manual tagging stay blocked until you consent.

Please refer to this dedicated article if you’d like to know how to block cookies before consent using other options available. ➔ Take a look at Google Consent Mode as an alternative to prior blocking, Google Tag Manager to Simplify the Blocking of Cookies, or the IAB Transparency & Consent Framework and how to enable it.

Manage cookie consent for your Wix website

Generate a cookie banner

See also

The post Cookie Banner for Wix Websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to invoke Cookie Solution API methods from an iframe https://www.iubenda.com/en/help/23633-how-to-invoke-cookie-solution-api-methods-from-an-iframe/ Fri, 17 Apr 2020 15:05:37 +0000 https://help.iubenda.com/?p=23633 If the Privacy Controls and Cookie Solution is embedded inside an iframe, all the _iub.cs.api methods can be called through postMessage. Here are some examples of how such calls can be made. postMessage format The API needs to receive a postMessage call in the following JSON format: Where: Examples Assuming that the target iframe is […]

The post How to invoke Cookie Solution API methods from an iframe appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If the Privacy Controls and Cookie Solution is embedded inside an iframe, all the _iub.cs.api methods can be called through postMessage. Here are some examples of how such calls can be made.

postMessage format

The API needs to receive a postMessage call in the following JSON format:

{ 
    __iubCsCall: { 
        command: <api-function-name>, 
        parameters: [...], 
        callId: <a-string-or-integer> 
   } 
}

Where:

  • command (string) is the name of the API function you want to call
  • parameters (array) is a list of parameters you’re sending to the API function
  • callId (string | int) is the Id used to verify that the returned output is for the same API call

Examples

Assuming that the target iframe is on https://example.com, we can send this API call:

ifr.postMessage(
    JSON.stringify({
        __iubCsCall: {
            command: 'isConsentGiven',
            parameters: [],
            callId: 1
        }
    }),
    'https://example.com'
);

This will call the Privacy Controls and Cookie Solution API function isConsentGiven() with no parameters. The output will be returned via postMessage as a JSON string.

In order for the message event to capture this output you’ll need a listener. Depending on the current Privacy Controls and Cookie Solution state, the listener will look like this:

{
    "__iubCsReturn": {
        "returnValue": false,
        "success": true,
        "callId": 1
    }
}

Example with parameters

Here’s how you can pass parameters to your postMessage call:

ifr.postMessage(
    JSON.stringify({
        __iubCsCall: {
            command: 'storeConsent',
            parameters: [{
                consent: false
            }],
            callId: 2
        }
    }),
    'http://localhost:3012'
);

This call to the storeConsent() function will set consent to false and store a consent cookie.

Refresh the page to see the effects of this call. After that, you can verify that the consent is set to false by evaluating _iub.cs.consent.consent in the console (it should output false).

The postMessage JSON output should look like this:

{
    "__iubCsReturn": {
        "success": true,
        "callId": 2
    }
}

Example of a malformed postMessage call

Here’s an output of a malformed postMessage call (e.g. an API function that doesn’t exist):

ifr.postMessage(
    JSON.stringify({
        __iubCsCall: {
            command: 'Consent',
            parameters: [{
                consent: false
            }],
            callId: 1
        }
    }),
    'http://localhost:3012'
);

Since there’s no API function called Consent in the Privacy Controls and Cookie Solution, as a result you should get an error like this:

{
    "__iubCsReturn": {
        "returnValue": null,
        "success": false,
        "callId": 1
    }
}

See also

The post How to invoke Cookie Solution API methods from an iframe appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
TCF 2.0 Transition Guide https://www.iubenda.com/en/help/23271-tcf-2-0-transition-guide/ Tue, 14 Apr 2020 12:56:15 +0000 https://help.iubenda.com/?p=23271   🚨 Important Update: TCF 2.2 has been successfully rolled out, with the implementation deadline having passed on November 20, 2023. It is crucial for Consent Management Platforms (CMPs) and Vendors to ensure they are fully compliant with the new policies and specifications. IAB Europe is actively enforcing compliance through stringent checks to maintain adherence […]

The post TCF 2.0 Transition Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 
🚨 Important Update:

TCF 2.2 has been successfully rolled out, with the implementation deadline having passed on November 20, 2023. It is crucial for Consent Management Platforms (CMPs) and Vendors to ensure they are fully compliant with the new policies and specifications. IAB Europe is actively enforcing compliance through stringent checks to maintain adherence to GDPR and ePrivacy regulations. If you need assistance, iubenda is already certified for TCF 2.2 and can guide you towards compliance. For a detailed guide on transitioning to TCF 2.2, check out this article.

This guide will help you to understand all the new features and benefits that come with the TCF v2.0 (v1.1 is no longer supported by IAB), and what action you need to take in order to make the switch.

🎙
Ask our experts live

View a live demo and have your questions answered in real time by attending our free english “Consent management for publishers” webinar. Discover in practice how you can meet both compliance and advertising industry requirements while ensuring that your ad-reach is maximized.

Attend our free webinar

TCF 2.0 Changes and Updates

TCF 2.0 includes increased functionality, across various aspects of the Framework, for both consumers & publishers. The main changes are listed below.

Do keep in mind that the following information is only relevant if you have the TCF setting enabled within your Privacy Controls and Cookie Solution.

Banner text updated

The v2 banner text has been made significantly longer to meet IAB’s requirements. The additional text contains essential disclosures related to the enhanced options that we mention in the sections below.

iubenda cookie banner with support for the IAB Transparency and Consent Framework v2.0

Right to object option included with legitimate interest

While the legal basis of legitimate interest has always been enabled by default, now, the right to object * (to processing based on legitimate interest) is also included as a checkbox directly within the TCF interface.

As with most of our features, you have full customization control and can choose to:

  • disable legitimate interest (which will also remove vendors that only rely on this as a legal interest),
  • only rely on legitimate interest (which will remove all vendors that only rely on consent), or
  • keep the default settings in place.

* On the right to object: Within the TCF, when a user objects using the dedicated checkbox, the objection is handled similarly to a withdrawal/rejection of consent and registered immediately. Therefore, no manual action is required on your part as the Publisher.

googleAdsPreferenceManagement

googleAdsPreferenceManagement is no longer supported in v2 (however, it will stay supported in v1 for as long as v1 is supported by IAB). Separate Google ad personalization settings are no longer needed (or supported) as Google has officially integrated TCF 2.0 and is now included on the global vendor list.

Any modifications you’ve made to your AdSense and Publisher Tag accounts to support the separate Google Ads preference management settings should be undone as they are no longer needed and are now redundant.

Enhanced publisher options

You may now benefit from more fine-tuned control over the behavior of the TCF functionality. Specifically, you can now:

  • Support consent only
    Publishers can determine that, for certain purposes, only consent and not legitimate interest is a viable legal basis.
  • Support legitimate interest only
    Publishers can determine that, for certain purposes, only legitimate interest and not consent is a viable legal basis.
  • Limit the vendors supported to only those which appear in your Privacy and Cookie policy
    Please note, this option must be enabled within the Privacy Controls and Cookie Solution configurator (and not just manually written into the code) for it to be effective.
  • Extended purposes
    The list of purposes has been extended to include more options – with categories like “Ad selection, delivery, reporting” transformed into separate categories like – “Select basic ads”, “Create a personalized ads profile”, “Select personalized ads” etc. Giving you more opportunities to collect consent.
  • Limit purposes
    You can now choose which purposes are presented to the user – disabling certain purposes entirely if needed.
  • PurposeOneTreatment
    When this option is enabled, end-users are not allowed to disable purpose 1: “Store and/or access information on a device”, meaning that the user’s consent is not required. This option should only be enabled if legally supported by the legislation that applies to you (e.g. German legislation). More on the advanced guide.
  • enableCMP replaced by enableTcf
    The enableCMP boolean within the Privacy Controls and Cookie Solution is now enableTCF. In general, this doesn’t directly affect you as all parameters and settings that use enableCMP have been automatically updated to support the new name. Furthermore, as enableCMP is integrated with TCF v1, it will remain supported for as long as v1 is supported by IAB.

💡 You can try the new configuration options yourself here

Which action is required on your part

In order to make the transition:

  1. In the Privacy Controls and Cookie Solution configurator, enable the “IAB TCF” Transparency and Consent Framework tab

    Enable IAB Transparency and Consent Framework v2.0

    and ensure that when you click “Edit” the consent checkboxes are checked: “Support Google’s Additional Consent Mode, to gather consent for Google’s advertising partners that do not adhere to the TCF”; and “Request new consent from users that had previously provided consent, if the IAB Framework preference is not found”.

    Enable IAB Transparency and Consent Framework v2.0 - Settings

    This will add "tcfVersion": 2 and update the stub.js script on your Privacy Controls and Cookie Solution snippet. For example:

    <script type="text/javascript">
    ...
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId     
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId     
        "enableTcf": true,
        "tcfVersion": 2,
        ...
    };
    </script>
    <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
    <script>...</script>
    

    In addition, if you’ve enabled the synchronous activator option (required if you’re not directly blocking the vendor scripts), you’ll notice that the safe-tcf.js script will be replaced by safe-tcf-v2.js

  2. If you had Google ads personalization set up on your site and made modifications to support it, please undo these modifications as they are now obsolete (as mentioned above, Google has now integrated TCF 2.0).

Caution

Remember that from August 15th 2020, TCF v1.1 will no longer be supported by The Interactive Advertising Bureau (IAB). This means that if you haven’t switched to TCF v2 settings, your set-up will be unsupported, potentially negatively affecting your ad revenue. iubenda will continue to support v1.1 alongside v2 until this time.

You can view IAB’s transition timeline here.

💡 Please note that we now fully support v2.0, and by updating your settings in the manner above, you will already be aligned with v2.0 well before the end of IAB’s transition period.

Will the update require any action from end-users?

Because the banner text and some internal options have been modified for v2.0, all end-users will be served with a fresh banner on their first visit to your site (post switch-over) as legally required.

If you’ve enabled “remember consent” within the configurator, once consent is granted by a particular user, the Privacy Controls and Cookie Solutionn will remember that consent, as per usual, for up to 12 months, after which time, the user will again be served with a fresh banner.

As with all features, these settings can be customized within your Privacy Controls and Cookie Solution configurator.

If you have any questions or need help at any time, please feel free to reach out to us via chat, or at info@iubenda.com

See also

The post TCF 2.0 Transition Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Policy for Wix Websites https://www.iubenda.com/en/help/23080-privacy-policy-wix-2/ Sun, 22 Mar 2020 16:22:55 +0000 https://help.iubenda.com/?p=23080 Do you need a privacy policy for your Wix website? And how do you add it? Learn more in this guide! In short Does my Wix website need a privacy policy? How to create a privacy policy for Wix How to add a privacy policy to your Wix website Direct link Direct text embedding Does […]

The post Privacy Policy for Wix Websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Do you need a privacy policy for your Wix website? And how do you add it? Learn more in this guide!

Does my Wix website need a privacy policy?

In accordance with international privacy laws, if your Wix website collects and uses any personal information from users, you’ll need a privacy policy. Here’s what Wix recommends in their own privacy policy:

Wix cannot provide legal advice to Users or their Users-of-Users, however we do recommend that all Users publish and maintain clear and comprehensive privacy policies on their User Websites, in accordance with the applicable laws and regulations, and that all Users-of-Users carefully read those policies and make sure that they consent to them.

How to create a privacy policy for Wix

Here’s where our Privacy and Cookie Policy Generator comes in very handy: customizable from thousands of clauses, available in 15+ languages, and automatically updated if the law changes, our generator allows you to create a legal document in minutes and seamlessly integrate it with your Wix website.

Our privacy policies contain all elements commonly required across many regions and services, and they are created by lawyers, monitored by our lawyers and hosted on our servers to ensure that they are always up-to-date with the latest legal changes and third-party requirements.

How to add a privacy policy to your Wix website

Once you’ve generated your privacy policy with iubenda, you have two ways to integrate it on your Wix website. You can either:

Keep in mind that whatever method you choose, it’s a common best practice to place the link to your privacy policy in the footer of your website (as we’ll show you below).

This method requires a iubenda Starter/Essentials plan, but it works also with the Wix free plan.

Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the privacy policy URL you find under the Use a direct link tab.

iubenda privacy policy - Use a direct link

Now go to your Wix editor, add a text link to your footer (or edit an existing one) and name it “Privacy Policy”.

Wix editor - Privacy policy link (web address)

Paste the privacy policy URL in the link settings Web Address field and you’re done.

Direct text embedding

This method requires a iubenda Advanced/Ultimate plan and a Wix paid plan.

The direct text embedding option makes your privacy policy look as if it were natively a part of your own Wix site. Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the code under the Embed the text in the body tab.

iubenda privacy policy - Embed the text in the body

Now go to your Wix editor, click on Menus & Pages > Add Page, name it “Privacy Policy” and click Done (to avoid showing the page link in the main menu, select Hide from menu). Next, click on Add > Embed > Custom Embeds > Embed a widget > Enter code and add your iubenda snippet.

Wix privacy policy editor - Custom embeds

Lastly, add a text link to your footer (or edit an existing one) and name it “Privacy Policy”. Choose the privacy policy page in the link settings and you’re done.

Wix editor - Privacy policy link (page)

Create a privacy policy for your Wix website

Start generating

See also

The post Privacy Policy for Wix Websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to integrate iubenda Privacy Controls and Cookie Solution with Google AMP (WordPress method included) https://www.iubenda.com/en/help/22135-cookie-solution-amp-wordpress-2/ Tue, 04 Feb 2020 14:21:45 +0000 https://help.iubenda.com/?p=22135 Collecting cookie consent on AMP pages requires some work. Luckily, iubenda can help. Let’s break down the steps you’ll need to take and see how to integrate our Privacy Controls and Cookie Solution with Google’s Accelerated Mobile Pages, including blocking cookies before user consent and some useful tips for WordPress (our WP plugin supports AMP). […]

The post How to integrate iubenda Privacy Controls and Cookie Solution with Google AMP (WordPress method included) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Collecting cookie consent on AMP pages requires some work. Luckily, iubenda can help. Let’s break down the steps you’ll need to take and see how to integrate our Privacy Controls and Cookie Solution with Google’s Accelerated Mobile Pages, including blocking cookies before user consent and some useful tips for WordPress (our WP plugin supports AMP).

We’ll start with WordPress, as it’s the most popular option for AMP pages. If you’re using a different solution, skip to this section.

January 2022 update

Per-category consent is now supported by AMP. Therefore, you can enable granular consent with perPurposeConsent: true in the Privacy Controls and Cookie Solution configuration, and using the data-block-on-consent-purposes attribute instead of data-block-on-consent in the AMP configuration.

March 2021 update

We’ve completely overhauled our AMP integration, further improving our support for AMP. In addition to the existing features – such as TCF support and no resurfacing of consent if the user navigates out of AMP (with a browser that supports third-party cookies) – we’ve also included:

  • Perfected Safari support. After adding the consent refreshing feature, our support for Apple’s browser is even better.
  • The tracking preferences widget. This widget – now also fully supported in AMP – allows users to re-open and edit their tracking preferences after closing the cookie banner.

If you’re already using AMP and our Privacy Controls and Cookie Solution, download the latest version of our WordPress plugin, or update your manual integration to match our latest instructions.

iubenda and Google AMP – How to collect cookie consent in WordPress

Our WordPress plugin is fully compatible with Google AMP (it works with both the AMP and AMP for WP plugins), and it allows you to easily collect GDPR cookie consent and block cookies before the user grants consent as required by the Cookie Law.

Step 1 – Download our Cookie and Consent Database plugin

If you haven’t already, download and install our WordPress plugin. For more information, take a look at our installation guide.

Step 2 – Enable the Google AMP support

AMP requires specific configuration parameters and a page hosted on your domain where the configuration is loaded from. 

Once you’ve added the Privacy Controls and Cookie Solution code and enabled the Google AMP support, our plugin will auto-generate the amp.html configuration file.

activate AMP

Just remember to set the “templates” folder permissions to 664 to avoid errors. See how to do this ⬇

How to set the “templates” folder permissions to 664

You’ve enabled the Google AMP support, but got an error message when you auto-generate the AMP configuration file? The cause is a problem with the “templates” folder permissions. Here’s how to fix it:

  1. Through your FTP client, enter the (previously uploaded) “iubenda-cookie-law-solution” folder and create (if missing) a subfolder called “templates” Templates folder (iubenda WordPress plugin)
  2. Set 664 permissions for the “templates” folder (the “Get info/Edit permissions” option is usually available via right click) Templates folder permissions (iubenda WordPress plugin)
  3. Repeat the “Google AMP support” enable procedure and save Google AMP support options (iubenda WordPress plugin)

Step 3 – Block components

As stated on amp.dev/documentation, once enabled the Google AMP support, you’ll have 3 alternative options:

  • If you have not enabled per-category consent (with the CS configuration perPurposeConsent: false):
    • use amp-consent-blocking meta tag in the head OR,
    • add data-block-on-consent on all elements that need to be blocked based on consent.
  • If you have enabled per-category consent (with the CS configuration perPurposeConsent: true) use instead the data-block-on-consent-purposes attribute with a comma-separated list of consent purposes to set the categories to be prior-blocked (e.g. data-block-on-consent-purposes="1,2,3,4,5")

If you’ve enabled the Transparency and Consent Framework, please note that in the case of AMP pages, you must not add the stub-v2.js script.

All-in-One Cookie and Consent Database (compatible with AMP)

Download the WordPress plugin

Read the installation guide


iubenda and Google AMP – How to collect cookie consent on websites not powered by WordPress

If you’re not using WordPress, follow these steps to integrate our Privacy Controls and Cookie Solution with Google AMP.

Step 1 – Create an HTML file

First of all, copy this HTML code and host it on your HTTPS site in an HTML file (be sure to edit the Privacy Controls and Cookie Solution configuration to reflect your own):

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="robots" content="noindex">
    <title>AMP Cookie Consent</title>
</head>

<body class="iubenda-cookie-solution">
    <span class="iubenda-cs-preferences-link"></span>
    <script type="text/javascript">
        var _iub = _iub || [];

        // Your own Privacy Controls and Cookie Solution configuration
        _iub.csConfiguration = {
            lang: 'en',
            siteId: 896537, // Your own site ID
            cookiePolicyId: 8207462, // Your own cookie policy ID
            enableTcf: true,
            askConsentIfCMPNotFound: true,
            googleAdditionalConsentMode: true,
            googleAdsPreferenceManagement: true,
            floatingPreferencesButtonDisplay: false,
            banner: {
                acceptButtonDisplay: true, // Recommended
                customizeButtonDisplay: true, // Recommended
                rejectButtonDisplay: true // Advisable
            },
        };
    </script>
    <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
</body>

</html>
Privacy Controls and Cookie Solution, AMP and TCF

If you’ve enabled the Transparency and Consent Framework, please note that in case of AMP pages, you must not add the stub-v2.js script.

In production, you can host this file on: 

  • the same domain, or
  • a subdomain, or
  • a different domain (in this case you’ll have to enable remoteConsent)
Testing environment

Since AMP does not allow the loading of iframes from the same domain, uploading this file on the same domain as your AMP page will result in the cookie notice not being displayed when you load AMP pages from that domain. This issue is only present when testing, because in a real-life AMP scenario the page will be loaded from google.com, so the same-domain issue will never happen.

Anyway, to avoid this issue in non-production use cases, host the HTML file on a different domain or subdomain (e.g. main domain is www.yourdomain.com, but you host the file on amp.yourdomain.com). One easy trick is to use www/non-www redirection to do this without adding extra subdomains.

Also note that the AMP iframe needs to be served via HTTPS.

Step 2 – Edit your AMP pages

Now add a copy of this <amp-consent> to your AMP pages:

<amp-consent id="iubenda" layout="nodisplay" type="iubenda">
    <script type="application/json">
        {
            "promptUISrc": "<uri-to-your-cs-page>",
            "postPromptUI": "post-consent-ui"
        }
    </script>
</amp-consent>

Next, add the code for the update preferences button, visible only when preferences are already expressed (to change the position, use the class iubenda-tp-btn--bottom-left, iubenda-tp-btn--top-left or iubenda-tp-btn--top-right instead of iubenda-tp-btn--bottom-right):

<div id="post-consent-ui">
    <button class="iubenda-tp-btn iubenda-tp-btn--bottom-right" on="tap:iubenda.prompt()"></button>
</div>

Finally, add the following <style amp-custom> to your document head:

<style amp-custom>
    .iubenda-tp-btn {
        position: fixed;
        z-index: 2147483647;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%231CC691' fill-rule='evenodd' d='M16 7a4 4 0 0 1 2.627 7.016L19.5 25h-7l.873-10.984A4 4 0 0 1 16 7z'/%3E%3C/svg%3E");
        background-repeat: no-repeat;
        background-size: 32px 32px;
        background-position: top .5px left 1px;
        width: 34px;
        height: 34px;
        border: none;
        cursor: pointer;
        margin: 16px;
        padding: 0;
        box-shadow: 0 0 0 1px rgba(0, 0, 0, .15);
        background-color: #fff;
        display: inline-block;
        height: 34px;
        min-width: 34px;
        border-radius: 4px;
        bottom: 0;
        right: 0;
    }

    .iubenda-tp-btn--top-left {
        top: 0;
        left: 0;
    }

    .iubenda-tp-btn--top-right {
        top: 0;
        right: 0;
    }

    .iubenda-tp-btn--bottom-left {
        bottom: 0;
        left: 0;
    }

    .iubenda-tp-btn--bottom-right {
        bottom: 0;
        right: 0;
    }
</style>

Wrapping up, here’s an AMP page example:

<!doctype html>
<html ⚡>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <meta name="description" content="This is the AMP Boilerplate.">
    <link rel="preload" as="script" href="https://cdn.ampproject.org/v0.js">
    <script async src="https://cdn.ampproject.org/v0.js"></script>
    <script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.js"></script>
    <style amp-boilerplate>
        body {
            -webkit-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
            -moz-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
            -ms-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
            animation: -amp-start 8s steps(1, end) 0s 1 normal both
        }

        @-webkit-keyframes -amp-start {
            from {
                visibility: hidden
            }

            to {
                visibility: visible
            }
        }

        @-moz-keyframes -amp-start {
            from {
                visibility: hidden
            }

            to {
                visibility: visible
            }
        }

        @-ms-keyframes -amp-start {
            from {
                visibility: hidden
            }

            to {
                visibility: visible
            }
        }

        @-o-keyframes -amp-start {
            from {
                visibility: hidden
            }

            to {
                visibility: visible
            }
        }

        @keyframes -amp-start {
            from {
                visibility: hidden
            }

            to {
                visibility: visible
            }
        }
    </style>
    <noscript>
        <style amp-boilerplate>
            body {
                -webkit-animation: none;
                -moz-animation: none;
                -ms-animation: none;
                animation: none
            }
        </style>
    </noscript>
    <style amp-custom>
        .iubenda-tp-btn {
            position: fixed;
            z-index: 2147483647;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cpath fill='%231CC691' fill-rule='evenodd' d='M16 7a4 4 0 0 1 2.627 7.016L19.5 25h-7l.873-10.984A4 4 0 0 1 16 7z'/%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-size: 32px 32px;
            background-position: top .5px left 1px;
            width: 34px;
            height: 34px;
            border: none;
            cursor: pointer;
            margin: 16px;
            padding: 0;
            box-shadow: 0 0 0 1px rgba(0, 0, 0, .15);
            background-color: #fff;
            display: inline-block;
            height: 34px;
            min-width: 34px;
            border-radius: 4px;
            bottom: 0;
            right: 0;
        }

        .iubenda-tp-btn--top-left {
            top: 0;
            left: 0;
        }

        .iubenda-tp-btn--top-right {
            top: 0;
            right: 0;
        }

        .iubenda-tp-btn--bottom-left {
            bottom: 0;
            left: 0;
        }

        .iubenda-tp-btn--bottom-right {
            bottom: 0;
            right: 0;
        }
    </style>
    <link rel="canonical" href=".">
    <title>My AMP Page</title>
</head>

<body>
    <amp-consent id="iubenda" layout="nodisplay" type="iubenda">
        <script type="application/json">
            {
                "promptUISrc": "<uri-to-your-cs-page>",
                "postPromptUI": "post-consent-ui"
            }
        </script>
    </amp-consent>
    <!-- This is the update preferences button, visible only when preferences are already expressed -->
    <div id="post-consent-ui">
        <button class="iubenda-tp-btn iubenda-tp-btn--bottom-right" on="tap:iubenda.prompt()"></button>
    </div>
</body>

</html>

Note:

  • Add <script async="" custom-element="amp-geo" src="https://cdn.ampproject.org/v0/amp-geo-latest.js"></script> only if you want to limit consent collection to EU
  • If these resources are already added to the page, an harmless error will be raised
Consent string and third party vendors

To retrieve the consent string on AMP, third party vendors can use context.initialConsentValue

Step 3 – Block components

As stated on amp.dev/documentation, once enabled the Google AMP support, you’ll have 3 alternative options:

  • If you have not enabled per-category consent (with the CS configuration perPurposeConsent: false):
    • use amp-consent-blocking meta tag in the head OR,
    • add data-block-on-consent on all elements that need to be blocked based on consent.
  • If you have enabled per-category consent (with the CS configuration perPurposeConsent: true) use instead the data-block-on-consent-purposes attribute with a comma-separated list of consent purposes to set the categories to be prior-blocked (e.g. data-block-on-consent-purposes="1,2,3,4,5").

See also

The post How to integrate iubenda Privacy Controls and Cookie Solution with Google AMP (WordPress method included) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Apply State-Specific US Standards within the Generator https://www.iubenda.com/en/help/21474-how-to-apply-state-specific-us-standards-within-the-generator/ Mon, 23 Dec 2019 14:52:24 +0000 https://help.iubenda.com/?p=21474 💡 Confused about state privacy laws? Here’s what you need to do: Not sure if US laws apply to you? Do this free 1-min quiz How to activate the US State law Text How to activate/modify a Service’s declaration of sale within the generator Examples of state-specific text additions to our privacy policy generator State laws in the […]

The post How to Apply State-Specific US Standards within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

💡 Confused about state privacy laws? Here’s what you need to do:

  1. Not sure if US laws apply to you? Do this free 1-min quiz
  2. How to activate the US State law Text
  3. How to activate/modify a Service’s declaration of sale within the generator
  4. Examples of state-specific text additions to our privacy policy generator

State laws in the United States, including the California Consumer Privacy Act (CCPA), are privacy regulations that vary from state to state. These laws aim to protect the privacy rights of individuals within their respective states. It is important to understand and comply with the specific privacy laws applicable to your state.

When generating privacy policies with iubenda or any other service, ensure that the generated documents comply with the relevant state laws. These documents should include provisions that align with the legal standards defined by the specific state’s privacy laws. The added provisions should apply only to users to whom you are required to offer specific rights and protections under the applicable state law.

When enabling specific options related to state laws, the generator should indicate which services or activities may be considered a sale under the state’s definition. This helps ensure transparency and compliance with the respective state’s privacy regulations.

How to activate the US State law Text

To ensure compliance with applicable state privacy laws, follow these general steps to activate the relevant provisions in your privacy policy generator:

  • log in to your admin area
  • enter the editing of your privacy policy, which can be found via Dashboard, then click on your policy and go to Edit from the privacy policy section
  • under the heading “Enable disclosures for users residing in the United States” select Enable

By enabling these disclosures, you are indicating your intent to comply with the privacy standards defined by US State laws. This feature helps ensure that the generated privacy policy aligns with the specific requirements and rights afforded to users in the respective state.

How to activate/modify a Service’s declaration of sale within the generator

The solution will also indicate and highlight services that may be considered to be a sale under the definitions – as consumers must be able to identify and opt out of these services.

In the services panel, whenever you add a service that could be considered a sale, the following options will be made available. If the service has fields that require customization, you will see these checkboxes within the usual customization screen (which typically appears after adding that service).

Once enabled, your policy will display a section that informs readers that a sale is happening, that they have the right to opt out and will likely also give several options to do so. The current opt-out options given within the privacy policy are opt-out via links or via getting in touch.

If you deselect the pre-checked “consider as sale …” checkboxes or the generator determines that no sale is happening (based on the services you selected when creating your policy), your privacy policy will display a small statement to that effect. 

Caution should be exercised when determining whether a specific activity constitutes a “sale” under the various state privacy laws. While default settings may be in place to help guide the classification, it is highly recommended to double-check and assess your specific situation. Consulting with a legal professional can provide valuable insights and ensure accurate interpretation and application of the relevant state laws.

Once activated and saved within the generator, your embedded privacy policy is automatically updated with the text – no need to re-integrate the code on your site!

Examples of state-specific text additions to our privacy policy generator

California Consumer Privacy Act (CCPA)

Important note regarding the personal information of minors

If your processing activities constitute as sale (as mentioned above) under the CCPA, and this processing potentially includes the personal information of minors, you will need to make some additional disclosures by selecting from the following services within the generator.

  1. No collection of personal information from minors to 16 – you do not knowledgeably collect personal information of consumers who are below the age of 16. The service to add to the privacy policy is called “CCPA: Collection of personal information about minors
  2. For minors between 13-16 – you do collect personal information of consumer between 13 and 16 and won’t sell their data unless those consumers have opted-in. The service to add to the privacy policy is called “CCPA: Collection of personal information about consumers aged 13 to 16
  3. Minors below 13 – you collect personal information of a consumer below 13 and won’t sell their data unless their parents or guardians have opted-in on behalf of those minors. The service to add to the privacy policy is called “CCPA: Collection of personal information about consumers below the age of 13

Please note that 2) and 3) are not mutually exclusive, they can be used at the same time. Additionally, be sure to review your processes to ensure that you meet CCPA requirements regarding minors.

Additional CCPA Requirements

Toll-free number indication

If you run a business that doesn’t operate exclusively online and has a direct relationship with the user, then you must indicate “two or more designated methods” for submitting CCPA requests. One of these methods must be a toll-free telephone number. You can easily add this information via the “Owner field” within the generator
Update your privacy policy every 12 months
The CCPA also requires the following: 

  • You must display the date the privacy policy was last updated. – iubenda puts that date in the footer of the privacy policy;
  • Information in the Privacy Policy or Policies must be updated at least every 12 months. — If changes are made during this period to a privacy policy, iubenda automatically updates the date in the footer of the policy.However, if no changes were made within the last twelve months, you can (recommended) force-update the date of the privacy policy as an indication to the user that the information is up-to-date.

What changes have been made to the policy text?

In addition to the above information, you can find a summary of the changes introduced to meet CCPA requirements here.

CCPA policy additions

  • plain-language clauses as recommended under US law;
  • a section that holds the bulk of CCPA-relevant disclosures:
    • outlining the purposes of processing,
    • outlining the sources of the data collection,
    • outlining the particular categories of personal information collected over the last 12 months,
    • which informs users of their rights under the CCPA and how those rights can be exercised,
    • which details how and when exercised rights will be honored,
    • informing consumers on how they can opt out;
  • information added to the privacy policy highlighting the services that constitute a sale under the CCPA;
  • information added to the privacy policy regarding what category of personal information a particular activity belongs to; and
  • any other CCPA terminology and definitions.

Once activated and saved within the generator, your embedded privacy policy is automatically updated with the CCPA text – no need to re-integrate the code on your site!

Want to learn more about the CCPA and its full requirements? Read the How to Comply section of our detailed CCPA guide.

Virginia Consumer Data Protection (VCDPA)

VCDPA policy additions

  • Categories of personal data processed by your organization. 
  • Organization’s purpose for processing personal data.
  • How users may exercise their rights, including how they can appeal a decision on their requests. You must provide one or more methods for users to submit a request.
  • Categories of personal data that your organization shares with third parties if any.
  • Categories of third parties, if any, with whom your organization shares personal data.

Additional information

Specific service clauses related to the VCDPA include:
  1. Profiling of Virginia consumers;
  2. Collection of personal data about Virginia consumers below the age of 13; and
  3. We do not collect personal data about Virginia consumers below the age of 13.

To enable the new US-specific clauses, simply click “Enable disclosures for Users Residing in the United States” from within the Privacy and Cookie Policy Generator. This will allow you to meet the strictest of US standards.

Want to learn more about the VCDPA and its full requirements? See here →

Colorado Privacy Act (CPA)

CCPA policy additions

CPA privacy notice includes the following:

  1. Categories of personal data collected or processed.
  2. Purposes for which the categories of personal data are processed.
  3. How and where consumers can exercise their rights, including the contact information and how to appeal a controller’s action with regard to a consumer’s request.
  4. Categories of personal data that are shared with third parties, if any;
  5. Categories of third parties with whom the personal data are shared, if any.

Want to learn more about the CPA and its full requirements? See here →

Utah Consumer Privacy Act (UCPA)

UCPA policy additions

  1. Categories of Personal Data Processed: Identify the types of personal data that your organization collects and processes, such as names, email addresses, and payment information.
  2. Purposes for Processing Personal Data: Describe the reasons why your organization collects and processes personal data, such as to fulfill orders, provide customer support, or improve products or services.
  3. Consumer Rights: Explain how consumers can exercise their rights, such as the right to access and delete their personal data. Note that the UCPA does not grant consumers the right to request the correction of inaccurate personal data.
  4. Sharing of Personal Data: Disclose the categories of personal data that your organization shares with third parties, if any. For example, you may share payment information with a payment processor or mailing addresses with a shipping provider.
  5. Third Parties: Identify the categories of third parties with whom your organization shares personal data, if any. This could include vendors, service providers, or marketing partners.

Additional information

Unlike other US state-level privacy legislations, it’s important to note that, under UCPA, opt-out links come into consideration only in relation to consumers’ right to opt out of the processing of sensitive data.

To ensure compliance with the UCPA, you should include a clear and accessible opt-out process in your privacy policy.

Want to learn more about the UCPA and its full requirements? See here →

Connecticut Data Privacy Act (CTDPA)

CTDPA policy additions

  • Categories of Personal Data: Your privacy policy must include a list of the categories of personal data that you process.
  • Purposes for Processing: Your privacy policy must clearly state the purposes for processing personal data. This includes any reason why you collect and use personal data, such as to fulfill a contract or provide a service.
  • Consumer Rights: Your privacy policy must explain how consumers can exercise their rights under the law. This includes how a consumer can access, correct, delete, or restrict the processing of their personal data. You must also include information on how a consumer can appeal a decision related to their request.
  • Third-Party Sharing: If you share personal data with third parties, your privacy policy must specify the categories of personal data that you share. 
  • Third-Party Categories: Your privacy policy must also specify the categories of third parties with which you share personal data.
  • Contact Information: Your privacy policy must provide an active electronic mail address or other online mechanism that consumers can use to contact you with questions or concerns about their personal data.
  • Sale or Targeted Advertising: If you process personal data for the purposes of sale or targeted advertising, your privacy policy must clearly and conspicuously disclose this fact. You must also provide information on how consumers can exercise their right to opt out of such processing.

Additional information

Effective January 1, 2025, you must also allow consumers to opt out of the processing of their personal data for targeted advertising or sale through an opt-out preference signal sent via a platform, technology, or mechanism, with the consumer’s consent.

Want to learn more about the CTDPA and its full requirements? See here →

Texas Data Privacy and Security Act (TDPSA)

Texas Data Privacy and Security Act (TDPSA) Policy Additions

  • Categories of Personal Data: List the types of personal data your organization processes, including names, email addresses, payment info, and sensitive data (e.g., biometric data, precise geolocation).
  • Purpose for Processing Personal Data: State why personal data is collected, such as fulfilling orders, providing services, or marketing.
  • Consumer Rights: Describe how consumers can exercise their rights to:
    • Access, correct, delete, or obtain a copy of their data.
    • Opt out of targeted advertising, sale of personal data, or certain profiling.
  • How Users May Exercise Their Rights: Provide a method for submitting requests, such as an online form or contact email, and explain the process for appeals.
  • Data Sharing: Disclose the categories of personal data shared with third parties and identify these third-party categories (e.g., vendors, service providers).

Additional Information

The TDPSA applies broadly to businesses in Texas, with exemptions for small businesses as defined by the U.S. Small Business Administration. Include an opt-out process for data sales and targeted advertising. 

Want to learn more about the TDPSA and its full requirements? See here →

Oregon Consumer Privacy Act (OCPA) 

Oregon Consumer Privacy Act (OCPA) Policy Additions

  • Categories of Personal Data: List the personal data your business collects, including sensitive data (e.g., biometric data, precise location).
  • Purpose for Processing: State why personal data is collected, including for targeted advertising or profiling.
  • Consumer Rights: Explain how Oregon consumers can:
    • Access, transfer, correct, or delete their data.
      • Opt out of data sales, targeted advertising, and profiling.
  • Use the Global Privacy Control (from July 1, 2026) to opt out of data sales or targeted ads.
  • How Users May Exercise Their Rights: Provide a method (e.g., online form, email) for submitting requests and outline how to withdraw consent.
  • Data Sharing: Disclose categories of personal data shared with third parties and identify these third-party categories.

Additional Information

Obtain explicit consent before processing sensitive data. Starting July 1, 2026, recognize “Global Privacy Control” signals for opt-outs.

Want to learn more about the OCPA and its full requirements? See here →

Montana Consumer Data Privacy Act (MTCDPA) 

  • Categories of Personal Data: List the types of personal data processed, including sensitive data (e.g., biometric data, health conditions, children’s data).
  • Purpose for Processing: State why personal data is collected, such as fulfilling services, targeted advertising, or profiling.
  • Consumer Rights: Describe how Montana consumers can:
    • Access, correct, delete, and obtain a copy of their data.
    • Opt out of data sales, targeted advertising, and profiling.
    • Submit requests without needing an account.
  • How Users May Exercise Their Rights: Provide a method (e.g., online form, contact email) for submitting requests. Explain the appeal process if requests are denied.
  • Data Sharing: Disclose categories of personal data shared with third parties and identify these third-party categories.

Additional Information

Obtain explicit consent before processing sensitive data or selling data of young consumers (13–16 years). Starting January 1, 2025, honor universal opt-out signals for data sales or targeted advertising.

Want to learn more about the MTCDPA and its full requirements? See here →

Rhode Island Data Transparency and Privacy Protection Act (DTPPA) Policy Additions

Categories of Personal Data: List the categories of personal data collected/processed and sensitive data.

Purpose for Processing Personal Data: Describe the purposes for collection/use (service delivery, customer support, security, personalization). Explicitly describe whether you process data for targeted advertising, the sale of personal data, or profiling, and why.

Consumer Rights: Explain Rhode Island consumers’ rights to access, correct, delete, and obtain a portable copy of personal data, and opt out of: targeted advertising, sale of personal data, and profiling that produces legal or similarly significant effects

How Users May Exercise Their Rights: Provide secure, reliable methods to submit requests (webform/email) and explain authorized agent submission if you allow it. Include that you respond within 45 days (free once per year), and provide an appeal process with written responses given within 60 days. If you process sensitive data, explain how consumers can grant and revoke consent, and that you will honor consent revocation within 15 days.

Data Sharing: Disclose the categories of personal data shared and of third parties receiving data (processors/service providers, analytics). If personal data is or may be sold, identify categories of third parties to whom it is (or may be) sold. Provide opt-out methods for targeted advertising and data sales, including any authorized agent route you support.

Additional Information: If you are a commercial website or internet service provider subject to Rhode Island jurisdiction, note that you must designate a controller (and provide controller contact information in the notice). Please note that the DTPPA does not mention the controllers’ obligation to honor universal opt-out signals.

Further reading:

See also

The post How to Apply State-Specific US Standards within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database – WordPress Plugin Installation Guide https://www.iubenda.com/en/help/21330-consent-solution-wordpress-plugin-installation-guide/ Tue, 17 Dec 2019 13:33:46 +0000 https://help.iubenda.com/?p=21330 Besides automating the implementation of Cookie Law regulations, our All-in-One WordPress plugin allows you to record, review, and maintain comprehensive GDPR records of consent for your web forms. It boasts built-in compatibility with Contact Form 7, WP Forms, WordPress comment, WooCommerce checkout forms and Elementor Forms, but can be manually integrated with any type of […]

The post Consent Database – WordPress Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Besides automating the implementation of Cookie Law regulations, our All-in-One WordPress plugin allows you to record, review, and maintain comprehensive GDPR records of consent for your web forms.

It boasts built-in compatibility with Contact Form 7, WP Forms, WordPress comment, WooCommerce checkout forms and Elementor Forms, but can be manually integrated with any type of web-form and can even store consent proofs for consents collected offline (e.g in-store sign-ups) via WP media upload.

Key features:

  • The plugin detects and identifies all supported forms that are embedded in the website.
  • It’s auto-compatible with and allows super easy mapping of Contact Form 7, WP Forms, WordPress comment and WooCommerce checkout forms.
  • It allows manual integration with any type of web-form.
  • For each consent, track the form/wording the user was prompted with.
  • Flexibly upload any form of proof of consent or legal notice, including a PDF if consent was collected offline.
  • It provides a high granularity: map individual form fields, exclude fields (like password inputs), add legal notices available at the time of consent collection, indicate double opt-in, set preferences and more.
  • REST HTTP API and JS SDK, to give you total control and how and when consent is stored.
  • Store multiple preferences for each user (e.g. if you have multiple newsletters or opt-ins).
  • Features an easy-to-use interface for entering custom scripts and iframes.
  • It provides API input field for quick and easy activation.

Filters essentially expand the functions of plugins. They provide developers the ability to change a function’s default behavior. It’s important to remember that filters operate on the data that they receive.

How can I support extra forms for Consent Database?

Suppose you want to support a new form; you have to add the first filter shown below and apply the second filter provided. Whereas if you’re going to alter an existing form jump directly to the second filter.

  1. Add the following filter to register any new form, followed by the second filter below:

  2. add_filter('iub_supported_form_sources', function ($sources) {
    // attach the new supported form
    // $sources['lorem_ipsum'] = 'Lorem Ipsum Forms';
    return $sources;
    });


  3. This filter allows you to configure to support a new form (apply after the first filter) or to alter any existing support form (apply this filter only):

  4. add_filter("iub_after_call_*_lorem_ipsum_*_forms", function($forms){
    // Parse your form
    // You can check the implemented examples like WPForms, wpcf7 and Woocommerce

    $parsedForm = ...;
    $forms[] = $parsedForm;
    return $forms;
    })

Installation and configuration

Once you’ve installed our Cookie and Consent Database Plugin for the GDPR & ePrivacy, you can start configuring it.

Please note that with the actual configuration of the plugin, some integrations requires the Privacy Controls and Cookie Solution code at a minimum. This means that if you want to use the Consent Database only – but not the Privacy Controls and Cookie Solution you have these following options:

  • If you already have a iubenda account and a Consent Database API to synchronize, temporarily activate the Privacy Controls and Cookie Solution in your dashboard (it’s free!) → add the Privacy Controls and Cookie Solution code to the plugin console → add your Consent Database code → sync → then deactivate the Privacy Controls and Cookie Solution.
  • If you are starting from scratch with the plugin, after creating the account, turn off the toggles regarding the basic configuration of the cookie banner and privacy policy button and proceed by clicking Integrate. once in the plugin dashboard, you can enable the Consent Database

Unlike when using the JavaScript method, there’s no need to include the Consent Database code in your head, or to provide a script with a load/submit function: the plugin will take care of it.

Input the API key

Select the Consent Database tab and input the Public API key ( you can find this in your iubenda dashboard > [Your website] > Consent Database > Embed).

paste your API key

Detect your forms

Once clicked on Autodetect Forms, the plugin will show all supported forms installed on your site, listing them either under “All“, “Mapped” and “To Map“.

auto-detect
Caution

If you add a new form or modify the structure of a form, (e.g by adding a new field), you’ll need to click on the auto-detect button again in order to display the most updated version of the form within the plugin interface.

Map your forms

To map a form, simply click on the form title to open up the Mapping window and select the fields that you’d like the Consent Database to record the data from.

Map fields

Indicate your legal documents

The plugin also lets you indicate your legal documents, including privacy policies, cookie policies, terms and conditions, and custom documents.

legal documents

When you’re done editing, just click on Save Settings at the bottom-right of the page.

Once you’ve collected your consents, you’ll be able to sort and analyze your data in the Consent Dashboard.

All-in-One Cookie and Consent Database

Download the WordPress plugin

Read the changelog

See also

The post Consent Database – WordPress Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How iubenda can help with US state privacy laws compliance https://www.iubenda.com/en/help/21165-how-to-comply-with-us-state-privacy-laws-using-iubenda/ Thu, 12 Dec 2019 16:09:51 +0000 https://help.iubenda.com/?p=21165 Getting started with US compliance is easy: Check to see if US state privacy laws apply to you. Take this 1-min quiz Activate US Compliance within the Privacy and Cookie Policy Generator New options available for US state privacy laws Sensitive Personal Data types Addition of new US-specific clauses Activate US Compliance within the Privacy […]

The post How iubenda can help with US state privacy laws compliance appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

US state privacy laws impose significant requirements on businesses with considerable legal and technical implications.

The US state privacy laws provide consumers with more control over their personal information, by granting dedicated consumer rights and requiring businesses to be transparent about their privacy practices. Although generally consistent, there may be, however, differences in scope, consumers’ rights, and enforcement among the different state laws. Check our US privacy cheatsheet for more information.

Our solutions take the guesswork out of compliance by doing the heavy technical and legal lifting.

With iubenda, you can simplify compliance with these legal requirements

US state privacy laws require you, among others, to provide your users with an up-to-date Privacy Policy, including specific information, such as US users’ privacy rights and a description of your personal information processing practices.

With our Privacy and Cookie Policy Generator, you can now enable, with a single US toggle, a compliance solution for all US state privacy laws that we currently support and ALL upcoming US state legislations that we will support in the future.

🔎 For an overview of the US state privacy laws that we currently support and the main related requirements you can check our guide

👉 Generate your US Privacy Policy or update your existing policy by clicking “Enable disclosures for users residing in the United States” to activate the new US-specific sections and clauses.

Us laws privacy cookie policy

You can find the switch here:

  • log into your privacy policy admin area;
  • enter the editing of your privacy policy, which can be found via our Dashboard, then click on your policy and go to Edit from the privacy policy section;
  • under the heading “Enable disclosures for users residing in the United States” choose Enable.

This allows you to cover your specific needs and react based on where your users/clients are located and choose accordingly.

Once you have enabled it, you will see that the link to the US-specific section of your privacy policy has been added to your Privacy Policy.

New options available for US state privacy laws

When you activate “Enable disclosures for users residing in the United States” within the legislation-specific standards, various US-related options will appear on all services you add to your Privacy and Cookie Policy: 

  • Mark as a service provider/processor or contractor
  • Mark as a third-party service

If you select the option “Mark as a third-party service” you will see the following sub-options: 

  • Consider as a Sale in California
  • Consider as a Sale in [list of all applicable US state privacy laws]
  • Consider as Sharing in California
  • Consider as Targeted Advertising in [list of all applicable US state privacy laws]

Under US state privacy laws, third parties are generally defined as a person or legal entity who is not any of the following:
(1) The business/controller with whom the consumer intentionally interacts and collects personal information from the consumer.
(2) A service provider/processor to the business.
(3) A contractor.

If the service is not flagged as a third-party service according to the above definition, the sub-options for sale/sharing and target advertising do not apply.

We introduced an automated services mapping feature that displays the checkboxes as pre-selected according to the definitions of sale, sharing, and targeted advertising set by applicable laws.

For custom services {those added from “Create custom service”} all checkboxes will be presented as unchecked, and you could make the proper selections.

When marking the processing performed through a service as falling within one or more of the categories listed above, the related wording will be automatically added or removed in the privacy policy section dedicated to the relevant US state we cover

Any predefined setup can be easily overwritten and you may customize it according to your specific needs.

💡 Since the definition of targeted advertising, sale and sharing may vary from state to state, as well as the exceptions to such legal concepts, we strongly suggest you to check these concepts in depth, for example with the help of our US privacy cheatsheet – Comparison table.

Sensitive Personal Data types 

When you activate “Enable disclosures for users residing in the United States” within the legislation-specific standards, for some services, where applicable, you will see a new field at the service level called “Sensitive Personal Data”.

For each of these services, you can select one or multiple categories of sensitive personal data being processed, as shown below:

Sensitive Personal Data types

The definition of sensitive data may vary according to the applicable US state law. When you select specific sensitive data categories here, it will be displayed in the privacy policy as sensitive data processed by you (only in the section of the policy with disclosures about the relevant US state).

💡 Check our comparison table on the definition of sensitive data across the US state laws we cover..

Addition of new US-specific clauses 

Our Privacy and Cookie Policy Generator offers additional clauses related to specific processing activities, as required by some US state privacy laws.

This includes, among others, clauses related to the processing of children’s personal information and the processing of personal data for profiling purposes. Here are some examples of US-specific clauses:

  • Collection of Personal Information about California consumers below the age of 13
  • Collection of Personal Information about Users below the age of 13 in the United States
  • We do not collect Personal Information about California consumers below the age of 16
  • We do not collect Personal Information about Users below the age of 13 in the United States
  • Profiling of Users in [list of all applicable US state privacy laws]

These additional clauses can be beneficial but are intended as broad and generic descriptions, as we do not know exactly how you process your users’ personal information. Therefore, we highly recommend that you check if they apply to your case and, if needed, describe your processing activities in more detail byadding custom clauses.

💡 For more information on privacy policies click here.

Privacy Controls and Cookie Solution →

US privacy controls 

If you process consumers’ personal information for certain purposes, including but not limited to, targeted advertising or engage in the sale or sharing of personal data, under certain US state privacy laws, you are likely required to:

  • clearly and prominently inform users about these processing activities and their right to opt out of them;
  • provide users with easily accessible privacy controls to exercise their right to opt out at any time; and 
  • respect their preferences.

Our Privacy Controls and Cookie Solution help you comply with these requirements.

How do I start complying?

Once you have completed the activation of the new US-specific clauses within the Privacy and Cookie Policy Generator, make sure the “US State Laws” tile within the Privacy Controls and Cookie Solution is enabled: the solution will auto-configure to help you meet the new US requirements allowing your users to exercise their right to opt out.

👉 Simply select where you and your users are based while configuring the Privacy Controls and Cookie Solution, and the solution will do the rest!

Haven’t generated a Privacy Policy with us, or want to customize things yourself?

Within the Privacy Controls and Cookie Solution Generator simply enable the US State Laws option and the support to manage users’ opt-out preferences (if applicable).

To do this, make sure you toggle on US State Laws and click on the Edit button.

Next, click on Manual configuration and select the options that apply to your case:

  • Allow users to opt out of the sale of their personal information [list of all applicable US state privacy laws]
  • Allow users to opt out of the sharing of their personal information [list of all applicable US state privacy laws]
  • Allow users to opt out of targeted advertising [list of all applicable US state privacy laws]

Important Update on US Privacy Signal Deprecation and Transition to Global Privacy Platform (GPP)


The U.S. Privacy Signal (USP) served as the CCPA Compliance Mechanism, acting as an API facilitating the communication of U.S. privacy signals. This API enabled websites and apps to communicate with third parties and vendors, contributing to the compliance process. However, this signal, last revised in 2020, has been officially deprecated as of January 31, 2024. In its place, the Global Privacy Platform (GPP) actively provides a more comprehensive solution, actively addressing advertising-related privacy considerations across the United States, actively offering broader coverage.

🚀 iubenda has been ahead of the curve, adopting the GPP signal in alignment with the standards for US state laws since December 2022 but also providing support for the new GPP v1.1 from September 23, 2023. If you have not updated your configuration since this change, it is crucial to address this immediately.

  • When you access the Privacy Controls and Cookie Solution Configurator with an outdated CCPA configuration, the solution will automatically shift to the new US state laws and implement the GPP signal.
  • Once you’ve updated your configuration, if you’re using specific API calls, please remember to replace the old __uspapi with the new __gpp, as outlined in the CMP API Specification.
  • After you update the configuration, remember to re-embed your code in your website.

This update can enhance your alignment with broader advertising and privacy considerations in the U.S.

Update to the Global Privacy Platform now to keep your compliance setup up-to-date and protect your business

Make the switch to GPP now!

Learn more about the Global Privacy Platform

Short answer: no, you don’t have to.

Under US state privacy laws, a cookie banner does not represent a specific requirement. Cookies are not addressed by these laws and legislators generally adopt an opt-out approach (certain exceptions apply see our dedicated guide on the processing of sensitive data, for example). This means that, in most cases, you may perform processing activities without obtaining users’ prior consent and until users decide to actively deny their consent to such processing.

That’s why you don’t have to display a cookie banner.

The Privacy Controls must be easily accessible, in order to allow your users to freely exercise their privacy preferences at any time. Furthermore, some US state laws, such as the CCPA, as amended by the CPRA, set a mandatory predefined format (the white and blue icon shown below) and label (“Your privacy choices”) for the link to the Privacy Controls.

Your privacy choices link

How do I start complying?

Our Privacy widget helps you comply with all these requirements in the easiest way possible: a small, unobtrusive widget, with a predefined format and label, will be displayed on every page of your website after your user has set their preferences.

Sensitive Personal Data types

To do this, under the Style & Text section, click Edit on the Privacy widget box, then simply choose the option to add it Manually.

If you choose to add the link manually, remember to place it on your website/app in an easily accessible spot, for example, the footer or the application settings.

Direct link to the Notice at Collection for California consumers 

The CCPA, as updated by the CPRA, requires you to make the Notice at Collection readily available where consumers will encounter it at or before the point of collection of any personal information, including sensitive personal information (if applicable). For example, by posting a conspicuous link to the notice on the home page of your website, in the settings menu of your app, and on all web pages where personal information is collected.

The purpose of the Notice at Collection is to provide consumers with timely notice about, among others, the categories of personal information, including sensitive personal information, collected and processed, the purposes for which such information is collected and processed, and whether that information is sold or shared, so that consumers have a tool to understand, and therefore control, your use of their personal information.

To learn more about what should be included in the Notice at Collection, read our guide.

🔎Thanks to an advanced feature of our Privacy Policy generator you can easily align with with this requirement (and its 12-month look-back period).

If you delete all the services that were using a specific personal information category, the Notice at Collection will automatically update to clarify that you collected that category in the past 12 months but you are no longer collecting it. Once the 12-month period lapses the category will be permanently removed from the Notice at Collection. 

You can also manually permanently remove a category by deleting the service from the “Recently deleted” services tile in the Privacy Policy Generator.

How do I start complying?

Our Privacy and Cookie Policy Generator, together with our Privacy Controls and Cookie Solution helps you comply with this CCPA/CPRA requirement.

To do so:

  1. Make sure you have set the Enable disclosures for users residing in the United States as ENABLED in the legislation-specific standards inside the Privacy and Cookie Policy generator;
  2. Make sure you have enabled the US State Laws option in the Privacy Controls and Cookie Solution;
  3. Under the Style & Text section, click Edit on the Privacy widget box, then simply choose whether you want to automatically add the widget or manually embed the link to the Notice at Collection.
Sensitive Personal Data types

Sensitive personal information 

Under certain US state laws, in order to process consumers’ sensitive personal information, you need to obtain their prior consent.

That’s why you should provide a choice mechanism on your website/app that allows users to freely give (or withdraw) their consent to the processing of their sensitive personal information.

How do I start complying?

Our Privacy and Cookie Policy Generator, together with our Privacy Controls and Cookie Solution helps you comply with this requirement. To know how and learn more about the definition of sensitive personal information according to the different US state privacy laws, read our dedicated guide.

How to make sure that “Do Not Sell” signal is honored

If the user expresses the choice to opt out of the sale of their data, this choice must be honored. There are three ways to make sure of this.

1. If the sale is performed by a service/vendor that adheres to the IAB Global Privacy Platform (GPP) and CCPA/CPRA Compliance Framework

In this case, our integration with the IAB Global Privacy Platform (GPP) and CCPA/CPRA Compliance Framework will take care of notifying the vendors that an opt-out from sale has occurred.

2. If the sale is performed by a service/vendor that provides a specific configuration to signal that the user has opted out of sale

This is, for instance, the case with Google, which allows you to send a specific signal whenever an opt-out has occurred. The instructions are provided in this article and apply to Google Ads and Google Analytics.

Other vendors may provide similar instructions.

3. If the sale is performed by a service/vendor that does not adhere to the IAB Global Privacy Platform (GPP) and CCPA Compliance Framework nor provides a way to communicate the opt-out

In this case, you’ll have to apply the class _iub_cs_activate to the script tag of each of these services, change the type attribute from text/javascript to text/plain and add the applicable data-iub-purposes="..." attribute comma separated IDs: e.g. data-iub-purposes="s,sh,adv,sd8"

This is the list of purposes handled by the Privacy Controls and Cookie Solution:

  • s → selling of personal info
  • sh → sharing of personal info
  • adv → targeted advertising
  • sd8 → sensitive Data, Precise Geolocation Data
<script class="_iub_cs_activate" type="text/plain" data-iub-purposes="..." src="...">
...
</script>

This can be done manually or via a tag manager like Google Tag Manager.

We significantly increased the complexity of our solution to meet current US state laws’ requirements, including what comes next.

  • The Privacy Controls and Cookie Solution now allows you to tag scripts to handle consumers’ opt-out requests.
  • iubenda is now among the few providers compatible with GPP & GPC. Our Privacy Controls and Cookie Solution automatically detects and respects the GPC signal, eliminating the need for users to tag scripts and allowing them to honor opt-out requests effortlessly.
  • The solution now adds a footer widget to your site allowing consumers to opt out of the processing of their personal information for the purpose of targeted advertising, sale or sharing.
  • A Consent Banner will also display to collect an opt-in if you are processing users’ geolocation data. This banner provides the ability to consent or reject to the use of this personal information.

For further information on US state privacy laws:

The post How iubenda can help with US state privacy laws compliance appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Can I Use a Terms and Conditions Template? https://www.iubenda.com/en/help/20504-can-i-use-a-terms-and-conditions-template/ Wed, 13 Nov 2019 16:42:40 +0000 https://help.iubenda.com/?p=20504 The short answer: Despite how simple they appear, terms and conditions are meant to meet incredibly complex and highly specific scenarios. Because each terms and conditions document is a legally binding contract that is meant to protect you, the business owner, it’s imperative that the document matches your specific business processes, model, and remains up-to-date […]

The post Can I Use a Terms and Conditions Template? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The short answer: Despite how simple they appear, terms and conditions are meant to meet incredibly complex and highly specific scenarios. Because each terms and conditions document is a legally binding contract that is meant to protect you, the business owner, it’s imperative that the document matches your specific business processes, model, and remains up-to-date with the various laws referenced in its contents. Templates simply cannot do this, therefore, we strongly suggest that you avoid using templates.

The Long answer

The contents of a terms and conditions document typically spans multiple laws (everything from consumer law to copyright law). They should allow you to set your rules for user behavior, including appropriate disclaimers for any misuse of your product or service. This is trickier than it seems as even businesses with the same model may have different processes, needs, and user behavior. Let’s look at some examples to better illustrate this.

Business Model

First, let’s look at how business model influences the content of your terms and conditions by exploring a few questions.
These are some of the questions you should ask yourself when evaluating your business model:

  • Is your business mostly concerned with monetizing content?
  • If you run an e-commerce site, do you sell digital products, physical products, or both?
  • Do you sell primarily to other businesses, or only to consumers (b2b vs. b2c)?
  • Can your users sell to other users?

Not only do each one of these business models have different needs, but specific or various laws may apply depending on which model you use. For example, under many countries’ laws, consumers have certain mandatory rights that you’re legally required to disclose. As you can imagine, where multiple laws and regulations are concerned, it’s best to leave the drafting to legal experts.

Business Processes

Business processes can vary widely even within the same general business model.
For example, two eCommerce stores, selling the exact same products can have different:

  • sign-up processes; account types (e.g. guest vs logged in);
  • user roles (can users sell to other users, up-vote ratings, leave comments, report other users);
  • payment options (paypal, credit card, bitcoin, in-store virtual credit, gift cards);
  • return and shipping policies; and more.

Needless to say, your actual business processes heavily determine how users interact with your service, and by effect, the rights you grant, rules you implement and the disclaimers that you make.

Business Needs

Lastly, considering that terms and conditions are meant to protect you, the business owner, it’s critically important that you set rules specific to your actual needs. Let’s take a look at some popular situations in which terms and conditions are used to set legally binding rules.

Businesses often choose to set explicit rules where:

  • different user levels exist (eg. registered vs non-registered);
  • the business facilitates or otherwise process payments and/or other sensitive user data;
  • the business wants to communicate expectations for user behavior (including comments) and state grounds for termination of accounts;
  • users are allowed to upload their own content;
  • the business participates in affiliate programs;
  • the business would like to have some legally enforceable control over, and set rules about, how their product, service or content may be used;
  • the business provides content or products which can potentially cause harm if misused;
  • the business would like to formally set the governing law; and more.

As you can imagine, business needs are entirely individual and evolve with time.

Considering the above, a more accurate way to rephrase the original question would be: Should I just use a template for the only legally binding agreement between myself and my users that allows me to set rules specific to my business processes and to protect my business from liabilities? We strongly suggest that you do not.

A terms and conditions document is more than just a formality, it is a valuable tool that protects you as a business owner.

How iubenda can help

Our Terms & Conditions generator lets you to easily generate and manage Terms and Conditions that are professional, customizable from over 100 clauses, drafted by an international legal team, available in 8 languages, and up to date with the main international legislations. It is powerful, precise, and capable of handling even the most complex, individual scenarios and customization needs.

It comes with:

  • guided set-up;
  • hundreds of possible personalizations;
  • legislation monitoring;
  • plug-and-go integrations for popular store platforms such as Shopify and WooCommerce;
  • pre-defined scenarios: buildable text modules for marketplace, affiliate programs, copyright, e-commerce, mobile, and more.

The solution is optimized for everything from e-commerce, blogs, and apps, to complex scenarios like marketplace and, SaaS.

Getting started is easy. Simply create a free account, activate the Terms and Conditions (requires 1 Ultra license) within the dashboard and start generating.

For a list of the full features of the Terms and Conditions Generator, click here or read the guide here.

Generate a Terms and Conditions document

Optimized for E-commerce, Marketplace, SaaS, Apps and more

Start generating

See also

The post Can I Use a Terms and Conditions Template? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
CS for mobile | Developer’s Guide https://www.iubenda.com/en/help/19678-cs-for-mobile-developers-guide-2/ Tue, 24 Sep 2019 10:57:04 +0000 https://help.iubenda.com/?p=19678   iOS Changelog iOS Android Changelog Android Now, you can seamlessly integrate our SDK into your mobile apps via the Embedding Section of the Privacy Controls and Cookie Solution, streamlining the compliance process. ⚠️ Please note, this feature is only available for the Ultimate plan. iOS Add the iubenda SDK to your project To integrate […]

The post CS for mobile | Developer’s Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 

Now, you can seamlessly integrate our SDK into your mobile apps via the Embedding Section of the Privacy Controls and Cookie Solution, streamlining the compliance process.

⚠ Please note, this feature is only available for the Ultimate plan.

iOS

Add the iubenda SDK to your project

To integrate the iubenda SDK into your iOS project, you have two options depending on your preference and project setup: CocoaPods or Swift Package Manager.

To add the iubenda SDK to your project via CocoaPods, insert the following configuration into your Podfile:

platform :ios, '10.0'
source "https://github.com/iubenda/cocoapods.git"
target 'MyApp' do
  use_frameworks!
  pod 'IubendaMobileSDK', '2.6.4'
end

To automatically update the library version with pod update, you can set the dependency as:

  • 'IubendaMobileSDK', '~> 2.6.4' for trivial updates
  • 'IubendaMobileSDK', '~> 2.6' for minor updates
  • 'IubendaMobileSDK' for all updates

For Swift Package Manager, normally, providing the URL of the package is sufficient, as adding a library with SPM is straightforward with the “Add Package Dependency” option in Xcode. Here’s a step-by-step guide:

  • Launch Xcode and open your project or workspace.
  • Navigate to the menu bar at the top of the screen, click on “File” → “Add Packages Dependencies…“. This opens the package manager interface.
  • In the search bar of the package manager dialog that appears, enter the URL of the iubenda SDK’s Swift package repository.
  • Press “Enter” after typing the URL to search for the package.
  • Once the iubenda package appears in the search results, click on it to select it.
  • You will be presented with a list of versions or branches. Select the version that suits your project needs. It’s generally recommended to use the most recent stable version unless you have specific requirements.
  • After selecting the version, click on “Add Package“.
  • A dialog will appear asking you to choose which target(s) in your project should use the iubenda SDK. Select the target(s) relevant to where you want to integrate iubenda.
  • Click on “Add Package” to proceed.
  • Once the package is added to your project, you can start using it in your code.
To use the library in your code:
  • Add import iubenda in your source files to use the library in Swift
  • Add #import <iubenda/iubenda-Swift.h> in your source files to use the library in Objective-C

Initialize the SDK

In your AppDelegate class, inside the didFinishLaunchingWithOptions method, create a configuration object with your settings and call IubendaCMP.initialize()

let config = IubendaCMPConfiguration()
config.gdprEnabled = true
config.googleAds = true
config.siteId = "12341234"
config.cookiePolicyId = "56785678"
config.applyStyles = true
config.cssFile = Bundle.main.path(forResource: "custom_style", ofType: "css")
config.jsonFile = Bundle.main.path(forResource: "config", ofType: "json")
IubendaCMP.initialize(with: config)

Settings

Setting Default Description
csVersion current Allows to define which version of the Privacy Controls and Cookie Solution to use. Accepted values are “current”, “beta”, “stable” or a specific version number
gdprEnabled false Proxy for IAB TCF’s IABConsent_SubjectToGDPR setting. If false, Mediation SDK can run mediation across all ad network SDKs. Otherwise, Mediation SDK will run mediation only among the ad network SDKs that are GDPR ready
siteId   Id of the customer’s site on iubenda
cookiePolicyId   Id of the customer’s Cookie Policy on iubenda
googleAds false True to enable consent management for Google personalized ADs
jsonFile   JSON file path to pass custom configuration to the consent UI
jsonContent   Same as above, but set as a string
forceConsent true If true, the consent screen will be presented to the user until consent is granted, helping you to maximize consents. If false, askConsent() won’t have any effect if the user dismisses the consent request after the first launch
cssFile   CSS file path for adding custom style to the consent UI. Custom CSS can be applied on top of the standard one (applyStyles=true) or by itslef (applyStyles=false)
cssContent   Same as above, but set as a string
cssUrl   Same as above, but set as a Url String
applyStyles true If true the standard css style is applied to the consent UI
acceptIfDismissed false If true and the JS is ready, when dismissing the popup, the notice is accepted
preventDismissWhenLoaded false If true, once the popup is fully loaded, it’s not possible to dismiss it without expressing a preference
skipNoticeWhenOffline true If enabled, askConsent() will not show the popup if no internet connection is detected
dismissColor   Allows to set a custom color for the close button (×). If not set, the textColor value in the JSON will be applied. If also textColor is not set, the default color will be used
bannerPosition center Set position of Consent Banner Pop-Up to top, bottom or center
automaticHandlingOfAtt false When set to true, this SDK feature handles the ATT workflow on iOS as follows:
1. Invoking the askConsent() function triggers the ATT system-permission alert first.
2. If the user authorizes tracking (status is .authorized as per Apple’s ATT Documentation), a Consent pop-up appears.
3. If the user denies tracking, the Consent pop-up will not be displayed.
Important Note: Enabling this feature requires adding the NSUserTrackingUsageDescription key to your info.plist file. More details are available in Apple’s documentation on NSUserTrackingUsageDescription.
landscapeHeight Set custom height for the first layer in landscape mode
landscapeWidth Set custom width for the first layer in landscape mode
portraitHeight Set custom height for the first layer in portrait mode
portraitWidth Set custom width for the first layer in portrait mode
isFullScreen false Set full width and height for all layers
fatalErrorTimeout 3000 Set timeout(ms) to get fatal error with NSNotification.Name.OnFatalError
invalidateConsentInterval Dates(dd/MM/yyyy - yyyy/MM/dd - dd-MM-yyyy - yyyy-MM-dd - dd.MM.yyyy -yyyy.MM.dd) Accepts a startDate and endDate, and if valued, it should check if there is a preference alreadyexpressed, and if there is and the timestamp is between configured dates then itshould not consider the preference anymore

Configuration example with custom CSS

let config = IubendaCMPConfiguration()
config.gdprEnabled = true
config.forceConsent = true
config.googleAds = true
config.siteId = "12341234"
config.cookiePolicyId = "56785678"
config.acceptIfDismissed = true
config.applyStyles = false
config.cssFile = Bundle.main.path(forResource: "custom_style", ofType: "css")
config.jsonFile = Bundle.main.path(forResource: "config", ofType: "json")
IubendaCMP.initialize(with: config)

custom_style.css:

/***************************************************************************
// * iubenda Privacy Controls and Cookie Solution                                              *
// *                                                                       *
// * Sample CSS v2.2.6                                                     *
// *                                                                       *
// * (c) 2019 iubenda srl <info@iubenda.com>                               *
// * All Rights Reserved.                                                  *
// *                                                                       *
// *************************************************************************
//
// CHANGELOG
//
// 2.2.7 - 2020-06-18
// - Fix container breaking on mobile.
//
// 2.2.6 - 2020-05-27
// - Hide scroll bar visibility.
// - Fix brand image height on mobile.
//
// 2.2.5 - 2020-05-06
// - Fix IE flex content.
// - Fix text overflow.
//
// 2.2.3 - 2020-04-21
// - Cursor pointer
// - Button text ellipsis
// - Equalize shadows top/bottom modal bar
//
// 2.2.2 - 2020-04-06
// - Add pointer events auto to the overlay
//
// 2.2.1 - 2020-03-06
// - Introduce popover.
//
// 2.2.0 - 2019-11-07
// - Introduce brand customizations
//
// 2.1.5 - 2019-11-22
// - Add class to go fullscreen.
//
// 2.1.4 - 2020-03-25
// - Make the banner shadow darker
//
// 2.1.3 - 2020-01-22
// - Fix banner not appearing on iPhone.
//
// 2.1.2 - 2019-11-07
// - Fix buttons height on IE.
//
// 2.1.1 - 2019-10-30
// - Fix buttons margin and customize-advertising-tracking button width on mobile.
//
// 2.1.0 - 2019-10-24
// - Introduce text overflowing mask and style for reject button.
//
// 2.0.4 - 2019-06-24
// - Convert close button width to min-width
//
// 2.0.3 - 2019-05-24
// - Introduce new positioning options
//
// 2.0.2 - 2019-05-02
// - Fix text spaces when custom content
//
// 2.0.1 - 2019-04-09
// - Add rules for buttons group
//
// 2.0.0 - 2019-02-01
// - Full rewrite to accommodate the new markup
//
// 0.0.1 - 2015-04-01
// - First implementation of the sample CSS
*/

/*
-----------------
IMPORTANT: Changing the following values may prevent the notice from being displayed properly.
-----------------
*/
#iubenda-cs-banner {
  font-size: 15px !important;
  background: none !important;
  line-height: 1.4 !important;
  position: fixed !important;
  z-index: 99999998 !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  border: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  will-change: opacity, visibility;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  -webkit-transition: opacity 0.4s ease, visibility 0.4s ease !important;
  -o-transition: opacity 0.4s ease, visibility 0.4s ease !important;
  transition: opacity 0.4s ease, visibility 0.4s ease !important;
  /* default */
}

#iubenda-cs-banner [class*=" iub"],
#iubenda-cs-banner [class^=iub],
#iubenda-cs-banner .iubenda-banner-content:not(.iubenda-custom-content) * {
  font-size: 100% !important;
  width: auto !important;
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  background: none !important;
  -webkit-box-sizing: border-box !important;
  box-sizing: border-box !important;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
  -webkit-backface-visibility: hidden !important;
  backface-visibility: hidden !important;
  font-family: -apple-system, sans-serif !important;
  text-decoration: none !important;
  color: currentColor !important;
  background-attachment: scroll !important;
  background-color: transparent !important;
  background-image: none !important;
  background-position: 0 0 !important;
  background-repeat: repeat !important;
  border: 0 !important;
  border-color: #000 !important;
  border-color: currentColor !important;
  border-radius: 0 !important;
  border-style: none !important;
  border-width: medium !important;
  bottom: auto !important;
  clear: none !important;
  clip: auto !important;
  counter-increment: none !important;
  counter-reset: none !important;
  direction: inherit !important;
  float: none !important;
  font-style: inherit !important;
  font-variant: normal !important;
  font-weight: inherit !important;
  height: auto !important;
  left: auto !important;
  letter-spacing: normal !important;
  line-height: inherit !important;
  list-style-type: inherit !important;
  list-style-position: outside !important;
  list-style-image: none !important;
  margin: 0 !important;
  max-height: none !important;
  max-width: none !important;
  min-height: 0 !important;
  min-width: 0 !important;
  opacity: 1;
  outline: 0 !important;
  overflow: visible !important;
  padding: 0 !important;
  position: static !important;
  quotes: "" "" !important;
  right: auto !important;
  table-layout: auto !important;
  text-align: left !important;
  text-indent: 0 !important;
  text-transform: none !important;
  top: auto !important;
  unicode-bidi: normal !important;
  vertical-align: baseline !important;
  visibility: inherit !important;
  white-space: normal !important;
  width: auto !important;
  word-spacing: normal !important;
  z-index: auto !important;
  background-origin: padding-box !important;
  background-origin: padding-box !important;
  background-clip: border-box !important;
  background-size: auto !important;
  -o-border-image: none !important;
  border-image: none !important;
  border-radius: 0 !important;
  border-radius: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  -webkit-column-count: auto !important;
  -moz-column-count: auto !important;
  column-count: auto !important;
  -webkit-column-gap: normal !important;
  -moz-column-gap: normal !important;
  column-gap: normal !important;
  -webkit-column-rule: medium none #000 !important;
  -moz-column-rule: medium none #000 !important;
  column-rule: medium none #000 !important;
  -webkit-column-span: none !important;
  -moz-column-span: none !important;
  column-span: none !important;
  -webkit-column-width: auto !important;
  -moz-column-width: auto !important;
  column-width: auto !important;
  -webkit-font-feature-settings: normal !important;
  font-feature-settings: normal !important;
  overflow-x: visible !important;
  overflow-y: visible !important;
  -webkit-hyphens: manual !important;
  -ms-hyphens: manual !important;
  hyphens: manual !important;
  -webkit-perspective: none !important;
  perspective: none !important;
  -webkit-perspective-origin: 50% 50% !important;
  perspective-origin: 50% 50% !important;
  text-shadow: none !important;
  -webkit-transition: all 0s ease 0s !important;
  -o-transition: all 0s ease 0s !important;
  transition: all 0s ease 0s !important;
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
  -webkit-transform-origin: 50% 50% !important;
  -ms-transform-origin: 50% 50% !important;
  transform-origin: 50% 50% !important;
  -webkit-transform-style: flat !important;
  transform-style: flat !important;
  word-break: normal !important;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}

#iubenda-cs-banner .iub-popover-trigger {
  display: inline-block !important;
  text-decoration: underline !important;
  -webkit-text-decoration-style: dashed !important;
  text-decoration-style: dashed !important;
  position: relative !important;
  margin-right: 16px !important;
  cursor: pointer !important;
  line-height: 1.25 !important;
}

#iubenda-cs-banner .iub-popover-trigger:before, #iubenda-cs-banner .iub-popover-trigger:after {
  content: "";
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 12px;
  vertical-align: middle;
  background-size: 4px;
  position: absolute;
  left: calc(100% + 2px);
  top: 3px;
}

#iubenda-cs-banner .iub-popover-trigger:before {
  background-color: currentColor;
  opacity: 0.35;
}

#iubenda-cs-banner .iub-popover-trigger:after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='13' viewBox='0 0 7 13'%3E%3Cg fill='%23FFF' fill-rule='evenodd'%3E%3Cpath d='M2.779 1.288a1.287 1.287 0 112.574 0 1.287 1.287 0 01-2.574 0zM5.467 10.422l.903 1.851-.7.341a2.496 2.496 0 01-3.545-2.717l.818-3.252a.42.42 0 00-.178-.382.422.422 0 00-.452-.041l-.844.412-.902-1.852.843-.412a2.491 2.491 0 012.576.233 2.49 2.49 0 01.989 2.389 1.105 1.105 0 01-.02.095l-.817 3.253a.42.42 0 00.178.382c.08.059.244.142.451.041l.7-.341z'/%3E%3C/g%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

#iubenda-cs-banner .iub-popover {
  position: absolute !important;
  top: 24px !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  border-radius: 4px !important;
  background-color: white !important;
  color: #222 !important;
  z-index: 2 !important;
  -webkit-box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  -webkit-transform: translateY(24px) !important;
  -ms-transform: translateY(24px) !important;
  transform: translateY(24px) !important;
  -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
  -o-transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
  z-index: 99 !important;
  pointer-events: none !important;
  overflow: hidden !important;
}

#iubenda-cs-banner .iub-popover-header {
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-pack: justify !important;
  -ms-flex-pack: justify !important;
  justify-content: space-between !important;
  z-index: 1 !important;
  -webkit-box-shadow: 0 16px 16px #FFF !important;
  box-shadow: 0 16px 16px #FFF !important;
}

#iubenda-cs-banner .iub-popover-header > * {
  padding: 24px !important;
  padding-bottom: 0 !important;
}

#iubenda-cs-banner .iub-popover-header-title {
  font-size: 18px !important;
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-header-close {
  font-size: 24px !important;
  font-weight: 300 !important;
  cursor: pointer !important;
  line-height: 1 !important;
  position: relative !important;
  top: -2px !important;
}

#iubenda-cs-banner .iub-popover-content {
  font-size: 14px !important;
  -webkit-box-flex: 1 !important;
  -ms-flex: 1 !important;
  flex: 1 !important;
  font-weight: 300 !important;
  line-height: 1.5 !important;
  position: relative !important;
}

#iubenda-cs-banner .iub-popover-content > div {
  padding: 0 24px !important;
  overflow-y: auto !important;
  height: 100% !important;
}

#iubenda-cs-banner .iub-popover-content > div:before, #iubenda-cs-banner .iub-popover-content > div:after {
  content: "";
  display: block;
  height: 24px;
}

#iubenda-cs-banner .iub-popover-content h3 {
  margin-bottom: 16px !important;
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-content p:not(:last-of-type) {
  margin-bottom: 16px !important;
}

#iubenda-cs-banner .iub-popover-content a {
  text-decoration: underline !important;
  cursor: pointer !important;
  opacity: 0.8 !important;
}

#iubenda-cs-banner .iub-popover-content b, #iubenda-cs-banner .iub-popover-content strong {
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-content i, #iubenda-cs-banner .iub-popover-content em {
  font-style: italic !important;
}

#iubenda-cs-banner .iub-popover-content:after {
  position: absolute;
  content: "";
  display: block;
  height: 24px;
  pointer-events: none;
  left: 0;
  right: 0;
  bottom: 0;
  background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white));
  background: -o-linear-gradient(top, rgba(255, 255, 255, 0) 0%, white 100%);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, white 100%);
}

#iubenda-cs-banner.iubenda-cs-default-floating .iub-popover {
  left: 8px !important;
  right: 8px !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner.iubenda-cs-default .iub-popover {
    max-width: 992px !important;
    margin: 0 auto !important;
  }
  #iubenda-cs-banner.iubenda-cs-default.iubenda-cs-top .iub-popover {
    top: 16px !important;
    bottom: -16px !important;
  }
  #iubenda-cs-banner.iubenda-cs-default.iubenda-cs-bottom .iub-popover {
    top: -16px !important;
    bottom: 16px !important;
  }
}

#iubenda-cs-banner.iub-popover-visible .iub-popover {
  opacity: 1 !important;
  visibility: visible !important;
  -webkit-transform: translateY(0) !important;
  -ms-transform: translateY(0) !important;
  transform: translateY(0) !important;
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-overlay:before {
  content: "" !important;
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  background-color: rgba(0, 0, 0, 0.5) !important;
  z-index: 1 !important;
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-center {
  -webkit-box-align: center !important;
  -ms-flex-align: center !important;
  align-items: center !important;
  -webkit-box-pack: center !important;
  -ms-flex-pack: center !important;
  justify-content: center !important;
}

#iubenda-cs-banner.iubenda-cs-top {
  -webkit-box-align: start !important;
  -ms-flex-align: start !important;
  align-items: flex-start !important;
}

#iubenda-cs-banner.iubenda-cs-bottom {
  -webkit-box-align: end !important;
  -ms-flex-align: end !important;
  align-items: flex-end !important;
}

#iubenda-cs-banner.iubenda-cs-left {
  -webkit-box-pack: start !important;
  -ms-flex-pack: start !important;
  justify-content: flex-start !important;
}

#iubenda-cs-banner.iubenda-cs-right {
  -webkit-box-pack: end !important;
  -ms-flex-pack: end !important;
  justify-content: flex-end !important;
}

#iubenda-cs-banner.iubenda-cs-visible {
  opacity: 1 !important;
  visibility: visible !important;
}

#iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container {
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-slidein .iubenda-cs-container {
  -webkit-transition: -webkit-transform 0.4s ease !important;
  transition: -webkit-transform 0.4s ease !important;
  -o-transition: transform 0.4s ease !important;
  transition: transform 0.4s ease !important;
  transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-top .iubenda-cs-container {
  -webkit-transform: translateY(-48px) !important;
  -ms-transform: translateY(-48px) !important;
  transform: translateY(-48px) !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-bottom .iubenda-cs-container {
  -webkit-transform: translateY(48px) !important;
  -ms-transform: translateY(48px) !important;
  transform: translateY(48px) !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-visible .iubenda-cs-container {
  -webkit-transform: translateY(0) !important;
  -ms-transform: translateY(0) !important;
  transform: translateY(0) !important;
}

#iubenda-cs-banner .iubenda-cs-container {
  position: relative !important;
  z-index: 2 !important;
}

#iubenda-cs-banner .iubenda-cs-brand {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  padding: 16px !important;
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
}

#iubenda-cs-banner .iubenda-cs-brand > div {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-pack: start !important;
  -ms-flex-pack: start !important;
  justify-content: flex-start !important;
}

#iubenda-cs-banner .iubenda-cs-brand img {
  max-width: 192px !important;
  max-height: 56px !important;
}

#iubenda-cs-banner .iubenda-cs-content {
  position: relative !important;
  z-index: 1 !important;
  overflow: hidden !important;
  -webkit-transition: -webkit-transform 0.4s ease !important;
  transition: -webkit-transform 0.4s ease !important;
  -o-transition: transform 0.4s ease !important;
  transition: transform 0.4s ease !important;
  transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}

#iubenda-cs-banner .iubenda-cs-rationale {
  position: relative !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
}

#iubenda-cs-banner .iubenda-cs-close-btn {
  position: absolute !important;
  top: -2px !important;
  padding: 16px !important;
  right: 0 !important;
  min-width: 48px !important;
  height: 48px !important;
  font-size: 24px !important;
  line-height: 0 !important;
  font-weight: lighter !important;
  cursor: pointer !important;
  text-align: center !important;
}

#iubenda-cs-banner .iubenda-cs-close-btn:hover {
  opacity: 0.5 !important;
}

#iubenda-cs-banner .iubenda-banner-content {
  font-weight: 300 !important;
  margin: 16px !important;
  margin-bottom: 0 !important;
  -webkit-box-flex: 1 !important;
  -ms-flex: 1 1 auto !important;
  flex: 1 1 auto !important;
  overflow-y: auto !important;
  mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
  -webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
  padding-bottom: 32px !important;
}

#iubenda-cs-banner .iubenda-banner-content-padded {
  padding-right: 32px !important;
}

#iubenda-cs-banner .iubenda-banner-content a {
  cursor: pointer !important;
  color: currentColor !important;
  opacity: 0.7 !important;
  text-decoration: underline !important;
}

#iubenda-cs-banner .iubenda-banner-content a:hover {
  opacity: 1 !important;
}

#iubenda-cs-banner #iubenda-cs-title {
  font-weight: bold !important;
  margin-bottom: 16px !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group {
  margin: 16px !important;
  z-index: 1 !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  margin-top: 0 !important;
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group > div {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner .iubenda-cs-opt-group {
    -webkit-box-align: center !important;
    -ms-flex-align: center !important;
    align-items: center !important;
    -webkit-box-pack: justify !important;
    -ms-flex-pack: justify !important;
    justify-content: space-between !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-custom {
    margin-right: auto !important;
    -ms-flex-item-align: start !important;
    align-self: start !important;
    -webkit-box-pack: start !important;
    -ms-flex-pack: start !important;
    justify-content: flex-start !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-consent {
    margin-left: auto !important;
    -ms-flex-item-align: end !important;
    align-self: end !important;
    -webkit-box-pack: end !important;
    -ms-flex-pack: end !important;
    justify-content: flex-end !important;
  }
}

@media (max-width: 639px) {
  #iubenda-cs-banner .iubenda-cs-opt-group {
    margin: 12px !important;
    -webkit-box-orient: vertical !important;
    -webkit-box-direction: normal !important;
    -ms-flex-direction: column !important;
    flex-direction: column !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-custom {
    -webkit-box-ordinal-group: 3;
    -ms-flex-order: 2;
    order: 2;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-consent {
    -webkit-box-ordinal-group: 2;
    -ms-flex-order: 1;
    order: 1;
  }
}

#iubenda-cs-banner .iubenda-cs-opt-group button {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  padding: 8px 32px !important;
  border-radius: 64px !important;
  cursor: pointer !important;
  font-weight: bold !important;
  font-size: 100% !important;
  margin-top: 4px !important;
  margin-bottom: 4px !important;
  text-align: center !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button:focus {
  opacity: 0.8 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button:hover {
  opacity: 0.5 !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner .iubenda-cs-opt-group button:not(:last-of-type) {
    margin-right: 8px !important;
  }
}

@media (max-width: 639px) {
  #iubenda-cs-banner .iubenda-cs-opt-group button {
    padding: 8px 24px !important;
    width: 100% !important;
    display: block;
    text-align: center !important;
    margin: 6px 3px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
  margin: 0 -8px 0 !important;
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
    margin: -8px -8px 0 !important;
  }
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
    margin: 0 auto !important;
    width: calc(992px - 32px) !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
    margin: 0 8px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-container {
  width: 100% !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
    width: 992px !important;
    margin: 16px auto !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-content {
    padding: 8px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand {
  margin: -8px -8px 0 !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand div {
  margin: 8px !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-container {
    width: 992px !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-top .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-bottom .iubenda-cs-container {
    width: 100% !important;
  }
}

@media (min-width: 640px) {
  #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container {
    width: 480px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group {
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group > div {
  width: 100% !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group button {
  display: block !important;
  width: 100% !important;
  text-align: center !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-custom {
  -webkit-box-ordinal-group: 3;
  -ms-flex-order: 2;
  order: 2;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-consent {
  -webkit-box-ordinal-group: 2;
  -ms-flex-order: 1;
  order: 1;
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
  -webkit-box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
  box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
  padding: 8px !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
    border-radius: 4px !important;
    margin: 16px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-container,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-content,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-rationale {
  height: 100% !important;
}

#iubenda-cs-banner.iubenda-cs-fix-height.iubenda-cs-default-floating .iubenda-cs-content {
  height: calc(100% - 32px) !important;
}

#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-brand img {
  max-width: 75% !important;
}

#iubenda-cs-banner .iubenda-cs-content {
  background-color: #000000 !important;
  color: #FFFFFF !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group {
  color: #000000 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFFFFF !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-btn-primary {
  background-color: #0073CE !important;
  color: #FFFFFF !important;
}


/*
-----------------
MOBILE SDK
-----------------
*/

.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible {
  justify-content: center!important;
  align-items: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container {
  max-height: 100%!important;
  display: flex!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content {
  height: auto!important;
  border-radius: 0!important;
  margin: 0!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
  text-align: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-close-btn {
  display: none!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
  display: flex!important;
  flex-direction: column!important;
  height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content {
  flex: 1;
  overflow-y: auto!important;
  margin: 0!important;
  padding: 16px 16px 48px!important;
  max-height: inherit!important;
  mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
  -webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
}

@media (min-width: 992px) {
  .iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content,
  .iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
    margin: 24px!important;
  }
  .iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
    width: 100% !important;
    margin: 0 !important;
  }
}

.no-banner #iubenda-cs-banner {
  display: none!important;
}

/** fix scrolling in iOS 10 **/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
  height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-top-container {
  position: relative!important;
}
.iubenda-mobile-sdk #iubenda-iframe #iab-container {
  position: absolute!important;
  top: 0!important;
  bottom: 0!important;
  left: 0!important;
  right: 0!important;
}

/** iframe **/
.iubenda-mobile-sdk #iubenda-iframe #iubenda-iframe-popup {
  height: 100%!important;
  width: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-close-btn {
  display: none!important;
}
.iubenda-mobile-sdk #iubenda-iframe {
  background-color: transparent!important;
}

/* Fix cookie policy trimming on older Android devices */
.iubenda-mobile-sdk #iubenda-iframe iframe {
  background-color: transparent!important;
  position:absolute!important;
  bottom:0!important;
  top:0!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-spinner {
  top: 50px !important;
}
/* Fix TCF widget overlapping footer in older Android devices */
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-footer {
  z-index: 9999!important;
}

config.json:

{
    "banner": {
        "acceptButtonDisplay": "true",
        "customizeButtonDisplay": "true",
        "backgroundColor": "#000000",
        "textColor": "#FFFFFF",
        "acceptButtonColor": "#FD1D1D",
        "acceptButtonCaptionColor": "white",
        "customizeButtonColor": "transparent",
        "customizeButtonCaptionColor": "#FFF"
    }
}

TCF option

Unlike the CS standard version, the TCF option is enabled by default in the SDK. If you don't run third-party personalized ads and you want to disable the TCF support, set enableTcf: false inside the config.json file.

Example:

{
    …
    enableTcf: false,
    "banner": {
        …
    }
}

Google Additional Consent Mode

Google Additional Consent Mode is disabled by default. If you want to add Google Additional Consent Mode, set googleAdditionalConsentMode": true inside the config.json file.

Example:

{
    …
    "googleAdditionalConsentMode": true,
    "banner": {
        …
    }
}

Parameters "invalidateConsentBefore" and "expireAfter"

invalidateConsentBefore Accepts a Date, and if valued, it should check if there is a preference already expressed, and if there is and the timestamp is lesser than the day of the configured date then it should not consider the preference anymore. Accepted formats: dd/MM/yyyy - yyyy/MM/dd - dd-MM-yyyy - yyyy-MM-dd - dd.MM.yyyy - yyyy.MM.dd

expireAfter If valued, number of days of the consent timestamp and the integer value of expireAfter parameter will be compared, if consent date is passed, the data on device will be cleared (Default: 360 days)

Example:

{
    …
    "invalidateConsentBefore": "08/11/2022",
    "expireAfter": 100,
        …
    }
}

Show the consent UI

Method Description
askConsent() Presents the consent UI at app launch
openPreferences() (formerly editConsent, now deprecated)
Allow users to change their consent preferences when consent has already been given. Otherwise, it opens the consent request
openPreferences(purposes: [Int]) Opens the consent request with chosen purposes selected

To present the consent UI at app launch, call IubendaCMP.askConsent(from: self) from your main ViewController's viewDidLoad method:

  • if there’s no internet connection, the call won't have any effect (provided that skipNoticeWhenOffline is not set to false); 
  • if consent has already been given, the call won't have any effect; 
  • if consent has not already been given and a connection is available, IubendaCMP.askConsent(from: self) will make the consent request appear.

Please note that if you’ve set forceConsent to false, IubendaCMP.askConsent(from: self) won’t have any effect if the user dismisses the consent request after the first launch: to show the consent UI again you’ll have to call IubendaCMP.openPreferences(from: self)

So, if your goal is to maximize consents:

  • set forceConsent to true, and 
  • call IubendaCMP.askConsent(from: self)

Otherwise, if you prefer to give the user the chance to dismiss the consent request without being prompted again whenever IubendaCMP.askConsent(from: self) is called again:

  • set forceConsent to false
  • call IubendaCMP.askConsent(from: self), but note that it won’t have any effect after the first launch
  • to ask for consent again, call IubendaCMP.openPreferences(from: self)

Notes about IubendaCMP.openPreferences():

  • if consent has not already been given, IubendaCMP.openPreferences() will open the consent request.
  • If consent has already been given, IubendaCMP.openPreferences() will allow users to change their consent preferences:
    • If "perPurposeConsent": true, it will show the per-category preferences.
    • If "perPurposeConsent": false, it will show the TCF consent preferences.
    • Otherwise, if "perPurposeConsent": false and "enableTcf": false, it will show the cookie policy.

To have complete control of when to show the consent request, you could rely entirely on IubendaCMP.openPreferences(from: self), but you’ll have to implement a way to check if consent has been given. 

Custom consent UI

You can use a custom UI to ask for user consent, without showing the provided popup; in this case, you can take advantage of the following methods of IubendaCMP:

Method Description
accept() (formerly acceptDefaultConsent, now deprecated)
Sets the default consent in background.
reject() Reject the default consent in background
openTcfPreferences() (formerly showConsentPreferences, now deprecated)
Opens a popup for setting TCF consent preferences
openTcfVendorsPreferences() (Formerly showVendorsPreferences, now deprecated)
Opens a popup for setting vendors preferences
openCookiePolicy() (Formerly showCookiePolicy, now deprecated)
Opens a popup showing the cookie policy
shouldGetConsent() Call this function to check whether you need to ask for user's consent, or if preference has already been expressed
isPurposeEnabled(id) If perPurposeConsent is true, returns true in case the user granted consent to the purpose specified in the numeric parameter id.
isConsentGiven() If perPurposeConsent is false, returns true in case the user accepted the consent, false otherwise
clearData() Clears the CMP consent signals collected in the previous user interaction
config Get Configuration initialized in AppDelegate Class
shouldGetConsentForInvalidateConsentBefore() Call this function to check whether it is necessary to ask for user consent if the timestamp is lesser than the day of the configured invalidateConsentBefore date parameter
getVendorList(version: , callback:) Return vendors list. If optional parameter version is not set, it will return latest vendors list. Takes callback parameter for success and error result
getUserPreferences() Return saved User Preferences which also contains consent
setUserPreferences() Set User Preferences which will have additions like consent, TCF data by the web service
canOpenPreferences() Returns true if there is a saved preferences
requestAttConsent() Opens ATT system-permission alert. If user rejects tracking, then clearing the preferences on device
getATTStatus() Returns the user's ATT status, which can be either "Accepted" or "Denied". Note: the statuses .denied, .notDetermined, and .restricted (as per Apple's ATT Documentation) are categorized as "Denied".
setStorePreferences() Sets the custom consent in background

Notes about IubendaCMP.accept():

  • if the user has not expressed any preferences, then it accepts everything.
  • This method should be used when developing a custom UI that doesn't use the default notice used by the SDK.

When using an open* method, you can use the notification observer (see below) to detect when the user has given consent.

Example:

import UIKit
import iubenda

class ConsentViewController: UIViewController {
        
    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(
                        self,
                        selector: #selector(consentDidChange),
                        name: NSNotification.Name.ConsentChanged,
                        object: nil
                )
    }

    @IBAction func acceptClick(_ sender: Any) {
        IubendaCMP.accept()
        dismiss(animated: true)
    }
    
    @IBAction func optionsClick(_ sender: Any) {
        IubendaCMP.openTcfPreferences(from: self)
    }
    
    @objc func consentDidChange() {
        if IubendaCMP.isConsentGiven() {
            dismiss(animated: true)
        }
    }

}

Listening for changes

If necessary, you can listen to changes of user consent through the NotificationCenter by adding an observer for NSNotification.Name.ConsentChanged:

private func observeConsentNotification() {
NotificationCenter.default.addObserver(
self,
selector: #selector(consentDidChange),
name: NSNotification.Name.ConsentChanged,
object: nil
)
}

@objc func consentDidChange() {
// ...
}

For detailed changes and events, use NSNotification.Name.OnStartupFailed, NSNotification.Name.OnError, NSNotification.Name.OnFatalError, NSNotification.Name.OnReady, NSNotification.Name.OnBannerShown, NSNotification.Name.On2ndLayerShown, NSNotification.Name.OnPreferenceExpressed.

Accessing to IAB Transparency and Consent Framework settings

You can access IAB TCF settings such as the encoded consent string, either directly as IAB specs, or through the convenience methods offered by IubendaCMP.storage.

Available settings

Method Description
consentString The consent string
googlePersonalized True if user have accepted the Google Personalized ADs option
subjectToGDPR The SubjectToGdpr setting
cmpPresent True if the CMP is present
VendorConsents The vendors binary String
PurposeConsents The purposes binary String
isPurposeConsentGivenFor(id) Returns whether the consent was given for the passed purpose id
isVendorConsentGivenFor(id) Returns whether the consent was given for the passed vendor id
consentTimestamp Returns the timestamp of the consent (since v1.3.2)
isPreferenceExpressed() Returns true if the SDK detects an already stored valid preference, "valid" means that if the preference is invalidated by invalidateConsentBefore then the method should return false

For more information about the TCF and its advanced settings, such as the ability to restrict purposes and determine the viable legal basis (consent and/or legitimate interest), read our TCF guide.

Google Ads and consent not given

As explained in their documentation ("Requirements to serve non-personalized ads" section), Google does not support the cases where consent has been denied, not even for non-personalized ad serving. As a result, no ads at all are served.

Initializing libraries that do not adhere to the IAB TCF

Third-party libraries that do not directly adhere to the IAB Transparency and Consent Framework, may need to be initialized separately depending on the consent status and preferences.

To achieve that, you can implement a change listener in your AppDelegate and call IubendaCMP.isConsentGiven(), and other methods, to evaluate the consent status.

Example:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        let config = IubendaCMPConfiguration()
        config.gdprEnabled = true
        config.googleAds = true
        config.siteId = "12345"
        config.cookiePolicyId = "252372"
        IubendaCMP.initialize(with: config)

        observeConsentNotification()
        initializeLibraries()

       return true	

       }
       private func observeConsentNotification() {	
       NotificationCenter.default.addObserver(	
       self,	
       selector: #selector(consentDidChange),	
       name: NSNotification.Name.ConsentChanged,	
       object: nil	
       )	
      }

    @objc func consentDidChange() {
        initializeLibraries()
    }

    private func initializeLibraries() {
        if (IubendaCMP.isPurposeEnabled(id: 2)) {
            // Activate libraries that use "Functionality" purpose
        }
        if (IubendaCMP.isPurposeEnabled(id: 3)) {
            // Activate libraries that use "Measurement" purpose
        }
    }
}

App Tracking Transparency (iOS 14.5+)

Starting with iOS 14.5 (April 2021), Apple requires that your app provides transparency on the data that it uses and on the third parties that will track the user in your app.

To request permission to track the user and access the device's advertising identifier, you need to use the AppTrackingTransparency (ATT) framework. You can add other permission requests in order to comply with regulations, such as ePrivacy or GDPR. However, your app must always respect the user's response to the AppTrackingTransparency prompt, even if their response to other prompts conflicts. 

Guideline 5.1.1 (iv) states: “Apps must respect the user’s permission settings and not attempt to manipulate, trick, or force people to consent to unnecessary data access.”

This includes altering a user's AppTrackingTransparency response by only respecting their response to other permission requests. You can use third-party Consent Management Platforms to add these permission requests, as long as no tracking takes place from such use.

How to meet Apple's ATT requirements and comply with law regulations

To be fully compliant with Apple’s App Tracking Transparency rules (and avoid App Store rejection) and ePrivacy/GDPR requirements, you must ask for the user permission through ATT and ask for user consent through our CMP.

To combine our CMP and Apple’s ATT, you may ask for user permission via ATT manually or you must set automaticHandlingOfAtt to true, then collect consent from the CMP if, (and if only) the user has given permission via ATT.

If you want iubenda SDK handle ATT (system-permission alert), set up NSUserTrackingUsageDescription. For more information on how to do this, refer to Apple's Documentation. Then set IubendaCMPConfiguration object's automaticHandlingOfAtt parameter to true in AppDelegate class.

Keep in mind that your app must always respect the user’s response to the AppTrackingTransparency prompt, even if their response through our CMP conflicts.

For example, If the user doesn’t provide permission via the ATT, they are assumed to also not give consent via the CMP.
In this case, you may avoid calling the askConsent method to not display the CMP and consider consent rejected for all the declared purposes. If you use automaticHandlingOfAtt = true, then askConsent method will first open Apple's ATT system-permission alert and depending on user's choice the SDK will ask Consent via pop-up

Also, if the user changes expressed preferences by denying permissions previously given via application settings, you may invoke the clearData() method, that clears the CMP consent signals collected in the previous user interaction. If you use automaticHandlingOfAtt = true, then iubenda SDK will invoke the clearData() method.
The CMP will not be resurfaced until the user changes again their preferences and provides permission via the application settings.

Offline and errors

The library requires an internet connection to display the consent popup, hence to generate or update the consent string, while the latest consent string is always available on local storage through IubendaCMP.storage.

By default, the askConsent method checks for internet connection before launching the popup activity, so, if there is no connection, the popup is not shown, but will be presented on the next launch.

If an error occurs during the consent flow, instead, an error message is shown with the option to retry or close the popup. In this case, setting forceConsent=true ensures that the popup will be presented again if no consent has been given.

Compliance with US State Privacy Laws

Our SDK supports features to manage compliance with state-specific laws. You can handle opt-out requests for the sale, sharing, and targeted advertising of personal information, in accordance with applicable state laws.

Methods for US Privacy Compliance

We introduce three methods that return an UsprOptOut object, providing the user's opt-out preference regarding their personal data. The UsprOptOut can be NOTAPPLICABLE, indicating no action needed; YES, signaling an opt-out; or NO, indicating no opt-out.

  1. getSaleOptOut(): Evaluates the opt-out status for the sale of personal information.
  2. getSharingOptOut(): Determines the opt-out status for sharing personal data with third parties.
  3. getTargetedAdvertisingOptOut(): Assesses the opt-out preference for targeted advertising.

The returned UsprOptOut value from each method provides a clear directive on how to proceed with the user's data based on their preferences and applicable laws.

  1. NOTAPPLICABLE: The user's preference is not applicable under the current circumstances or legal requirements.
  2. YES: Indicates an active opt-out by the user from the specific data processing activity.
  3. NO: Indicates that the user has not opted out, allowing the data processing activity to continue.

Consent preferences across different devices

Read this guide to learn how to implement the Consent Database API to synchronize consent preferences between sites and apps for each authenticated user.


2.9.3

  • Bugfix

2.9.1

  • Native support for cookiePolicyInOtherWindow

2.9.0

  • Downgrade deployment target to 12.0

2.8.9

  • Added setMultiThread() method

2.8.8

  • Bugfix

2.8.6

  • Added getPreferenceId method for Cpl

2.8.5

  • Added onPopupClosed to IubendaCMPCallback
  • Bugfix for preventDismissWhenLoaded

2.8.4

  • Added invalidateConsentInterval

2.8.3

  • Added NSNotification.Name.OnStartupFailed, NSNotification.Name.OnError, NSNotification.Name.OnFatalError, NSNotification.Name.OnReady, NSNotification.Name.OnBannerShown, NSNotification.Name.On2ndLayerShown, NSNotification.Name.OnPreferenceExpressed and config.fatalErrorTimeout

2.8.2

  • Added setStorePreferences() method with StorePreferences object and callback

2.8.0

  • Bugfix for PrivacyInfo.xcprivacy manifest file

2.8.0

  • Bugfix for PrivacyInfo.xcprivacy manifest file

2.7.9

  • Added setStorePreferences() method with StorePreferences object
  • Added PrivacyInfo.xcprivacy manifest file

2.7.8

  • Added getSaleOptOut(), getSharingOptOut(), getTargetedAdvertisingOptOut() methods

2.7.7

  • Bugfix for isFullScreen configuration

2.7.6

  • Added isFullScreen configuration to IubendaCMPConfiguration
  • Added openPreferences(purposes: [Int]) method to IubendaCMP

2.7.5

  • Added Swift Package Manager Support

2.7.4

  • Bugfix for getConsentRecordId()

2.7.3

  • Added support for Google's Additional Consent Mode
  • Added getGoogleAdditionalConsent() function

2.7.2

  • Bugfix for timestamp

2.7.1

  • Added useNonStandardTexts to saved data

2.6.9

  • Added support for TCF 2.2

2.6.8

  • Added automaticHandlingOfAtt, canOpenPreferences(), requestAttConsent(), getATTStatus() to iubendaCMP

2.6.7

  • Added reject() to IubendaCMP class

2.6.6

  • Bugfix for custom size

2.6.5

  • Added landscapeWidth, landscapeHeight, portraitWidth, portraitHeight to IubendaCMPConfiguration

2.6.4

  • Added getPreferencesJson to IubendaCMP class
  • Added dismissColor to IubendaCMPConfig class for customizing close button

2.6.1

  • isGooglePersonalized() is deprecated

2.6.0

  • Added proxyUrl(baseUrl) method to rewrite the URL that it uses to embed CS

2.5.9

  • Fixed saveConsent(preferencesJson,timestamp) function

2.5.8

  • Added isPreferenceExpressed() method
  • Fixed isConsentGiven() method

2.5.7

  • Added expireAfter option to config.json to compare with saved consent date and clear data if needed

2.5.6

  • Added invalidateConsentBefore Parameter to IubendaCMP class to compare with saved consent date and show consent again if needed
  • Added shouldGetConsentForInvalidateConsentBefore() function to IubendaCMP class for Custom UI call
  • Added Objective-C support for IubendaCMP.storage parameter

2.5.5

  • Added BannerPosition Parameter to IubendaCMPConfiguration class to customize Consent Banner Position (default:CENTER)

2.5.4

  • Added tvOS target and custom UI methods

2.5.3

  • Fixed expired consent string by clearing after 360 days

2.5.2

  • Allows to use forceConsent=true with enableTcf=false

2.5.1

  • Fixed an issue introduced in version 2.5.0 where enableTcf=false and forceConsent=false would not behave correctly

2.5.0

  • Added method IubendaCMP.clearData() this method allows you to clear the CMP consent signals collected whenever a user changes expressed preferences by denying permissions previously given via ATT.

2.4.0

  • Methods acceptDefaultConsent, editConsent, showConsentPreferences, showVendorsPreferences and showCookiePolicy have been renamed to accept, openPreferences, openTcfPreferences, openTcfVendorsPreferences and openCookiePolicy, respectively

2.3.6

  • Fixed an issue with external links
  • Compiled with older Swift 5.3.2

2.3.5

  • Fixed an issue with some xcode/cocoapods build configurations

2.3.2 - v2.3.4

  • Improved logging

2.3.1

  • Added isVendorConsentGivenFor(id) and isPurposeConsentGivenFor(id)

2.3.0

  • Added preventDismissWhenLoaded option
  • Updated popup size algorithm

2.2.1

  • Improved popup size on different screen sizes

2.2.0

2.1.1

  • Updated Objective-C support

2.1.0

  • Added xcframework support

2.0.0

  • Added csVersion option

1.3.2

  • Added timestamp to saveConsent() and CMPStorage

1.3.0

  • Introduced cssContent and jsonContent options

1.2.0

  • Introduced the dismissColor option to allow you to set a custom color for the close button (shown only in the first level)
  • We handle webview resizing when going back to the first layer
  • We now allow the SDK to point to the exact CS version

1.1.3

  • Bug fixes

1.1.2

  • Introduced the connection check and the skipNoticeWhenOffline option

1.1.1

  • Introduced a new default value for forceConsent

1.1.0

  • Introduced the acceptIfDismissed option

1.0.1

  • Added support for iOS 10

1.0.0

  • Initial release

Android

Add the iubenda SDK to your project

Add the following repository and dependency to your build.gradle file:

repositories {
    maven { url "https://libraries.iubenda.com/android" }
}

dependencies {
    implementation "com.iubenda:mobile-sdk:2.6.4"  
}

To automatically update the library version on build, you can set the dependency as:

  • "com.iubenda:mobile-sdk:2.6.+" for trivial updates
  • "com.iubenda:mobile-sdk:2.+" for minor updates
  • "com.iubenda:mobile-sdk:+" for all updates

Application class

Create a new class that extends android.app.Application and set it in the app's manifest, if you don't already have such class in your project

<application
            android:name=".App"
            ...>
        ...
</application>

Initialize the SDK

In your Application class, inside the onCreate method, create a configuration object with your settings and call IubendaCMP.initialize()

@Override
    public void onCreate() {
        super.onCreate();

        IubendaCMPConfig config = IubendaCMPConfig.builder()
                .gdprEnabled(true)
                .siteId("12341234")
                .cookiePolicyId("56785678")
                .googleAds(true)
                .cssResource(R.raw.custom_style)
                .jsonResource(R.raw.config_json)
                .applyStyles(true)
                .build();
        IubendaCMP.initialize(this, config);
    }

Settings

Setting Default Description
csVersion current Allows to define which version of the Privacy Controls and Cookie Solution to use. Accepted values are "current", "beta", "stable" or a specific version number
gdprEnabled false Proxy for IAB TCF's IABConsent_SubjectToGDPR setting. If false, Mediation SDK can run mediation across all ad network SDKs. Otherwise, Mediation SDK will run mediation only among the ad network SDKs that are GDPR ready
siteId   Id of the customer's site on iubenda
cookiePolicyId   Id of the customer's Cookie Policy on iubenda
forceConsent true If true, the consent screen will be presented to the user until consent is granted, helping you to maximize consents. If false, askConsent() won't have any effect if the user dismisses the consent request after the first launch
googleAds false True to enable consent management for Google personalized ADs
jsonResource   Raw resource (src/main/res/raw) to pass custom configuration to the consent UI
jsonContent   Same as above, but set as a string
jsonFile   Same as above, but set as a file
cssResource   Raw resource (src/main/res/raw) for adding custom CSS style to the consent UI. Custom CSS can be applied on top of the standard one (applyStyles=true) or by itself (applyStyles=false)
cssContent   Same as above, but set as a string
cssFile   Same as above, but set as a file
cssUrl   Same as above, but set as a Url String
applyStyles true If true the standard css style is applied to the consent UI
acceptIfDismissed false If true and the JS is ready, when dismissing the popup, the notice is accepted
preventDismissWhenLoaded false If true, once the popup is fully loaded, it's not possible to dismiss it without expressing a preference
skipNoticeWhenOffline false If enabled, askConsent() will not show the popup if no internet connection is detected
bannerPosition center Set position of Consent Banner Pop-Up to top, bottom or center
dismissColor   Allows to set a custom color for the close button (×). If not set, the default color will be used
landscapeHeight Set custom height for the first layer in landscape mode
landscapeWidth Set custom width for the first layer in landscape mode
portraitHeight Set custom height for the first layer in portrait mode
portraitWidth Set custom width for the first layer in portrait mode
isFullScreen false Set full width and height for all layers
fatalErrorTimeout 3000 Set timeout(ms) to get fatal error with NSNotification.Name.OnFatalError
invalidateConsentInterval Dates(dd/MM/yyyy - yyyy/MM/dd - dd-MM-yyyy - yyyy-MM-dd - dd.MM.yyyy -yyyy.MM.dd) Accepts a startDate and endDate, and if valued, it should check if there is a preference alreadyexpressed, and if there is and the timestamp is between configured dates then itshould not consider the preference anymore

Configuration example with custom CSS

IubendaCMPConfig config = IubendaCMPConfig.builder()
.gdprEnabled(true)
.siteId("12341234")
.cookiePolicyId("56785678")
.forceConsent(true)
.googleAds(true)
.applyStyles(false)
.cssResource(R.raw.custom_style)
.jsonResource(R.raw.config)
.acceptIfDismissed(true)
.build();

custom_style.css:

/***************************************************************************
// * iubenda Privacy Controls and Cookie Solution                                               *
// *                                                                       *
// * Sample CSS v2.2.6                                                     *
// *                                                                       *
// * (c) 2019 iubenda srl <info@iubenda.com>                               *
// * All Rights Reserved.                                                  *
// *                                                                       *
// *************************************************************************
//
// CHANGELOG
//
// 2.2.7 - 2020-06-18
// - Fix container breaking on mobile.
//
// 2.2.6 - 2020-05-27
// - Hide scroll bar visibility.
// - Fix brand image height on mobile.
//
// 2.2.5 - 2020-05-06
// - Fix IE flex content.
// - Fix text overflow.
//
// 2.2.3 - 2020-04-21
// - Cursor pointer
// - Button text ellipsis
// - Equalize shadows top/bottom modal bar
//
// 2.2.2 - 2020-04-06
// - Add pointer events auto to the overlay
//
// 2.2.1 - 2020-03-06
// - Introduce popover.
//
// 2.2.0 - 2019-11-07
// - Introduce brand customizations
//
// 2.1.5 - 2019-11-22
// - Add class to go fullscreen.
//
// 2.1.4 - 2020-03-25
// - Make the banner shadow darker
//
// 2.1.3 - 2020-01-22
// - Fix banner not appearing on iPhone.
//
// 2.1.2 - 2019-11-07
// - Fix buttons height on IE.
//
// 2.1.1 - 2019-10-30
// - Fix buttons margin and customize-advertising-tracking button width on mobile.
//
// 2.1.0 - 2019-10-24
// - Introduce text overflowing mask and style for reject button.
//
// 2.0.4 - 2019-06-24
// - Convert close button width to min-width
//
// 2.0.3 - 2019-05-24
// - Introduce new positioning options
//
// 2.0.2 - 2019-05-02
// - Fix text spaces when custom content
//
// 2.0.1 - 2019-04-09
// - Add rules for buttons group
//
// 2.0.0 - 2019-02-01
// - Full rewrite to accommodate the new markup
//
// 0.0.1 - 2015-04-01
// - First implementation of the sample CSS
*/

/*
-----------------
IMPORTANT: Changing the following values may prevent the notice from being displayed properly.
-----------------
*/
#iubenda-cs-banner {
  font-size: 15px !important;
  background: none !important;
  line-height: 1.4 !important;
  position: fixed !important;
  z-index: 99999998 !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  border: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  will-change: opacity, visibility;
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  -webkit-transition: opacity 0.4s ease, visibility 0.4s ease !important;
  -o-transition: opacity 0.4s ease, visibility 0.4s ease !important;
  transition: opacity 0.4s ease, visibility 0.4s ease !important;
  /* default */
}

#iubenda-cs-banner [class*=" iub"],
#iubenda-cs-banner [class^=iub],
#iubenda-cs-banner .iubenda-banner-content:not(.iubenda-custom-content) * {
  font-size: 100% !important;
  width: auto !important;
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  background: none !important;
  -webkit-box-sizing: border-box !important;
  box-sizing: border-box !important;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
  -webkit-backface-visibility: hidden !important;
  backface-visibility: hidden !important;
  font-family: -apple-system, sans-serif !important;
  text-decoration: none !important;
  color: currentColor !important;
  background-attachment: scroll !important;
  background-color: transparent !important;
  background-image: none !important;
  background-position: 0 0 !important;
  background-repeat: repeat !important;
  border: 0 !important;
  border-color: #000 !important;
  border-color: currentColor !important;
  border-radius: 0 !important;
  border-style: none !important;
  border-width: medium !important;
  bottom: auto !important;
  clear: none !important;
  clip: auto !important;
  counter-increment: none !important;
  counter-reset: none !important;
  direction: inherit !important;
  float: none !important;
  font-style: inherit !important;
  font-variant: normal !important;
  font-weight: inherit !important;
  height: auto !important;
  left: auto !important;
  letter-spacing: normal !important;
  line-height: inherit !important;
  list-style-type: inherit !important;
  list-style-position: outside !important;
  list-style-image: none !important;
  margin: 0 !important;
  max-height: none !important;
  max-width: none !important;
  min-height: 0 !important;
  min-width: 0 !important;
  opacity: 1;
  outline: 0 !important;
  overflow: visible !important;
  padding: 0 !important;
  position: static !important;
  quotes: "" "" !important;
  right: auto !important;
  table-layout: auto !important;
  text-align: left !important;
  text-indent: 0 !important;
  text-transform: none !important;
  top: auto !important;
  unicode-bidi: normal !important;
  vertical-align: baseline !important;
  visibility: inherit !important;
  white-space: normal !important;
  width: auto !important;
  word-spacing: normal !important;
  z-index: auto !important;
  background-origin: padding-box !important;
  background-origin: padding-box !important;
  background-clip: border-box !important;
  background-size: auto !important;
  -o-border-image: none !important;
  border-image: none !important;
  border-radius: 0 !important;
  border-radius: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  -webkit-column-count: auto !important;
  -moz-column-count: auto !important;
  column-count: auto !important;
  -webkit-column-gap: normal !important;
  -moz-column-gap: normal !important;
  column-gap: normal !important;
  -webkit-column-rule: medium none #000 !important;
  -moz-column-rule: medium none #000 !important;
  column-rule: medium none #000 !important;
  -webkit-column-span: none !important;
  -moz-column-span: none !important;
  column-span: none !important;
  -webkit-column-width: auto !important;
  -moz-column-width: auto !important;
  column-width: auto !important;
  -webkit-font-feature-settings: normal !important;
  font-feature-settings: normal !important;
  overflow-x: visible !important;
  overflow-y: visible !important;
  -webkit-hyphens: manual !important;
  -ms-hyphens: manual !important;
  hyphens: manual !important;
  -webkit-perspective: none !important;
  perspective: none !important;
  -webkit-perspective-origin: 50% 50% !important;
  perspective-origin: 50% 50% !important;
  text-shadow: none !important;
  -webkit-transition: all 0s ease 0s !important;
  -o-transition: all 0s ease 0s !important;
  transition: all 0s ease 0s !important;
  -webkit-transform: none !important;
  -ms-transform: none !important;
  transform: none !important;
  -webkit-transform-origin: 50% 50% !important;
  -ms-transform-origin: 50% 50% !important;
  transform-origin: 50% 50% !important;
  -webkit-transform-style: flat !important;
  transform-style: flat !important;
  word-break: normal !important;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}

#iubenda-cs-banner .iub-popover-trigger {
  display: inline-block !important;
  text-decoration: underline !important;
  -webkit-text-decoration-style: dashed !important;
  text-decoration-style: dashed !important;
  position: relative !important;
  margin-right: 16px !important;
  cursor: pointer !important;
  line-height: 1.25 !important;
}

#iubenda-cs-banner .iub-popover-trigger:before, #iubenda-cs-banner .iub-popover-trigger:after {
  content: "";
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 12px;
  vertical-align: middle;
  background-size: 4px;
  position: absolute;
  left: calc(100% + 2px);
  top: 3px;
}

#iubenda-cs-banner .iub-popover-trigger:before {
  background-color: currentColor;
  opacity: 0.35;
}

#iubenda-cs-banner .iub-popover-trigger:after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='13' viewBox='0 0 7 13'%3E%3Cg fill='%23FFF' fill-rule='evenodd'%3E%3Cpath d='M2.779 1.288a1.287 1.287 0 112.574 0 1.287 1.287 0 01-2.574 0zM5.467 10.422l.903 1.851-.7.341a2.496 2.496 0 01-3.545-2.717l.818-3.252a.42.42 0 00-.178-.382.422.422 0 00-.452-.041l-.844.412-.902-1.852.843-.412a2.491 2.491 0 012.576.233 2.49 2.49 0 01.989 2.389 1.105 1.105 0 01-.02.095l-.817 3.253a.42.42 0 00.178.382c.08.059.244.142.451.041l.7-.341z'/%3E%3C/g%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

#iubenda-cs-banner .iub-popover {
  position: absolute !important;
  top: 24px !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  border-radius: 4px !important;
  background-color: white !important;
  color: #222 !important;
  z-index: 2 !important;
  -webkit-box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
  box-shadow: 0 0 32px rgba(0, 0, 0, 0.1) !important;
  opacity: 0 !important;
  visibility: hidden !important;
  -webkit-transform: translateY(24px) !important;
  -ms-transform: translateY(24px) !important;
  transform: translateY(24px) !important;
  -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s ease !important;
  -o-transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease !important;
  transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
  z-index: 99 !important;
  pointer-events: none !important;
  overflow: hidden !important;
}

#iubenda-cs-banner .iub-popover-header {
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-pack: justify !important;
  -ms-flex-pack: justify !important;
  justify-content: space-between !important;
  z-index: 1 !important;
  -webkit-box-shadow: 0 16px 16px #FFF !important;
  box-shadow: 0 16px 16px #FFF !important;
}

#iubenda-cs-banner .iub-popover-header > * {
  padding: 24px !important;
  padding-bottom: 0 !important;
}

#iubenda-cs-banner .iub-popover-header-title {
  font-size: 18px !important;
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-header-close {
  font-size: 24px !important;
  font-weight: 300 !important;
  cursor: pointer !important;
  line-height: 1 !important;
  position: relative !important;
  top: -2px !important;
}

#iubenda-cs-banner .iub-popover-content {
  font-size: 14px !important;
  -webkit-box-flex: 1 !important;
  -ms-flex: 1 !important;
  flex: 1 !important;
  font-weight: 300 !important;
  line-height: 1.5 !important;
  position: relative !important;
}

#iubenda-cs-banner .iub-popover-content > div {
  padding: 0 24px !important;
  overflow-y: auto !important;
  height: 100% !important;
}

#iubenda-cs-banner .iub-popover-content > div:before, #iubenda-cs-banner .iub-popover-content > div:after {
  content: "";
  display: block;
  height: 24px;
}

#iubenda-cs-banner .iub-popover-content h3 {
  margin-bottom: 16px !important;
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-content p:not(:last-of-type) {
  margin-bottom: 16px !important;
}

#iubenda-cs-banner .iub-popover-content a {
  text-decoration: underline !important;
  cursor: pointer !important;
  opacity: 0.8 !important;
}

#iubenda-cs-banner .iub-popover-content b, #iubenda-cs-banner .iub-popover-content strong {
  font-weight: bold !important;
}

#iubenda-cs-banner .iub-popover-content i, #iubenda-cs-banner .iub-popover-content em {
  font-style: italic !important;
}

#iubenda-cs-banner .iub-popover-content:after {
  position: absolute;
  content: "";
  display: block;
  height: 24px;
  pointer-events: none;
  left: 0;
  right: 0;
  bottom: 0;
  background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(white));
  background: -o-linear-gradient(top, rgba(255, 255, 255, 0) 0%, white 100%);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, white 100%);
}

#iubenda-cs-banner.iubenda-cs-default-floating .iub-popover {
  left: 8px !important;
  right: 8px !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner.iubenda-cs-default .iub-popover {
    max-width: 992px !important;
    margin: 0 auto !important;
  }
  #iubenda-cs-banner.iubenda-cs-default.iubenda-cs-top .iub-popover {
    top: 16px !important;
    bottom: -16px !important;
  }
  #iubenda-cs-banner.iubenda-cs-default.iubenda-cs-bottom .iub-popover {
    top: -16px !important;
    bottom: 16px !important;
  }
}

#iubenda-cs-banner.iub-popover-visible .iub-popover {
  opacity: 1 !important;
  visibility: visible !important;
  -webkit-transform: translateY(0) !important;
  -ms-transform: translateY(0) !important;
  transform: translateY(0) !important;
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-overlay:before {
  content: "" !important;
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  background-color: rgba(0, 0, 0, 0.5) !important;
  z-index: 1 !important;
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-center {
  -webkit-box-align: center !important;
  -ms-flex-align: center !important;
  align-items: center !important;
  -webkit-box-pack: center !important;
  -ms-flex-pack: center !important;
  justify-content: center !important;
}

#iubenda-cs-banner.iubenda-cs-top {
  -webkit-box-align: start !important;
  -ms-flex-align: start !important;
  align-items: flex-start !important;
}

#iubenda-cs-banner.iubenda-cs-bottom {
  -webkit-box-align: end !important;
  -ms-flex-align: end !important;
  align-items: flex-end !important;
}

#iubenda-cs-banner.iubenda-cs-left {
  -webkit-box-pack: start !important;
  -ms-flex-pack: start !important;
  justify-content: flex-start !important;
}

#iubenda-cs-banner.iubenda-cs-right {
  -webkit-box-pack: end !important;
  -ms-flex-pack: end !important;
  justify-content: flex-end !important;
}

#iubenda-cs-banner.iubenda-cs-visible {
  opacity: 1 !important;
  visibility: visible !important;
}

#iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container {
  pointer-events: auto !important;
}

#iubenda-cs-banner.iubenda-cs-slidein .iubenda-cs-container {
  -webkit-transition: -webkit-transform 0.4s ease !important;
  transition: -webkit-transform 0.4s ease !important;
  -o-transition: transform 0.4s ease !important;
  transition: transform 0.4s ease !important;
  transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-top .iubenda-cs-container {
  -webkit-transform: translateY(-48px) !important;
  -ms-transform: translateY(-48px) !important;
  transform: translateY(-48px) !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-bottom .iubenda-cs-container {
  -webkit-transform: translateY(48px) !important;
  -ms-transform: translateY(48px) !important;
  transform: translateY(48px) !important;
}

#iubenda-cs-banner.iubenda-cs-slidein.iubenda-cs-visible .iubenda-cs-container {
  -webkit-transform: translateY(0) !important;
  -ms-transform: translateY(0) !important;
  transform: translateY(0) !important;
}

#iubenda-cs-banner .iubenda-cs-container {
  position: relative !important;
  z-index: 2 !important;
}

#iubenda-cs-banner .iubenda-cs-brand {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  padding: 16px !important;
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
}

#iubenda-cs-banner .iubenda-cs-brand > div {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-pack: start !important;
  -ms-flex-pack: start !important;
  justify-content: flex-start !important;
}

#iubenda-cs-banner .iubenda-cs-brand img {
  max-width: 192px !important;
  max-height: 56px !important;
}

#iubenda-cs-banner .iubenda-cs-content {
  position: relative !important;
  z-index: 1 !important;
  overflow: hidden !important;
  -webkit-transition: -webkit-transform 0.4s ease !important;
  transition: -webkit-transform 0.4s ease !important;
  -o-transition: transform 0.4s ease !important;
  transition: transform 0.4s ease !important;
  transition: transform 0.4s ease, -webkit-transform 0.4s ease !important;
}

#iubenda-cs-banner .iubenda-cs-rationale {
  position: relative !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
}

#iubenda-cs-banner .iubenda-cs-close-btn {
  position: absolute !important;
  top: -2px !important;
  padding: 16px !important;
  right: 0 !important;
  min-width: 48px !important;
  height: 48px !important;
  font-size: 24px !important;
  line-height: 0 !important;
  font-weight: lighter !important;
  cursor: pointer !important;
  text-align: center !important;
}

#iubenda-cs-banner .iubenda-cs-close-btn:hover {
  opacity: 0.5 !important;
}

#iubenda-cs-banner .iubenda-banner-content {
  font-weight: 300 !important;
  margin: 16px !important;
  margin-bottom: 0 !important;
  -webkit-box-flex: 1 !important;
  -ms-flex: 1 1 auto !important;
  flex: 1 1 auto !important;
  overflow-y: auto !important;
  mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
  -webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 16px) !important;
  padding-bottom: 32px !important;
}

#iubenda-cs-banner .iubenda-banner-content-padded {
  padding-right: 32px !important;
}

#iubenda-cs-banner .iubenda-banner-content a {
  cursor: pointer !important;
  color: currentColor !important;
  opacity: 0.7 !important;
  text-decoration: underline !important;
}

#iubenda-cs-banner .iubenda-banner-content a:hover {
  opacity: 1 !important;
}

#iubenda-cs-banner #iubenda-cs-title {
  font-weight: bold !important;
  margin-bottom: 16px !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group {
  margin: 16px !important;
  z-index: 1 !important;
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
  margin-top: 0 !important;
  -ms-flex-negative: 0 !important;
  flex-shrink: 0 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group > div {
  display: -webkit-box !important;
  display: -ms-flexbox !important;
  display: flex !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner .iubenda-cs-opt-group {
    -webkit-box-align: center !important;
    -ms-flex-align: center !important;
    align-items: center !important;
    -webkit-box-pack: justify !important;
    -ms-flex-pack: justify !important;
    justify-content: space-between !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-custom {
    margin-right: auto !important;
    -ms-flex-item-align: start !important;
    align-self: start !important;
    -webkit-box-pack: start !important;
    -ms-flex-pack: start !important;
    justify-content: flex-start !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-consent {
    margin-left: auto !important;
    -ms-flex-item-align: end !important;
    align-self: end !important;
    -webkit-box-pack: end !important;
    -ms-flex-pack: end !important;
    justify-content: flex-end !important;
  }
}

@media (max-width: 639px) {
  #iubenda-cs-banner .iubenda-cs-opt-group {
    margin: 12px !important;
    -webkit-box-orient: vertical !important;
    -webkit-box-direction: normal !important;
    -ms-flex-direction: column !important;
    flex-direction: column !important;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-custom {
    -webkit-box-ordinal-group: 3;
    -ms-flex-order: 2;
    order: 2;
  }
  #iubenda-cs-banner .iubenda-cs-opt-group-consent {
    -webkit-box-ordinal-group: 2;
    -ms-flex-order: 1;
    order: 1;
  }
}

#iubenda-cs-banner .iubenda-cs-opt-group button {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  padding: 8px 32px !important;
  border-radius: 64px !important;
  cursor: pointer !important;
  font-weight: bold !important;
  font-size: 100% !important;
  margin-top: 4px !important;
  margin-bottom: 4px !important;
  text-align: center !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button:focus {
  opacity: 0.8 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button:hover {
  opacity: 0.5 !important;
}

@media (min-width: 640px) {
  #iubenda-cs-banner .iubenda-cs-opt-group button:not(:last-of-type) {
    margin-right: 8px !important;
  }
}

@media (max-width: 639px) {
  #iubenda-cs-banner .iubenda-cs-opt-group button {
    padding: 8px 24px !important;
    width: 100% !important;
    display: block;
    text-align: center !important;
    margin: 6px 3px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
  margin: 0 -8px 0 !important;
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand {
    margin: -8px -8px 0 !important;
  }
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
    margin: 0 auto !important;
    width: calc(992px - 32px) !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-brand div {
    margin: 0 8px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default .iubenda-cs-container {
  width: 100% !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
    width: 992px !important;
    margin: 16px auto !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-content {
    padding: 8px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand {
  margin: -8px -8px 0 !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-brand div {
  margin: 8px !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-container {
    width: 992px !important;
  }
}

@media (max-width: 991px) {
  #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-top .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center.iubenda-cs-bottom .iubenda-cs-container {
    width: 100% !important;
  }
}

@media (min-width: 640px) {
  #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-container, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-container {
    width: 480px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group {
  -webkit-box-orient: vertical !important;
  -webkit-box-direction: normal !important;
  -ms-flex-direction: column !important;
  flex-direction: column !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group > div, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group > div {
  width: 100% !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group button, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group button {
  display: block !important;
  width: 100% !important;
  text-align: center !important;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-custom, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-custom {
  -webkit-box-ordinal-group: 3;
  -ms-flex-order: 2;
  order: 2;
}

#iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-top):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating:not(.iubenda-cs-bottom):not(.iubenda-cs-center) .iubenda-cs-opt-group-consent, #iubenda-cs-banner.iubenda-cs-default-floating.iubenda-cs-center:not(.iubenda-cs-top):not(.iubenda-cs-bottom) .iubenda-cs-opt-group-consent {
  -webkit-box-ordinal-group: 2;
  -ms-flex-order: 1;
  order: 1;
}

#iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
  -webkit-box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
  box-shadow: 0 8px 48px rgba(0, 0, 0, 0.15) !important;
  padding: 8px !important;
}

@media (min-width: 992px) {
  #iubenda-cs-banner.iubenda-cs-default-floating .iubenda-cs-content {
    border-radius: 4px !important;
    margin: 16px !important;
  }
}

#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-container,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-content,
#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-rationale {
  height: 100% !important;
}

#iubenda-cs-banner.iubenda-cs-fix-height.iubenda-cs-default-floating .iubenda-cs-content {
  height: calc(100% - 32px) !important;
}

#iubenda-cs-banner.iubenda-cs-fix-height .iubenda-cs-brand img {
  max-width: 75% !important;
}

#iubenda-cs-banner .iubenda-cs-content {
  background-color: #000000 !important;
  color: #FFFFFF !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group {
  color: #000000 !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFFFFF !important;
}

#iubenda-cs-banner .iubenda-cs-opt-group button.iubenda-cs-btn-primary {
  background-color: #0073CE !important;
  color: #FFFFFF !important;
}


/*
-----------------
MOBILE SDK
-----------------
*/

.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible {
  justify-content: center!important;
  align-items: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container {
  max-height: 100%!important;
  display: flex!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content {
  height: auto!important;
  border-radius: 0!important;
  margin: 0!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
  text-align: center!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-close-btn {
  display: none!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
  display: flex!important;
  flex-direction: column!important;
  height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content {
  flex: 1;
  overflow-y: auto!important;
  margin: 0!important;
  padding: 16px 16px 48px!important;
  max-height: inherit!important;
  mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
  -webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 15%) !important;
}

@media (min-width: 992px) {
  .iubenda-mobile-sdk #iubenda-cs-banner .iubenda-banner-content,
  .iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-opt-group {
    margin: 24px!important;
  }
  .iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-default .iubenda-cs-rationale {
    width: 100% !important;
    margin: 0 !important;
  }
}

.no-banner #iubenda-cs-banner {
  display: none!important;
}

/** fix scrolling in iOS 10 **/
.iubenda-mobile-sdk #iubenda-cs-banner.iubenda-cs-visible .iubenda-cs-container,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-container .iubenda-cs-content,
.iubenda-mobile-sdk #iubenda-cs-banner .iubenda-cs-rationale {
  height: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-top-container {
  position: relative!important;
}
.iubenda-mobile-sdk #iubenda-iframe #iab-container {
  position: absolute!important;
  top: 0!important;
  bottom: 0!important;
  left: 0!important;
  right: 0!important;
}

/** iframe **/
.iubenda-mobile-sdk #iubenda-iframe #iubenda-iframe-popup {
  height: 100%!important;
  width: 100%!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-close-btn {
  display: none!important;
}
.iubenda-mobile-sdk #iubenda-iframe {
  background-color: transparent!important;
}

/* Fix cookie policy trimming on older Android devices */
.iubenda-mobile-sdk #iubenda-iframe iframe {
  background-color: transparent!important;
  position:absolute!important;
  bottom:0!important;
  top:0!important;
}
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-spinner {
  top: 50px !important;
}
/* Fix TCF widget overlapping footer in older Android devices */
.iubenda-mobile-sdk #iubenda-iframe .iubenda-iframe-footer {
  z-index: 9999!important;
}

config.json:

{
    "banner": {
        "acceptButtonDisplay": "true",
        "customizeButtonDisplay": "true",
        "backgroundColor": "#000000",
        "textColor": "#FFFFFF",
        "acceptButtonColor": "#FD1D1D",
        "acceptButtonCaptionColor": "white",
        "customizeButtonColor": "transparent",
        "customizeButtonCaptionColor": "#FFF"
    }
}

TCF option

Unlike the CS standard version, the TCF option is enabled by default in the SDK. If you don't run third-party personalized ads and you want to disable the TCF support, set enableTcf: false inside the config.json file.

Example:

{
    …
    enableTcf: false,
    "banner": {
        …
    }
}

Google Additional Consent Mode

Google Additional Consent Mode is disabled by default. If you want to add Google Additional Consent Mode, set googleAdditionalConsentMode": true inside the config.json file.

Example:

{
    …
    "googleAdditionalConsentMode": true,
    "banner": {
        …
    }
}

Parameters "invalidateConsentBefore" and "expireAfter"

invalidateConsentBefore Accepts a Date, and if valued, it should check if there is a preference already expressed, and if there is and the timestamp is lesser than the day of the configured date then it should not consider the preference anymore. Accepted formats: dd/MM/yyyy - yyyy/MM/dd - dd-MM-yyyy - yyyy-MM-dd - dd.MM.yyyy - yyyy.MM.dd

expireAfter If valued, number of days of the consent timestamp and the integer value of expireAfter parameter will be compared, if consent date is passed, the data on device will be cleared (Default: 360 days)

Example:

{
    …
    "invalidateConsentBefore": "08/11/2022",
    "expireAfter": 100,
        …
    }
}

Show the consent UI

Method Description
askConsent() Presents the consent UI at app launch
openPreferences() (formerly editConsent, now deprecated)
Allow users to change their consent preferences when consent has already been given. Otherwise, it opens the consent request
openPreferences(Context context, ArrayList purposes) (formerly editConsent, now deprecated)
Opens the consent request with chosen purposes selected

To present the consent UI at app launch, call IubendaCMP.askConsent() in you main activity's onCreate method:

  • if there’s no internet connection, the call won't have any effect (provided that skipNoticeWhenOffline is not set to false); 
  • if consent has already been given, the call won't have any effect; 
  • if consent has not already been given and a connection is available, IubendaCMP.askConsent() will make the consent request appear.

Please note that if you’ve set forceConsent to false, IubendaCMP.askConsent() won’t have any effect if the user dismisses the consent request after the first launch: to show the consent UI again you’ll have to call IubendaCMP.openPreferences()

Example:

public class DemoActivity extends AppCompatActivity  {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // automatically show the consent popup when needed
        IubendaCMP.askConsent(this);
    }
}

So, if your goal is to maximize consents:

  • set forceConsent to true, and 
  • call IubendaCMP.askConsent()

Otherwise, if you prefer to give the user the chance to dismiss the consent request without being prompted again whenever IubendaCMP.askConsent() is called again:

  • set forceConsent to false
  • call IubendaCMP.askConsent(), but note that it won’t have any effect after the first launch
  • to ask for consent again, call IubendaCMP.openPreferences()

Notes about IubendaCMP.openPreferences():

  • if consent has not already been given, IubendaCMP.openPreferences() will open the consent request.
  • If consent has already been given, IubendaCMP.openPreferences() will allow users to change their consent preferences:
    • If "perPurposeConsent": true, it will show the per-category preferences.
    • If "perPurposeConsent": false, it will show the TCF consent preferences.
    • Otherwise, if "perPurposeConsent": false and "enableTcf": false, it will show the cookie policy.

To have complete control of when to show the consent request, you could rely entirely on IubendaCMP.openPreferences(), but you’ll have to implement a way to check if consent has been given. 

Custom consent UI

You can use a custom activity to ask for user consent, without showing the provided popup; in this case, you can take advantage of the following methods of IubendaCMP:

Method Description
accept() (formerly acceptDefaultConsent, now deprecated)
Sets the default consent in background.
reject() Reject the default consent in background
openTcfPreferences() (formerly showConsentPreferences, now deprecated)
Opens a popup for setting TCF consent preferences
openTcfVendorsPreferences() (Formerly showVendorsPreferences, now deprecated)
Opens a popup for setting vendors preferences
openCookiePolicy() (Formerly showCookiePolicy, now deprecated)
Opens a popup showing the cookie policy
shouldGetConsent() Call this function to check whether you need to ask for user's consent, or if preference has already been expressed
getConfig() Get Configuration initialized in Application Class
isInitialized() If true iubenda SDK is initialized successfully
isPurposeEnabled(id) If perPurposeConsent is true, returns true in case the user granted consent to the purpose specified in the numeric parameter id.
isConsentGiven() If perPurposeConsent is false, returns true in case the user accepted the consent, false otherwise
clearData() Clears the CMP consent signals collected in the previous user interaction
shouldGetConsentForInvalidateConsentBefore() Call this function to check whether it is necessary to ask for user consent if the timestamp is lesser than the day of the configured invalidateConsentBefore date parameter
getVendorList() Return vendors list. If optional parameter version is not set, it will return latest vendors list. Takes CustomUIListener parameter for success and error result
getUserPreferences() Return saved User Preferences which also contains consent
setUserPreferences() Set User Preferences which will have additions like consent, TCF data by the web service
setStorePreferences() Sets the custom consent in background

Notes about IubendaCMP.accept():

  • if the user has not expressed any preferences, then it accepts everything.
  • This method should be used when developing a custom UI that doesn't use the default notice used by the SDK.

Also, it is advised to add a listener to detect when the user has given consent when calling the open* methods.

Example:

public class ConsentActivity extends Activity implements IubendaCMPChangeListener {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_consent);
    }
    
    @Override
    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        IubendaCMP.registerChangeListener(this);
    }

    @Override
    protected void onDestroy() {
        IubendaCMP.unregisterChangeListener(this);
        super.onDestroy();
    }

    public void onAcceptClick(View view) {
        IubendaCMP.accept();
        finish();
    }
    
    public void onOptionsClick(View view) {
        IubendaCMP.openTcfPreferences(this);
    }

    @Override
    public void onConsentChanged() {
        if (IubendaCMP.isConsentGiven())
            finish();
    }
}

Listening for changes

If necessary, you can listen to changes of user consent by registering a listener, which is achieved by calling IubendaCMP.registerChangeListener(), for example inside the onCreate method of your Application or Activity.

You can remove a listener by calling IubendaCMP.unregisterChangeListener(), for example inside onDestroy(). For detailed changes and events, use IubendaCMP.registerCallback() and IubendaCMP.unregisterCallback(). Listeners are captured as a weak reference.

Listeners are captured as a weak reference.

Accessing to IAB Transparency and Consent Framework settings

You can access to the IAB TCF settings, such as the encoded consent string, either directly as IAB specs or through the convenience methods offered by a CMPStorage object. You can get an instance of the storage by calling IubendaCMP.getStorage().

Available settings Getters

Method Description
getConsentString() Return the consent string
getSubjectToGdpr() Returns the SubjectToGdpr setting
getCmpPresentValue() Returns true if the CMP is present
getVendorsString() Returns the vendors binary String
getPurposesString() Returns the purposes binary String
isPurposeConsentGivenForPurposeId(purposeId) Returns whether the consent was given for the passed purpose id
isVendorConsentGivenForVendorId(vendorId) Returns whether the consent was given for the passed vendor id
getConsentTimestamp Returns the timestamp of the consent (since v1.3.2)
isPreferenceExpressed() Returns true if the SDK detects an already stored valid preference, "valid" means that if the preference is invalidated by invalidateConsentBefore then the method should return false

For more information about the TCF and its advanced settings, such as the ability to restrict purposes and determine the viable legal basis (consent and/or legitimate interest), read our TCF guide.

Google Ads and consent not given

As explained in their documentation ("Requirements to serve non-personalized ads" section), Google does not support the cases where consent has been denied, not even for non-personalized ad serving. As a result, no ads at all are served.

Initializing libraries without IAB TCF support

Third-party libraries that do not directly adhere to the IAB Transparency and Consent Framework, may need to be initialized separately depending on the consent status and preferences.

To achieve that, you can implement a change listener in your Application class and call IubendaCMP.isConsentGiven(), and other methods, to evaluate the consent status.

Example:

public class MyApplication extends Application implements IubendaCMPChangeListener {

    @Override
    public void onCreate() {
        super.onCreate();

        IubendaCMPConfig config = IubendaCMPConfig.builder()
                .gdprEnabled(true)
                .siteId("12345678")
                .cookiePolicyId("ABCDE")
                .googleAds(true)
                .build();
        IubendaCMP.initialize(this, config);
        IubendaCMP.registerChangeListener(this);

        initializeLibraries();
    }

    private void initializeLibraries() {
        if(IubendaCMP.isPurposeEnabled(2)){
            // Activate libraries that use "Functionality" purpose
        }
        if(IubendaCMP.isPurposeEnabled(3)){
            // Activate libraries that use "Measurement" purpose
        }
    }

    @Override
    public void onConsentChanged() {
        initializeLibraries();
    }
}

Offline and errors

The library requires an internet connection to display the consent popup, hence to generate or update the consent string, while the latest consent string is always available on local storage through CMPStorage.

By default, the askConsent method checks for internet connection before launching the popup activity, so, if there is no connection, the popup is not shown, but will be presented on the next launch.

If an error occurs during the consent flow, instead, an error message is shown with the option to retry or close the popup. In this case, setting forceConsent(true) ensures that the popup will be presented again if no consent has been given.

Compliance with US State Privacy Laws

Our SDK supports features to manage compliance with state-specific laws. You can handle opt-out requests for the sale, sharing, and targeted advertising of personal information, in accordance with applicable state laws.

Methods for US Privacy Compliance

We introduce three methods that return an UsprOptOut object, providing the user's opt-out preference regarding their personal data. The UsprOptOut can be NOTAPPLICABLE, indicating no action needed; YES, signaling an opt-out; or NO, indicating no opt-out.

  1. getSaleOptOut(): Evaluates the opt-out status for the sale of personal information.
  2. getSharingOptOut(): Determines the opt-out status for sharing personal data with third parties.
  3. getTargetedAdvertisingOptOut(): Assesses the opt-out preference for targeted advertising.

The returned UsprOptOut value from each method provides a clear directive on how to proceed with the user's data based on their preferences and applicable laws.

  1. NOTAPPLICABLE: The user's preference is not applicable under the current circumstances or legal requirements.
  2. YES: Indicates an active opt-out by the user from the specific data processing activity.
  3. NO: Indicates that the user has not opted out, allowing the data processing activity to continue.

Consent preferences across different devices

Read this guide to learn how to implement the Consent Database API to synchronize consent preferences between sites and apps for each authenticated user.


2.9.5

  • Native support for cookiePolicyInOtherWindow

2.9.4

  • Bugfix for googleAdditionalConsentMode

2.9.3

  • Edge to edge support

2.9.2

  • Bugfix for Android 15

2.9.1

  • Bugfix for mailto support

2.9.0

  • Bugfix

2.8.9

  • Added setMultiThread() method

2.8.8

  • Bugfix

2.8.6

  • Added getPreferenceId method for Cpl

2.8.5

  • Added onPopupClosed to IubendaCMPCallback
  • Bugfix for preventDismissWhenLoaded

2.8.4

  • Added invalidateConsentInterval

2.8.3

  • Added NSNotification.Name.OnStartupFailed, NSNotification.Name.OnError, NSNotification.Name.OnFatalError, NSNotification.Name.OnReady, NSNotification.Name.OnBannerShown, NSNotification.Name.On2ndLayerShown, NSNotification.Name.OnPreferenceExpressed and config.fatalErrorTimeout

2.8.2

  • Added setStorePreferences() method with StorePreferences object and callback

2.8.1

  • Added EnableAdvertiserConsentMode support

2.7.9

  • Added setStorePreferences() method with StorePreferences object

2.7.7

  • Added getSaleOptOut(), getSharingOptOut(), getTargetedAdvertisingOptOut() methods

2.7.6

  • Bugfix for isFullScreen configuration

2.7.5

  • Added isFullScreen configuration to IubendaCMPConfig
  • Added openPreferences(ArrayList purposes) method to IubendaCMP

2.7.4

  • Bugfix for Google's Additional Consent Mode

2.7.3

  • Added support for Google's Additional Consent Mode
  • Added getGoogleAdditionalConsent() function

2.7.2

  • Bugfix for timestamp

2.7.1

  • Added useNonStandardTexts to saved data

2.6.9

  • Added support for TCF 2.2

2.6.7

  • Added reject() to IubendaCMP class

2.6.5

  • Added landscapeWidth, landscapeHeight, portraitWidth, portraitHeight to IubendaCMPConfiguration

2.6.4

  • Added getPreferencesJson to IubendaCMP class

2.6.3

  • Added the (×) or close button to consent popup
  • Added dismissColor to IubendaCMPConfig class for customizing close button

2.6.2

  • Added Custom UI functions: getVendorList(), getUserPreferences() and setUserPreferences()

2.6.1

  • isGooglePersonalized() is deprecated

2.6.0

  • Added proxyUrl(baseUrl) method to rewrite the URL that it uses to embed CS

2.5.9

  • Fixed saveConsent(preferencesJson,timestamp) function

2.5.8

  • Added isPreferenceExpressed() method
  • Fixed isConsentGiven() method

2.5.7

  • Added expireAfter option to config.json to compare with saved consent date and clear data if needed

2.5.6

  • Added invalidateConsentBefore Parameter to IubendaCMP class to compare with saved consent date and show consent again if needed
  • Added shouldGetConsentForInvalidateConsentBefore() function to IubendaCMP class for Custom UI call
  • Added Objective-C support for IubendaCMP.storage parameter

2.5.5

  • Added BannerPosition Parameter to IubendaCMPConfiguration class to customize Consent Banner Position (default:CENTER)

2.5.3

  • Fixed expired consent string by clearing after 360 days

2.5.2

  • Allows to use forceConsent=true with enableTcf=false

2.5.1

  • Fixed an issue introduced in version 2.5.0 where enableTcf=false and forceConsent=false would not behave correctly

2.5.0

  • Added method IubendaCMP.clearData()

2.4.0

  • Methods acceptDefaultConsent, editConsent, showConsentPreferences, showVendorsPreferences, showCookiePolicy have been renamed to accept, openPreferences, openTcfPreferences, openTcfVendorsPreferences, openCookiePolicy, respectively

2.3.5

  • WebView debugging enabled only in debug mode

2.3.4

  • Improved logging

2.3.3

  • Fixed the cutting off of the popup bottom part in some devices

2.3.2

  • Added proguard config in the library

2.3.1

  • Added isPurposeConsentGivenForPurposeId(purposeId) and isVendorConsentGivenForVendorId(vendorId)

2.3.0

  • Added preventDismissWhenLoaded option
  • Updated popup size algorithm

2.2.3

  • The library now caches the configuration to a file and restores it from the cache when no configuration is set (it avoids crashes if ConsentActivity is restored before the SDK is initialized)

2.2.1

  • Improved popup size on different screen sizes

2.2.0

2.1.0

  • Fixed crashes on older Android versions

2.0.0

  • Added csVersion option

1.3.2

  • Added timestamp to saveConsent() and CMPStorage

1.3.1

  • Introduced cssFile and jsonFile options

1.3.0

  • Introduced cssContent and jsonContent options
  • Touch outside the popup is now disabled

1.2.0

  • We handle webview resizing when going back to the first layer
  • We now allow the SDK to point to the exact CS version

1.1.2

  • Introduced the connection check and the skipNoticeWhenOffline option

1.1.1

  • Introduced a new default value for forceConsent

1.1.0

  • Introduced the acceptIfDismissed option

1.0.0

  • Initial release

See also

 

The post CS for mobile | Developer’s Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
What Should Basic Terms and Conditions Include? https://www.iubenda.com/en/help/19482-what-should-basic-terms-and-conditions-include/ Mon, 16 Sep 2019 23:23:20 +0000 https://help.iubenda.com/?p=19482 Terms and Conditions govern the contractual relationship between you and your users and set the way in which your product, service or content may be used, in a legally binding way. It is essential for protecting your content from a copyright perspective as well as protecting you from potential liabilities. Terms typically contain copyright clauses, […]

The post What Should Basic Terms and Conditions Include? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Terms and Conditions govern the contractual relationship between you and your users and set the way in which your product, service or content may be used, in a legally binding way. It is essential for protecting your content from a copyright perspective as well as protecting you from potential liabilities. Terms typically contain copyright clauses, disclaimers and terms of sale, allow you to set governing law, list mandatory consumer protection clauses, and more.

Because the Terms & Conditions document is essentially a legally binding agreement; it is, therefore, not only important to have one in place, but also necessary to ensure that it meets legal requirements. This means that the document must be up-to-date with all applicable regulations, precise, visible and easily understandable so that users can both easily see it and agree to it. The “agreeing action” should be done in an unambiguous way (e.g. clicking a checkbox with a visible link to the document before being able to create an account or use the service).

While the full content may vary based on the particulars of your business, the Terms and Conditions should at least include the following:

  • Identification of the business
  • Description of the service that your site/app provides
  • Information on risk allocation, liability, and disclaimers
  • Warranty/Guarantee information (where applicable)
  • The existence of a withdrawal right (if applicable)
  • Safety information, including instructions for proper use (where applicable)
  • Terms of delivery of product/service (where applicable)
  • Rights of use (if applicable)
  • Conditions of use/ purchase (eg. age requirements, location-based restrictions)
  • Refund policy/exchange/termination of service and related info
  • Info related to methods of payment
  • Any additional applicable terms
Note on terms and conditions templates

One of the questions we’ve come across from time to time is “Can I just use a terms and conditions template?”. Despite how simple they appear, terms and conditions are meant to meet incredibly complex and highly specific scenarios. Because each terms and conditions document is a legally binding contract that is meant to protect you, the business owner, it’s critically important that the document matches your specific business processes, model, and remains up-to-date with the various laws referenced in its contents.
Templates simply cannot do this, therefore, we strongly suggest that you avoid using templates.

You can learn more about Terms and Conditions here generate yours now by clicking below.

Create customized terms & conditions for your website/app

Start generating

See also

The post What Should Basic Terms and Conditions Include? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Generate Terms and Conditions https://www.iubenda.com/en/help/19461-how-to-generate-terms-and-conditions/ Mon, 16 Sep 2019 16:34:18 +0000 https://help.iubenda.com/?p=19461 Generating and setting up your Terms and Conditions with iubenda is pretty straightforward, and you’re guided along the way. In this post, we’ll show you how to create your first Terms document from start to finish. If you need any additional help, please feel free to message us via the chat window (you can find […]

The post How to Generate Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Generating and setting up your Terms and Conditions with iubenda is pretty straightforward, and you’re guided along the way. In this post, we’ll show you how to create your first Terms document from start to finish. If you need any additional help, please feel free to message us via the chat window (you can find it by clicking on the green help button on the right and then clicking on the live chat button at the top). We’re happy to answer any of your questions anytime.

First up, you’ll need to access your iubenda account. If you haven’t created one already, you can do so here. Once you’re signed up it’s time to get started. The process is simple. We’ll show you how to:

  1. Generate your terms and conditions
  2. Customize your terms and conditions
  3. Add the terms to your site or app
 

1. Generate your terms of service

Once you’ve logged into your dashboard, it’s time to begin generating your Terms and Conditions.

If you’re adding the terms to a site area or project that already exists within your dashboard, then simply click on the particular website/app to enter into the management area.

If you haven’t yet added a website to your iubenda account, do so by clicking on the Start generating button at the top right of the dashboard to open up the generation modal, filling in the relevant details and then clicking on Start generating button at the bottom of the modal window. This will also take you into the management area.

Once there, scroll down and click on Generate now under the Terms and Conditions section.

Start generating terms and conditions

This will take you to the edit area of the Generator where you can add and customize clauses.

Now, by default, a basic set-up was created when you clicked on “Generate” (you can view this by clicking on Preview in the right sidebar). However, it’s important to point out that, since Terms and Conditions are legally binding documents, it’s in your best interest and we strongly recommended that you customize your documents to suit your particular situation and business needs. We’ll show you how to do that in the next step.

2. Customize your terms and conditions

As mentioned above, your Terms of Use need to to be adapted to your business’ individual needs. You do this by editing and adding clauses.

First, click on the Add clauses button

This will open up a window which allows you to select and edit the clauses you’d like to add. If it’s your first time using the Terms and Conditions Generator, you see the following:

As indicated by the image above, the most commonly needed clauses are pre-selected by default as part of a basic set-up, but you can de-select or add additional clauses where necessary. The clauses are separated into intuitive modules, with on-click guides to help you throughout the set-up process.

Guided set-up

To edit a particular clause, simply click on the Customize button. This takes you into the clause where you modify as needed, to fit your particular scenario.

As mentioned above, the on-click guides are available throughout to make sure that you choose the options that best fit your individual needs.

Click on the Apply changes button on the bottom right to save your customizations. This action will take you back to the main “clauses modal” window. If you’re finished customizing your terms, you can click on Save and close on the bottom right of this window and move on to the next step below.

You can preview your document at any time by simply clicking on Preview

Owner & Service Info

Now that you’re finished editing, you’ll need to enter your business details into the Owner’s Field. To do so, simply click on the Next button on the bottom right of the screen.

This will take you to the Owner & Service info page.

Here you’ll need to enter your legally valid business and/or contact info.
The details of what’s required for your specific scenario might vary based on where your business is located and who it targets. The most commonly required information here usually includes the owner’s/business’ identity, contact details, postal address, and relevant codes of conduct that apply to your business model (if any).

Since Terms of Service are legally binding contracts, it’s important to state legitimate details here. Also, do consider that, in many cases, under Consumer Law, customers must be able to contact you if the need arises.
More details on what’s required can be found in the dedicated guide.

Once you’re finished entering the required info into the Owner’s field, click the Next button at the bottom right of the page. This will display the finished Terms document. Subsequently clicking on Next button at the bottom right of this modal window will then take you to the integration section of your site area. You can also access this integration area throughout the generation process by clicking on the Manage and Embed link at the top left of the Generator.

3. Add the terms of use to your site/app

The final step is to integrate the terms you’ve just generated with your website/ app. This is done by using the embedding code, or link provided on the “embed” page.

You can add the terms to your site/app in the following ways:

  1. as a button which opens an elegant modal window;
  2. as a direct link (e.g. for App Stores);
  3. or as a direct site embed (best option if you’d like to add your own brand colors, custom fonts etc. to the document).

You can read more about how to add your terms and conditions to your site/app in the dedicated guide.

To access any of these methods, simply click on the relevant tab (if you already have a privacy policy active on that site, you’ll need to scroll to the Terms and Conditions section), copy the code snippet or text link depending on your chosen method, and follow the instructions in the guide linked above.

And you’re done!

Update and refine your terms when needed

We constantly monitor the major legislations to keep the clauses available to your documents valid and up-to-date, however, should you need to manually update clauses, personal details, contact details etc., you can simply log back into your iubenda dashboard and make changes at any time.

Generate a Terms and Conditions document

Optimized for E-commerce, Marketplace, SaaS, Apps and more

Start generating

See also

The post How to Generate Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Edit your Terms and Conditions https://www.iubenda.com/en/help/19356-edit-terms-and-conditions/ Wed, 11 Sep 2019 12:44:12 +0000 https://help.iubenda.com/?p=19356 You can access your iubenda dashboard and make changes to your terms and conditions at any time at no extra charge. Moreover, there’s no need to repeat the integration process as the changes will be applied remotely. In order to edit a document, access your dashboard and select the site or app that you’d like to edit the terms […]

The post How to Edit your Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
You can access your iubenda dashboard and make changes to your terms and conditions at any time at no extra charge. Moreover, there’s no need to repeat the integration process as the changes will be applied remotely.

In order to edit a document, access your dashboard and select the site or app that you’d like to edit the terms for by clicking on it or on the Manage button. Next, click the Edit button in the Terms and Conditions section.

Terms and conditions - Edit document

Customize existing clauses or add new ones, save and you’re done.

How to change the URL of the site or the name of the app

It can become necessary to edit the title of an iubenda generated document, either because you’ve changed your site’s URL or renamed your app.

For information on how to duplicate an existing site please see here

Adding a Link to an External Document

If you have an existing document drafted by your legal team, you can easily integrate it with your iubenda-generated policy by adding a link to your external document within the relevant section. 
This approach allows you to keep your original, lawyer-approved wording intact while still using iubenda to manage your compliance.

To add a link to your external Terms and Conditions document:

  • Navigate to the relevant section in the Terms and Conditions editor and click on ‘Add clauses’
  • After that click on ‘Add’ under the Advanced: Incorporation of other Documents section
  • Then select ‘Add a document included by reference and add the name and link 
  • Save your changes to ensure the link is visible on your published Terms and Conditions page.

For detailed instructions on how to customize a specific section of your Terms and Conditions, please follow this guide: Terms and Conditions Template Customization.

See also

The post How to Edit your Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Delete your Terms and Conditions https://www.iubenda.com/en/help/19340-delete-terms-and-conditions/ Wed, 11 Sep 2019 12:28:11 +0000 https://help.iubenda.com/?p=19340 In order to delete a document, access your iubenda dashboard and select the site or app that you’d like to delete the terms for by clicking on it or on the Manage button. Then click on Delete at the bottom of the Terms and Conditions window. Dashboard > [select the site you’d like to delete the terms […]

The post How to Delete your Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
In order to delete a document, access your iubenda dashboard and select the site or app that you’d like to delete the terms for by clicking on it or on the Manage button. Then click on Delete at the bottom of the Terms and Conditions window.

Dashboard > [select the site you’d like to delete the terms for] > Delete at bottom window (as pictured below)

Terms and conditions - Delete

Please note: this operation is permanent and cannot be reversed.

The post How to Delete your Terms and Conditions appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Integrate iubenda’s Terms and Conditions on your Site and App https://www.iubenda.com/en/help/19253-integrate-terms-and-conditions-on-your-site-and-app/ Tue, 10 Sep 2019 16:15:27 +0000 https://help.iubenda.com/?p=19253 iubenda’s Terms and Conditions Generator offers three integration options which can be used for different purposes: Where to find the embedding options Head to your dashboard and click on the website that you’d like to get the embed code for. Next, click the Embed button in the Terms and Conditions section. This is what you will find: […]

The post How to Integrate iubenda’s Terms and Conditions on your Site and App appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

iubenda’s Terms and Conditions Generator offers three integration options which can be used for different purposes:

  1. Standard embedding
  2. Direct link
  3. Direct text embedding and API

Where to find the embedding options

Head to your dashboard and click on the website that you’d like to get the embed code for. Next, click the Embed button in the Terms and Conditions section.

Terms and Conditions - Embed button

This is what you will find:

iubenda Legal Documents - Integration options

1. Standard embedding (all plans)

The standard and our simplest integration method is the one where you include the iubenda button/link on your site. This will open the terms and conditions in a modal window on your site when the link is clicked.

This option is not suitable for apps. If you are developing for mobile apps, you’ll want to take a look at either the direct link or direct text embedding option.

Make sure you’ve selected Add a widget to the footer and, after customizing as you’d like, you can copy the relevant code from the generator.

Terms and Conditions - Standard Embedding

Where do I put the iubenda embedding code on my site?

The best idea is to add it to your site’s footer so that it is always visible and accessible. The footer is easy to find and is typically found towards the end of your html document. It appears in an html element similar to <footer>{YOUR IUBENDA CODE}</footer> or <div id="footer">{YOUR IUBENDA CODE}</div>.

What does this look like?

Here is a working example. Click on the button to open the terms and conditions:

Terms and Conditions

The direct link option is appropriate if you do not mind that the document not be displayed on your site, as the link displays the terms and conditions on a page hosted by iubenda.com. This is a very useful option for app stores.

This option works perfectly with apps. The document is designed in a responsive fashion and will therefore adapt to your screen size.

Once clicked the Embed button in the Terms and Conditions section, select Use a direct link as shown below (and add it in the appropriate place):

Terms and Conditions - Direct Link

Where do I put the iubenda link?

That depends entirely on you. But the rule of thumb is your site’s footer, as it’s a good way for it to be seen from every page.

3. Direct text embedding and API (Advanced and Ultimate plan)

The direct text embedding option is the one option that will make your terms and conditions look as if it were part of your own site.

This option works perfectly for apps as well. The document is designed in a responsive fashion and will, therefore, adapt to your screen size.

We offer two ways for embedding the terms and conditions into the body of one of your pages. You can:

  • copy and paste the JavaScript into your page, or
  • call our API from your backend.

Once clicked the Embed button in the Terms and Conditions section, select Embed the text in the body as shown below (and add it in the appropriate place):

Terms and Conditions - Direct Text Embedding

Keep in mind that with the option Use plain HTML with no styling you can completely remove the document of all of iubenda’s styling and use your own.

Downloadable Terms and Conditions Option:

You can also offer a downloadable PDF of your Terms and Conditions. This feature allows users to download an updated copy directly from your T&C document.

Simply, in the embedding section, select the “Downloadable PDF” option. Once you enable this option, we’ll generate and keep updated a PDF version of your documents, which will be linked in the footer of the documents themselves.

Terms and Conditions - Direct Text Embedding

API

The following API URLs are available:

  • https://www.iubenda.com/api/terms-and-conditions/:public_id
  • https://www.iubenda.com/api/terms-and-conditions/:public_id/no-markup

Notes:

  • :public_id is the ID of your terms and conditions provided by your embedding options
  • the JSON API doesn’t include the CSS provided by to the default iubenda terms and conditions

Example

curl --include --request GET 'https://www.iubenda.com/api/terms-and-conditions/:public_id'

Responses

Everything OK, response status 200:
{ :success => true, :content => "..." }

Required document is not found, response status 404:
{ :success => false, :error => "Document not found. If you are the owner of the site..." }

Application error, response status 500:
{ :success => false, :error => "Application Error. Please contact info@iubenda.com for support." }

See also

The post How to Integrate iubenda’s Terms and Conditions on your Site and App appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use the Site Scanner from within the Generator https://www.iubenda.com/en/help/19004-how-to-use-the-site-scanner-from-within-the-generator/ Thu, 08 Aug 2019 09:12:56 +0000 https://help.iubenda.com/?p=19004 It’s now easier than ever to identify which services you need to add to your privacy and cookie policies with our in-dashboard Site Scanner. To access it, simply go to your Dashboard > [click on your chosen website] Privacy and Cookie Policy > Edit > Add service. 💡 Don’t have an account? Create one for […]

The post How to use the Site Scanner from within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
It’s now easier than ever to identify which services you need to add to your privacy and cookie policies with our in-dashboard Site Scanner.

To access it, simply go to your Dashboard > [click on your chosen website] Privacy and Cookie Policy > Edit > Add service.

💡 Don’t have an account? Create one for free here.

The Scanner button is located at the top of the services window:

iubenda Site Scanner button within the services window

Next, click on the scanner button and enter the address of the website you’d like to scan and click on the “Scan” button.

The Scanner will then perform a thorough check of the website you entered, and will send the scan-report to your iubenda account email address.

The report will highlight any services running on your website which are not included in your current policy.

Furthermore, the services detected are shown directly in the generator.

site-scanner generator

From the scan results box, you can check all the services that are found to be missing in your documents, already selected, and ready to be added.

Caution

Our scanner is powerful, but can only scan for technologies that are directly integrated on your site’s pages. You will, therefore, still need to manually add the clauses related to data processing practices like newsletter sending.

See also

The post How to use the Site Scanner from within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Implement the Consent Database in Joomla! with ChronoForms https://www.iubenda.com/en/help/18710-consent-solution-joomla-chronoforms-3/ Wed, 24 Jul 2019 12:40:16 +0000 https://help.iubenda.com/?p=18710 This tutorial uses ChronoForms, a popular extension for Joomla!, to illustrate how you can integrate the Consent Database with your Joomla! forms. If you’re using another extension you may still refer to this tutorial as the implementation approach is generally the same. To use the Consent Database with ChronoForms you’ll need to use the JavaScript method of implementation.  […]

The post How to Implement the Consent Database in Joomla! with ChronoForms appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

This tutorial uses ChronoForms, a popular extension for Joomla!, to illustrate how you can integrate the Consent Database with your Joomla! forms. If you’re using another extension you may still refer to this tutorial as the implementation approach is generally the same.

To use the Consent Database with ChronoForms you’ll need to use the JavaScript method of implementation

In short, you must:

  • embed the Consent Database code;
  • create (or modify) your form in a way that includes the necessary id tags; and
  • send the consent data to iubenda APIs.

To begin, copy the code you find under Consent Database > Embed > Javascript.

Consent Solution JavaScript code

Then paste this code inside the head of all your pages. You can do this via one of the following methods:

  • access the Template Manager directly; or
  • if you’re not comfortable with directly editing theme files, you can use a plugin for coding and scripts integration, like HeadTag. Once you’ve installed the plugin, you can access the head by going to Extensions > Plugins > System – Headtag > Menu Item Tags and paste the Consent Database script.
Joomla! - HeadTag extension and Consent Database code

2. Create or modify your form

Once you’ve included the Consent Database’s code inside the head of your site, access your Joomla! dashboard and create a form (e.g. “contact”) using the ChronoForms extension.

ChronoForms for Joomla! - New form

If you’re already using ChronoForms on your site, simply head to your forms overview page (Components > ChronoForms6) and click on the form you’d like to integrate with the Consent Database.

Here’s the contact form we’ll be using in our implementation example (name, email, message and newsletter subscription):

ChronoForms for Joomla! - Form

On ChronoForms it will look something like this:

ChronoForms for Joomla! - Form

Once you’ve defined your form area, you’ll need to customize the form to map its various inputs so that the Consent Database can actually identify and pull the information that your users enter into the various input points.

To do the mapping you can use the load (or submit) function with the map object. In order for the load/submit function to work you’ll need:

  • an id for the form element;
  • different names for all the subject and preferences inputs; and
  • an id for the submit element;

a. Click on the settings icon next to the form area and add an id to your form:

ChronoForms for Joomla! - Form configuration

b. Similarly to the Form ID, add an id to the text fields (in our example, name, email and message):

ChronoForms for Joomla! - Text field configuration

And to the checkboxes (in our case, “generic” and “newsletter”):

ChronoForms for Joomla! - Checkbox configuration

For a mandatory checkbox like the generic above, be sure to:

  • Disable the validation Chronoforms - Checkbox configuration
  • Disable ghost Chronoforms - Checkbox configuration
  • Add two triggering events that will enable/disable the submit button (note that we’re using #contact-submit, as indicated on the general configuration of the submit button): Chronoforms - Checkbox configuration

c. Finally, add an id to the submit button as well:

ChronoForms for Joomla! - Submit button configuration

You may also want to add a confirmation message to be shown to your users after they’ve filled out the form (submit > Actions):

ChronoForms for Joomla! - Message configuration

Save your changes and make sure that your form is published.

Form embedding

If you’re modifying an already-existing form on your site, jump to the section below, otherwise (if you’ve only just created the form) copy the shortcode generated by ChronoForms:

{chronoforms6}contact{/chronoforms6}

And paste it in a page of your site (e.g., “Contact us”).

Now that your form is ready you need to make sure that it sends the information to the Consent Database when the user fills in and submits it. There are two ways to do this:

  • the load method allows you to send the Consent data to iubenda APIs asynchronously;
  • the submit method allows you to send the Consent data to iubenda APIs synchronously.

Load method

The load function allows you to bind fields of the consent object to input fields of your <form> and to automatically record the consent either by setting up a trigger function under submitElement: or programmatically via a dedicated trigger.

By default, this method writes into localStorage to protect from any loss of data in case a new page is loaded before the JavaScript has finished executing.

Caution

The load function must only be invoked after the declaration of the form object (as can be seen in the example below).

Here’s the load function with the map object:

<script>
    _iub.cons_instructions.push(["load", {
        submitElement: document.getElementById("contact-submit"),
        form: {
            selector: document.getElementById("contact-form"),
            map: {
                subject: {
                    first_name: "name",
                    email: "email"
                },
                preferences: {
                    generic: "generic",
                    newsletter: "newsletter"
                }
            }
        },
        consent: {
            legal_notices: [{
                    identifier: "privacy_policy",
                },
                {
                    identifier: "cookie_policy",
                }
            ],
        }
    }])
</script>

In the code above please note:

  • the contact-submit and contact-form ids;
  • the first_name and email subject mapping (remember that you have four non-editable options: first_namelast_namefull_name and email);
  • the checkbox preferences, where you’re free to use the keys you like (in our case, generic and newsletter);
  • the legal_notices, which are automated if you sync your iubenda legal documents with the Consent Database (just use the standard identifiers privacy_policy and cookie_policy).

Be sure to include the load method after the form (for example inside the footer of your contact page), and you’re done!

Once you’ve collected your consents, you’ll be able to sort and analyze your user consent data in the Consent Dashboard.

Read the JS documentation for more information about the load method.

Submit method

The submit method allows you to send the Consent data to iubenda APIs synchronously.

Caution

Please note that this method will not work if there is a redirect after the form is submitted.

<script>
    document.getElementById("contact-submit").onclick = function() {
        sendToConsentSolution()
    };

    function sendToConsentSolution() {
        var inputName = document.getElementById("name").value;
        var inputEmail = document.getElementById("email").value;
        var inputMessage = document.getElementById("message").value;
        var subjectId = inputEmail.toLowerCase().replace(/\W/g, '-'); //optional
        _iub.cons_instructions.push(["submit", {
            form: {
                selector: document.getElementById("contact-form"),
                map: {
                    subject: {
                        first_name: "name",
                        email: "email"
                    },
                    preferences: {
                        generic: "generic",
                        newsletter: "newsletter"
                    }
                }
            },
            consent: {
                subject: {
                    id: subjectId
                },
                legal_notices: [{
                        identifier: "privacy_policy"
                    },
                    {
                        identifier: "cookie_policy"
                    }
                ]
            }
        }])
    }
</script>

In the code above please note:

  • the contact-submit and contact-form ids;
  • the first_name and email subject mapping (remember that you have four non-editable options: first_namelast_namefull_name and email);
  • the checkbox preferences, where you’re free to use the keys you like (in our case, generic and newsletter);
  • the legal_notices, which are automated if you sync your iubenda legal documents with the Consent Database (just use the standard identifiers privacy_policy and cookie_policy);
  • optional: instead of letting it be generated automatically, we can customize the subjectId with the email address – for example – of the subject, all lowercase and with the symbol “-” instead of “.” and “@” (this way for john.doe@iubenda.com the subjectId would become john-doe-iubenda-com).

Be sure to include the submit method after the form (e.g., inside the footer of your contact page), and you’re done!

Once you’ve collected your consents, you’ll be able to sort and analyze your user consent data in the Consent Dashboard.

Read the JS documentation for more information about the submit method.

See also

The post How to Implement the Consent Database in Joomla! with ChronoForms appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to migrate consents from a previous provider to the Privacy Controls and Cookie Solution https://www.iubenda.com/en/help/18678-cookie-solution-consents-migration-5/ Fri, 19 Jul 2019 12:04:52 +0000 https://help.iubenda.com/?p=18678 If you’re switching from another cookie management solution to ours, you may want to migrate the consents you’ve already collected. This is useful for ensuring that users who have already given their consent under the previous solution are not presented with the cookie banner, and the related request for consent, again. There are two ways […]

The post How to migrate consents from a previous provider to the Privacy Controls and Cookie Solution appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you’re switching from another cookie management solution to ours, you may want to migrate the consents you’ve already collected. This is useful for ensuring that users who have already given their consent under the previous solution are not presented with the cookie banner, and the related request for consent, again.

There are two ways to do this, depending on whether the “old” platform provides a cookie (synchronous method) or requires a call to its API (asynchronous method).

Synchronous method

Before embedding the Privacy Controls and Cookie Solution you’ll need to define a synchronous function (e.g. isConsentGivenByOtherPlatform) to get the consent from the other platform:

<script type="text/javascript">
    function readLocalCookie(cookieName) {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) { 
            var e=cookies[i].split('=');
            if (e[0] === cookieName) {
                return e[1];
            }
        }
        return null;
    }
    function isConsentGivenByOtherPlatform() {
        var otherPlatformCookieName = 'cookie_from_other_platform'; // use the actual cookie name saved by the other platform 
        var prevConsent = readLocalCookie(otherPlatformCookieName); 
        if (prevConsent) { 
            return true; 
        } else { 
            return false; 
        } 
    }
</script>
Important

Don’t copy and paste the code shown above — it’s just sample code we’ve provided to help you understand the approach.

Next, add the Privacy Controls and Cookie Solution snippet, invoking the onReady callback:

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, // use your siteId
        "cookiePolicyId": YYYYYY, // use your cookiePolicyId
        "banner": {
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true,
            "position": "float-top-center"
        },
        "callback": {
            "onReady": function() {
                if (typeof window.isConsentGivenByOtherPlatform === 'function' && isConsentGivenByOtherPlatform()) {
                    _iub.cs.api.setPreferences({
                        consent: true,
                        ccpa: true,
                        uspr: {
                            'all': true,
                            'sd8': true,
                            'sd9': true,
                        },
                        purposes: {
                            '1': true,
                            '2': true,
                            '3': true,
                            '4': true,
                            '5': true,
                        },
                        tcfv2: {
                            'all': true,
                        },
                        gac: {
                            'all': true,
                        },
                    }, true);
                }
            }
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

The onReady callback checks if consent is already given on another platform and, if so, stores it calling the _iub.cs.api.setPreferences() method.

Per-category consent

_iub.cs.api.storeConsent() allows to customize purposes too in the argument which can be {consent: true}, {consent: false} or {purposes: {1: true, 2: false, …}}.

Asynchronous method

Before embedding the Privacy Controls and Cookie Solution code you’ll need to define a function that:

  1. accepts a callback;
  2. detects the consent;
  3. saves the consent in a global variable; and
  4. invokes the callback afterward.

Here’s a sample:

<script type="text/javascript">
    // fetch consent asynchronously from 3rd party 
    function getConsentByOtherPlatform(cb) {
        $.getJSON('http://otherplatform.com/api/get-consent', function(result) {
            if (result.given) {
                window.consentByOtherPlatform = true;
            } else {
                window.consentByOtherPlatform = false;
            }
            cb();
        });
    }
    function isConsentGivenByOtherPlatform() {
        return !!window.consentByOtherPlatform;
    }
</script>
Important

Don’t copy and paste the code shown above — it’s just sample code we’ve provided to help you understand the approach.

Next, add the Privacy Controls and Cookie Solution snippet, invoking the onReady callback:

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, // use your siteId
        "cookiePolicyId": YYYYYY, // use your cookiePolicyId
        "banner": {
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true,
            "position": "float-top-center"
        },
        "callback": {
            "onReady": function() {
                if (typeof window.isConsentGivenByOtherPlatform === 'function' && isConsentGivenByOtherPlatform()) {
                    _iub.cs.api.setPreferences({
                        consent: true,
                        ccpa: true,
                        uspr: {
                            'all': true,
                            'sd8': true,
                            'sd9': true,
                        },
                        purposes: {
                            '1': true,
                            '2': true,
                            '3': true,
                            '4': true,
                            '5': true,
                        },
                        tcfv2: {
                            'all': true,
                        },
                        gac: {
                            'all': true,
                        },
                    }, true);
                }
                }
            }
        }
    };
</script>
<script type="text/javascript">
    // ask for 3rd party consent before including the CS
    getConsentByOtherPlatform(function() {
        var s = document.createElement('script');
        s.src = '//cdn.iubenda.com/cs/iubenda_cs.js';
        document.head.appendChild(s);
    });
</script>

The onReady callback will check if consent is already given on another platform and, if so, stores it calling the _iub.cs.api.setPreferences() method.

Per-category consent

_iub.cs.api.storeConsent() allows to customize purposes too in the argument which can be {consent: true}, {consent: false} or {purposes: {1: true, 2: false, …}}.

_iub.cs.api.setPreferences(consentObj, hideBanner)

The _iub.cs.api.setPreferences method, expected two arguments: consentObj (required) and hideBanner (optional)

consentObj

It’s an object with follow preferences items:

  • consent – required – accepts true or false – It refers to general consent
  • ccpa – required if CCPA is enabled – accepts true or false – it refers to US privacy and it will be applied only if CCPA is enabled in Cookie Solution
  • uspr – required if USPR is enabled – accepts an object with the following options – it refers to USPR consent and it will be applied only if USPR is enabled in Cookie Solution
    • all – accepts true or false – this option sets the same value for all purposes
uspr: {
   all: true // or false
}
  • [purposeId] – accepts true or false – this option sets the value for specific ID purposes
uspr: {
   's': true, // or false
   'sh': false, // or true
   'adv': false // or true
}
  • purposes – required if perPurposeConsent is enabled – accepts an object with the following options – it refers to purposes consent and it will be applied only if perPurposeConsent is enabled in Cookie Solution
    • all – accepts true or false – this option sets the same value for all purposes
purposes: {
   all: true // or false
}
  • [purposeId] – accepts true or false – this option sets the value for specific ID purposes
purposes: {
   '1': true, // or false
   '2': false, // or true
   '4': false // or true
}
  • tcfv2 – required if TCF is enabled – accepts an object with the following options – it refers to TCF consent and it will be applied only if TCF is enabled in Cookie Solution
    • all – accepts true or false – this option sets the same value for all TCF purposes
tcfv2: {
   all: true // or false
}
  • [string] – accepts a TCF string
tcfv2: 'CP9rVEAP9rVEAB7FGCENAyEgAAAAAAAAAAAAAAAUHgJAA4AM-AjwBKoDfAHbAO5AgoBIgCSgEowJaATHAmSBNICfYFBAKDgAAAAA'
  • gac – required if Google Aditional Consent is enabled – accepts an object with the following options – it refers to GAC consent and it will be applied only if GAC is enabled in Cookie Solution
    • all – accepts true or false – this option sets the same value for all GAC vendors
gac: {
   all: true // or false
}
  • [string] – accepts a GAC string
gac: '1~1584.2292.2392'

hideBanner

It’s a boolean to hide or not hide the banner after the preference storage, in this case, it should always be true

_iub.cs.api.setPreferences({ ... }, true); // hide the banner after the preference storage

_iub.cs.api.setPreferences({ ... }, false); // keep the banner after the preference storage

See also

The post How to migrate consents from a previous provider to the Privacy Controls and Cookie Solution appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Integrate iubenda’s Privacy Policy on a Website Made in Webflow https://www.iubenda.com/en/help/18524-privacy-policy-webflow/ Mon, 15 Jul 2019 14:51:00 +0000 https://help.iubenda.com/?p=18524 Once you’ve generated your privacy policy with iubenda, you have three ways to integrate it on your Webflow website. You can either: 1. Widget You’ll need a Webflow paid plan to include HTML code into your footer. Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the […]

The post How to Integrate iubenda’s Privacy Policy on a Website Made in Webflow appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Once you’ve generated your privacy policy with iubenda, you have three ways to integrate it on your Webflow website. You can either:

1. Widget

You’ll need a Webflow paid plan to include HTML code into your footer.

Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the code under the Add a widget to the footer tab.

iubenda privacy policy - Add a widget to the footer

Now go to your Webflow project and add an Embed element to your footer (more info on Webflow University).

Webflow embed component

Lastly, paste your iubenda snippet inside the Webflow embed code editor, click Save & Close, and you’re done.

Webflow HTML Embed Code Editor

What does this look like?

Here is a working example. Click on the button to open the policy:

Privacy Policy

This method requires a iubenda Pro/Ultra License, but it works also with the Webflow free plan.

Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the privacy policy URL you find under the Use a direct link tab.

iubenda privacy policy - Use a direct link

Now go to your Webflow project, add a Text Link to your footer (or edit an existing one) and name it “Privacy Policy”.

Webflow text link

Paste the privacy policy URL in the link settings URL field and you’re done.

Webflow privacy policy text link

3. Direct text embedding

This method requires a iubenda Pro/Ultra License and a Webflow paid plan.

The direct text embedding option makes your privacy policy look as if it were natively a part of your own site. Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the code under the Embed the text in the body tab.

iubenda privacy policy - Embed the text in the body

Now go to your Webflow project, add a New page and name it “Privacy Policy”.

Webflow pages

Add an Embed element to your Privacy Policy page (check the Webflow University for more info about custom code embedding).

Webflow embed component

Lastly, paste your iubenda snippet inside the Webflow embed code editor, click Save & Close, and you’re done.

Webflow HTML Embed Code Editor

Create a privacy policy for your site made in Webflow

Start generating

See also

The post How to Integrate iubenda’s Privacy Policy on a Website Made in Webflow appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to embed the Privacy Controls and Cookie Solution on a Webflow site https://www.iubenda.com/en/help/18531-cookie-solution-webflow-2/ Mon, 15 Jul 2019 13:04:31 +0000 https://help.iubenda.com/?p=18531 Once you’ve integrated the privacy policy on your website made in Webflow (which also includes the cookie policy if you’ve activated it) you can complete the configuration by embedding our cookie management solution to [1] display a fully customizable cookie banner, [2] collect cookie consent and [3] implement prior blocking, as required by the Cookie Law. Caution To […]

The post How to embed the Privacy Controls and Cookie Solution on a Webflow site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Once you’ve integrated the privacy policy on your website made in Webflow (which also includes the cookie policy if you’ve activated it) you can complete the configuration by embedding our cookie management solution to [1] display a fully customizable cookie banner, [2] collect cookie consent and [3] implement prior blocking, as required by the Cookie Law.

Caution

To install the Privacy Controls and Cookie Solution you’ll need to modify the HEAD of your site, a Webflow premium feature available only on their paid plans. More info on the Webflow University.

First, go to your iubenda Dashboard and click on [Your website] > Privacy and Cookie Policy > Edit. You’ll notice a Cookie Policy box in the right column.

Activate cookie policy

Click on Activate cookie policy and Save changes: your cookie policy will be generated automatically based on the configuration of your privacy policy.

Note

The Privacy Controls and Cookie Solution requires that you link to a cookie policy from you banner as legally required. If you have the cookie policy feature activated on your iubenda account, the Privacy Controls and Cookie Solution automatically integrates your cookie policy into the solution once the option is selected.

If you already have your own cookie policy, you can add the link in the advanced view of the Privacy Controls and Cookie Solution configurator (see below). Simply select Custom under Cookie Policy > Cookie Policy URL. More info on the Privacy Controls and Cookie Solution advanced guide.

Click on Generate now under Dashboard > [Your website/app] > Privacy Controls and Cookie Solution.

Cookie Solution - Generate a cookie banner

This will take you directly to the configuration panel of your cookie banner.

Cookie Solution - Configuration of the cookie banner

Once customized as you like, Save and Copy your Privacy Controls and Cookie Solution snippet.

Cookie Solution - Embed the cookie banner

Now go to your Webflow dashboard and select your project’s Settings.

Webflow Project Settings

Click on the Custom Code tab.

Webflow Custom Code

Paste your Privacy Controls and Cookie Solution code snippet in the Head Code section and click on Save Changes.

Webflow Head Code

Publish and you’re done.

iubenda's cookie banner on a Webflow website

3. Set up prior blocking of cookie scripts

Few categories of cookies are exempt from the consent requirement. Therefore, almost all scripts that install or can install cookies must be preemptively blocked before consent is obtained.

💡 Simplify your cookie-blocking process with auto-blocking!

Did you know that there’s a simpler option available for the prior blocking of cookies and trackers? Our auto-blocking feature automates the process, saving you time and effort.

If you prefer to manually tag your scripts that install or may install cookies, you can see our guide on blocking via manual tagging or explore other methods outlined in our general introduction to the prior blocking of cookies. However, we highly recommend considering the auto-blocking feature for a more streamlined approach.

👉 Click here to learn more about auto-blocking and how it can simplify your cookie-blocking process

Manage cookie consent for your site made in Webflow

Generate a cookie banner

See also

The post How to embed the Privacy Controls and Cookie Solution on a Webflow site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database Delivery Channels https://www.iubenda.com/en/help/18199-consent-solution-delivery-channels/ Fri, 14 Jun 2019 14:29:12 +0000 https://help.iubenda.com/?p=18199 iubenda’s Consent Database is available via two different channels which allow you to choose the cycle of periodic updates that best suits your needs: How to change the release channel You can specify the channel you want to use by using the dedicated dropdown menu next to “Sync your iubenda legal documents with the Consent […]

The post Consent Database Delivery Channels appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda’s Consent Database is available via two different channels which allow you to choose the cycle of periodic updates that best suits your needs:

  1. Current – By default, the iubenda Consent Database is accessed via the Current channel. This channel is quite stable and all features released on this channel are fully tested in a wide range of scenarios. The Current channel receives regular updates and fixes are applied as soon as they are available. If you wish to use this channel, you do not need to make any changes to the code automatically generated when the Consent Database is activated.
  2. Beta – Once they’ve been tested internally, all the latest features are released on the Beta channel first, before being merged into the more stable “current” channel. Releases to this channel occur more frequently, and, as with the Current channel, fixes are applied here as soon as they become available.

How to change the release channel

You can specify the channel you want to use by using the dedicated dropdown menu next to “Sync your iubenda legal documents with the Consent Database” (to get there: Dashboard > [Your site] > Consent Database > Embed):

Consent Solution - Changing release channel

JavaScript library

Let’s assume that you want to use the beta channel. The code generated for the current channel is:

<script type="text/javascript">
    var _iub = _iub || {};
    _iub.cons_instructions = _iub.cons_instructions || [];
    _iub.cons_instructions.push(["init", {
        api_key: "XXXXXXXX" //use you api_key
    }]);
</script>
<script type="text/javascript" src="https://cdn.iubenda.com/cons/iubenda_cons.js" async></script>

Once selected “Beta” from the dropdown menu, it will become:

<script type="text/javascript">
    var _iub = _iub || {};
    _iub.cons_instructions = _iub.cons_instructions || [];
    _iub.cons_instructions.push(["init", {
        api_key: "XXXXXXXX" //use you api_key
    }]);
</script>
<script type="text/javascript" src="https://cdn.iubenda.com/cons/beta/iubenda_cons.js" async></script>

Copy the resulting code (make sure to use your api_key) and paste it into the HEAD tag of your site, replacing the default one.

HTTP API

The examples suggested for the current channel are:

//Create consent
curl -H "ApiKey: XXXXXXXX" -X POST "https://consent.iubenda.com/consent/"

//Create subjects
curl -H "ApiKey: XXXXXXXX" -X POST "https://consent.iubenda.com/subjects/"

Once selected “Beta” from the dropdown menu, they’ll become:

//Create consent
curl -H "ApiKey: XXXXXXXX" -X POST "https://consent.iubenda.com/beta/consent/"

//Create subjects
curl -H "ApiKey: XXXXXXXX" -X POST "https://consent.iubenda.com/beta/subjects/"

More on the HTTP API documentation.

Changelog

The complete changelog is available at this link.

The post Consent Database Delivery Channels appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database changelog https://www.iubenda.com/en/help/18024-consent-solution-changelog/ Thu, 06 Jun 2019 10:31:36 +0000 https://help.iubenda.com/?p=18024 View new changes and fixes for Consent Database delivery channels. More about Current and Beta channels and how to change them on this guide. HTTP API JavaScript 2.8.4 CURRENT May 30, 2025 Bug fixes and other minor improvements 2.7.0 CURRENT Feb 17, 2025 Bug fixes and other minor improvements 2.6.12 CURRENT Jan 08, 2025 Bug fixes […]

The post Consent Database changelog appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
View new changes and fixes for Consent Database delivery channels. More about Current and Beta channels and how to change them on this guide.

2.8.4

CURRENT May 30, 2025

  • Bug fixes and other minor improvements

2.7.0

CURRENT Feb 17, 2025

  • Bug fixes and other minor improvements

2.6.12

CURRENT Jan 08, 2025

  • Bug fixes and other minor improvements

2.6.9

CURRENT Aug 20, 2024

  • Bug fixes and other minor improvements

2.6.8

CURRENT Jan 26, 2024

  • Bug fixes and other minor improvements

2.6.7

CURRENT Jan 26, 2024

  • We dropped the fulltext parameter
  • Bug fixes and other minor improvements

2.6.0

CURRENT Jan 26, 2024

  • Bug fixes and other minor improvements

2.5.4

CURRENT Nov 29, 2023

  • Bug fixes and other minor improvements

2.5.3

CURRENT Nov 28, 2023

  • Bug fixes and other minor improvements

2.5.2

CURRENT Nov 24, 2023

  • Bug fixes and other minor improvements

2.5.1

CURRENT Nov 24, 2023

  • Bug fixes and other minor improvements

2.5.0

CURRENT Nov 22, 2023

  • Bug fixes and other minor improvements

2.4.1

CURRENT Oct 30, 2023

  • Bug fixes and other minor improvements

2.4.0

CURRENT Oct 09, 2023

  • Bug fixes and other minor improvements

2.3.5

CURRENT Sep 14, 2023

  • Bug fixes and other minor improvements

2.3.4

CURRENT Sep 04, 2023

  • Bug fixes and other minor improvements

2.3.3

CURRENT Aug 22, 2023

  • Bug fixes and other minor improvements

2.3.1

CURRENT Jul 25, 2023

  • Bug fixes and other minor improvements

2.2.12

CURRENT Jun 29, 2023

  • Bug fixes and other minor improvements

2.2.11

CURRENT Jun 27, 2023

  • Bug fixes and other minor improvements

2.2.10

CURRENT Jun 07, 2023

  • Bug fixes and other minor improvements

2.2.9

CURRENT May 29, 2023

  • We added the ability to store, view, and search a subject’s phone numbers and label them

2.2.8

CURRENT May 19, 2023

  • Bug fixes and other minor improvements

2.2.7

CURRENT May 16, 2023

  • Bug fixes and other minor improvements

2.2.6

CURRENT May 09, 2023

  • Bug fixes and other minor improvements

2.2.5

CURRENT May 03, 2023

  • Bug fixes and other minor improvements

2.2.4

CURRENT Apr 27, 2023

  • Bug fixes and other minor improvements

2.2.3

CURRENT Apr 19, 2023

  • The language filter for the /legal_notices endpoint is now able to filter documents for languages that includes a country, such as en-GB and pt-BR

2.2.2

CURRENT Apr 17, 2023

  • Bug fixes and other minor improvements

2.2.1

CURRENT Apr 07, 2023

  • Bug fixes and other minor improvements

2.2.0

CURRENT Apr 06, 2023

  • Bug fixes and other minor improvements

2.1.3

CURRENT Mar 23, 2023

  • Bug fixes and other minor improvements

2.1.2

CURRENT Mar 16, 2023

  • Bug fixes and other minor improvements

2.1.1

CURRENT Mar 13, 2023

  • Bug fixes and other minor improvements

2.0.0

CURRENT Feb 15, 2023

  • Bug fixes and other minor improvements

1.47.1

CURRENT Feb 01, 2023

  • Bug fixes and other minor improvements

1.47.0

CURRENT Jan 31, 2023

  • Bug fixes and other minor improvements

1.46.2

CURRENT Jan 23, 2023

  • Security fixes and other minor improvements

1.46.1

CURRENT Jan 20, 2023

  • Bug fixes and other minor improvements

1.46.0

CURRENT Jan 12, 2023

  • Bug fixes and other minor improvements

1.45.0

CURRENT Jan 09, 2023

  • Bug fixes and other minor improvements

1.44.3

CURRENT Dec 22, 2022

  • Bug fixes and other minor improvements

1.44.2

CURRENT Dec 21, 2022

  • Bug fixes and other minor improvements

1.44.1

CURRENT Dec 16, 2022

  • Bug fixes and other minor improvements

1.44.0

CURRENT Dec 15, 2022

  • Bug fixes and other minor improvements

1.43.0

BETA Dec 13, 2022

  • We added the ability to store, view, and search a subject’s phone numbers and label them

1.42.4

CURRENT Dec 12, 2022

  • Bug fixes and other minor improvements

1.42.3

CURRENT Nov 29, 2022

  • We fixed a bug that added milliseconds to the timestamp returned after consent creation

1.42.2

CURRENT Nov 17, 2022

  • Bug fixes and other minor improvements

1.42.1

CURRENT Nov 16, 2022

  • Security fixes

1.42.0

CURRENT Nov 15, 2022

  • Overall stability improvements

1.40.3

CURRENT Oct 28, 2022

  • Add GET /subjects/:subject_id/consent/last endpoint

1.40.2

CURRENT Oct 25, 2022

  • Overall stability improvements

1.40.1

CURRENT Oct 20, 2022

  • Overall stability improvements

1.40.0

CURRENT Oct 17, 2022

  • Overall stability improvements

1.30.7

CURRENT Oct 14, 2022

  • Overall stability improvements

1.30.6

CURRENT Oct 13, 2022

  • Reject requests not encoded in UTF-8

1.30.5

CURRENT Sep 29, 2022

  • Overall stability improvements

1.30.4

CURRENT Sep 22, 2022

  • Overall stability improvements

1.30.3

CURRENT Sep 21, 2022

  • Overall stability improvements

1.30.2

CURRENT Sep 19, 2022

  • Overall stability improvements

1.30.1

CURRENT Sep 16, 2022

  • Overall stability improvements

1.30.0

CURRENT Sep 12, 2022

  • Minor bug fixes

1.29.2

CURRENT Sep 09, 2022

  • Overall stability improvements

1.29.1

CURRENT Aug 31, 2022

  • Overall stability improvements

1.29.0

CURRENT Aug 31, 2022

  • Overall stability improvements

1.28.3

CURRENT Aug 29, 2022

  • Overall stability improvements

1.28.2

CURRENT Aug 25, 2022

  • Overall stability improvements

1.28.1

CURRENT Aug 22, 2022

  • Minor bug fixes

1.28.0

CURRENT Aug 18, 2022

  • Overall stability improvements

1.27.0

CURRENT Aug 17, 2022

  • Overall stability improvements

1.26.4

CURRENT Aug 03, 2022

  • Overall stability improvements

1.26.3

CURRENT Jul 27, 2022

  • Overall stability improvements

1.26.2

CURRENT Jul 22, 2022

  • Overall stability improvements

1.26.1

CURRENT Jul 06, 2022

  • Minor bug fixes

1.26.0

CURRENT Jun 30, 2022

  • Overall stability improvements

1.25.0

CURRENT Jun 17, 2022

  • Overall stability improvements

1.24.0

CURRENT Jun 14, 2022

  • Overall stability improvements

1.23.0

CURRENT Jun 09, 2022

  • Overall stability improvements

1.22.2

CURRENT Jun 03, 2022

  • Security fixes

1.22.1

CURRENT May 27, 2022

  • Overall stability improvements

1.21.1

CURRENT May 22, 2022

  • Bug fixes

1.21.0

CURRENT May 22, 2022

  • Overall stability improvements

1.20.0

CURRENT May 18, 2022

  • Overall stability improvements

1.19.0

CURRENT Mar 10, 2022

  • Overall stability improvements

1.18.1

CURRENT Mar 03, 2022

  • Overall stability improvements

1.18.0

CURRENT Mar 02, 2022

  • Security fixes

1.17.7

CURRENT Mar 01, 2022

  • Overall stability improvements

1.17.6

CURRENT Feb 01, 2022

  • Overall stability improvements

1.17.5

BETA Jan 28, 2022

  • Add /subjects/:subject_id/consent/last endpoint

1.17.4

CURRENT Jan 25, 2022

  • Bug fixes and other minor improvements

1.17.3

CURRENT Jan 18, 2022

  • Bug fixes and other minor improvements

1.17.2

CURRENT Dec 06, 2021

  • Bug fixes and other minor improvements

1.17.1

CURRENT Dec 02, 2021

  • Fix subject retrieval with periods in ID

1.17.0

BETA Nov 11, 2021

CURRENT Nov 11, 2021

  • Add total count to list endpoints

1.16.2

CURRENT Oct 07, 2021

  • Bug fixes and other minor improvements

1.16.1

CURRENT Jun 08, 2021

  • Bug fixes and other minor improvements

1.16.0

CURRENT Sep 22, 2021

  • Overall stability improvements

1.15.0

CURRENT Jun 22, 2021

  • Overall stability improvements

1.14.0

CURRENT Jun 08, 2021

  • Overall stability improvements

1.13.0

CURRENT May 02, 2021

  • Bug fixes and other minor improvements

1.12.0

CURRENT Nov 10, 2020

  • Bug fixes and minor improvements

1.11.0

CURRENT Oct 16, 2020

  • Bug fixes and minor improvements

1.10.0

CURRENT Sep 25, 2020

  • Overall stability improvements

1.9.0

CURRENT Aug 17, 2020

  • Overall stability improvements

1.8.0

CURRENT Aug 11, 2020

  • End users’ data are now encrypted

1.7.0

CURRENT Jul 17, 2020

  • Internal error handling improvements

1.6.0

CURRENT Jul 13, 2020

  • App stability improvements

1.4.2

CURRENT May 28, 2020

  • Proofs are now returned as downloadable links

1.3.0

CURRENT May 12, 2020

  • Improved ip_address check to be ipv4 or ipv6

1.2.0

CURRENT April 28, 2020

  • Performance improvements

1.1.1

CURRENT April 6, 2020

  • Improved logging system for better issues troubleshooting
  • Updated dependencies to remove security issues

1.0.3

CURRENT March 25, 2020

  • Project moved to a MongoDB infrastructure
  • Bug fixes and performance improvements

0.31.0

CURRENT November 26, 2019

  • We’ve released the features that so far have only been available in Beta
  • Bug fixes

0.24.0

BETA September 18, 2019

  • Fix for GET /consent/:id returning a decimal value as legal_notices’ version instead of an integer

0.23.0

CURRENT July 23, 2019

  • Fix for GET /legal_notices/:identifier not returning content field

0.22.2

CURRENT June 17, 2019

  • Prepare project for infrastructure migration
  • Bug fixes and performance improvements

0.19.0

CURRENT April 5, 2019

  • Update subject timestamp to reflect the latest update time instead of the creation time
  • Bug fixes and performance improvements

0.16.0

BETA March 20, 2019

  • Use X-REAL-IP header instead of X-FORWARDED-FOR when calculating IP address to be stored
  • Clean some documents having wrong IP addresses saved

0.14.1

BETA February 8, 2019

  • Reindex some data due to DigitalOcean outage
  • Bug fixes

0.11.0

BETA January 17, 2019

  • Added GET /legal_notices endpoint

0.10.0

BETA November 21, 2018

  • Added support for fulltext parameter on Consent and Subject index
  • Bug fixes

0.8.0

CURRENT November 6, 2018

  • Added the ability to unescape JSON response through unescape_json parameter
  • Bug fixes

0.6.0

BETA October 1, 2018

  • Added IP address field on consents and IP address autodetection
  • Bug fixes

0.5.0

BETA September 26, 2018

  • Introduced additional filters on GET /consent

0.4.0

CURRENT August 16, 2018

  • Beta channel added
  • Bug fixes

0.10.1

CURRENT December 27, 2021

  • It’s possible to use numbers as a name on an input field

0.10.0

CURRENT November 11, 2021

  • The “textarea” fields are now mappable on consent.proofs

0.9.1

BETA May 26, 2021

CURRENT May 26, 2021

  • Fixed a conflict with Elementor Slides widget

0.9.0

CURRENT November 3, 2020

  • You can now pass an ID string for the “submit” button and the “form” selector
  • Conflicts solved with the Cookie Solution logger

0.8.10

BETA October 8, 2019

CURRENT November 27, 2019

  • Fix for input names/ids of “submit”

0.8.9

BETA July 29, 2019

CURRENT August 20, 2019

  • Bug fixes

0.8.8

BETA June 12, 2019

CURRENT June 20, 2019

  • Bug fixes

0.8.7

CURRENT May 14, 2019

  • Call submit function callbacks (.success and .error) inside the instruction resolver

0.8.6

CURRENT April 29, 2019

  • Override cons_instruction.push method
  • Always execute init function first and remove form/submit-btn parameters on init function

0.8.5

CURRENT March 28, 2019

  • Added the ability to exclude elements using map object
  • Added the ability to map hidden fields
  • Bug fixes

0.8.2

CURRENT November 28, 2018

  • Added feature for autodetect IP address
  • Bug fixes

0.8.0

CURRENT September 1, 2018

  • Added feature for asynchronous loading

0.7.3

CURRENT August 10, 2018

  • Added a callback function on init
  • Bug fixes

0.6.3

CURRENT June 29, 2018

  • Add feature Override values via JSON object
  • Feature for Map field via javascript
  • Bug fixes

0.4.3

CURRENT April 10, 2018

  • Added the writeToLocalStorage option to the functions record (default false) and load (default true)
  • Added the sendToLocalStorageAtLoad option to the init function (default true)
  • Bug fixes

See also

The post Consent Database changelog appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Google and TCF 2.0: how to collect consent for personalized ads https://www.iubenda.com/en/help/16041-google-tcf-consent-personalized-ads/ Fri, 22 Mar 2019 15:47:55 +0000 https://help.iubenda.com/?p=16041 If you’re a publisher using Google services like Ad Manager, AdMob, and AdSense, you need to comply with Google’s EU Consent policy and collect explicit consent to ad personalization before displaying personalized ads to EU users. As you can see below, when consent for ad personalization is not collected, Google will serve your EU users […]

The post Google and TCF 2.0: how to collect consent for personalized ads appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

If you’re a publisher using Google services like Ad Manager, AdMob, and AdSense, you need to comply with Google’s EU Consent policy and collect explicit consent to ad personalization before displaying personalized ads to EU users.

As you can see below, when consent for ad personalization is not collected, Google will serve your EU users with non-personalized ads (or no ads at all) by default, impacting your ad revenue.

Google’s requirements

To meet Google’s requirements, you must allow users to consent to or reject processing for Google’s ad personalization.

One way to do this is to take advantage of the Transparency and Consent Framework v2.0: Google now fully supports TCF 2.0 and is included on the TCF global vendor lists.

If you’d rather not use the TCF but still need to handle personalized/non-personalized ad requests, please contact us.

Before listing Google’s requirements to serve personalized ads, we need to talk briefly about purpose and legal basis. According to TCF 2.0, advertising services (also known as vendors) like Google are allowed to process personal information based on 10 purposes:

  1. Store and/or access information on a device
  2. Select basic ads
  3. Create a personalized ads profile
  4. Select personalized ads
  5. Create a personalized content profile
  6. Select personalized content
  7. Measure ad performance
  8. Measure content performance
  9. Apply market research to generate audience insights
  10. Develop and improve products
TCF advertising tracking preferences - iubenda Cookie Solution

It’s also worth adding that, to process personal data, vendors can rely on two alternative legal bases: users’ consent or legitimate interest. As a publisher, you need to allow your users to freely give, deny, or withdraw their consent for Google’s ad personalization at any time.

Our Privacy Controls and Cookie Solution allows your users to customize their advertising tracking preferences and allows you to choose which purposes are presented to your users – disabling specific purposes entirely if needed. You can also determine the viable legal basis for certain purposes (consent and/or legitimate interest). More info in our complete guide to TCF 2.0.

Requirements to serve personalized ads

Google will serve personalized ads when all of the following criteria are met:

  • The end-user grants Google consent to:
    • Store and/or access information on a device (Purpose 1)
    • Create a personalized ads profile (Purpose 3)
    • Select personalized ads (Purpose 4)
  • Legitimate interest is established (or consent is granted, where a publisher configures their CMP to use publisher restrictions to request consent for Google) for Google to:
    • Select basic ads (Purpose 2)
    • Measure ad performance (Purpose 7)
    • Apply market research to generate audience insights (Purpose 9)
    • Develop and improve products (Purpose 10)

Requirements to serve non-personalized ads

If the requirements for personalized ads are not met, Google will serve non-personalized ads when all of the following criteria are met:

  • The end-user grants Google consent to:
    • Store and/or access information on a device (Purpose 1)
  • Legitimate interest (or consent, where a publisher configures their CMP to request it) is established for Google to:
    • Select basic ads (Purpose 2)
    • Measure ad performance (Purpose 7)
    • Apply market research to generate audience insights (Purpose 9)
    • Develop and improve products (Purpose 10)

If you don’t have consent for Purpose 1, Google will attempt to serve limited ads if you have legitimate interest or consent for Purposes 2, 7, 9, and 10.

Summing up:

Purposes Personalized ads Non-personalized ads Limited ads
1, 2, 3, 4, 7, 9, and 10 ✅
1, 2, 7, 9, and 10 ✅
2, 7, 9, and 10 ✅

If neither set of requirements above are met, Google will serve no ads.

Occasionally, some users may receive a message from Google stating that: “You are not disclosing all the third parties you work with, including the Ad Tech Providers (ATPs) and therefore you’re not compliant with Google’s policy”.

If you’ve received such a message, don’t panic, we’ll show you how you can fix this below.

The reason you might have received it is because, from a Google check, some of the Ad Technology Providers you selected during the setup of Google Ad Manager don’t appear to match the ones declared within your CMP.

If you run personalized ads on your website/app, within your Google Ad Manager / AdSense UI (Admin > EU User Consent page), you should have selected one of these options:

Google usually comes with a list of the ATPs that are found to be missing.

To fix the issue and be compliant with Google’s request you must therefore declare which third parties could measure and serve ads for EEA and UK users on your websites and apps (Ad Technology Provider Controls: Ad Manager Help CenterAdMob Help CenterAdSense Help Center) including all of them inside your Privacy and Cookie policy.

If you need help on how to add services to your Privacy and Cookie Policy check our guide.

❗ By default, iubenda privacy policy generator doesn’t allow you to add more than 150 services. If you need to, please reach out to us and we’ll help you to get it done.

Lastly, you may also be requested to include this link about Google processing activities of users’ data. 
The link is automatically embedded inside the generated policy when you select any Google’s advertising services within our generator: 

  • Google DV360, 
  • Google Campaign Manager 360, 
  • Google Ads Similar audiences 
  • Google Ad Manager 
  • Google Ad Manager Audience Extension, 
  • Google Ads Remarketing, Google 
  • AdSense 

If you are requested to, and you have to show it to Google, you can find it inside complete view of your Privacy Policy, in the description of Google’s service under the “Detailed information on the processing of Personal Data” section, clicking on “Google’s partner policy”, as shown below:

google's partner policy

iubenda and TCF 2.0

 

Thanks to our support for TCF 2.0, our IAB registered Consent Management Platform (CMP) allows you to collect consent for Google’s ad personalization:

  1. Tick the Enable IAB Transparency and Consent Framework option in the Privacy Controls and Cookie Solution configurator (if you haven’t already activated the Privacy Controls and Cookie Solution, here’s a tutorial on how to get started).
  2. Paste the resulting Privacy Controls and Cookie Solution whitin the <head> section of your website’s HTML as the first element.
  3. Use one of the prior blocking methods supported by our Privacy Controls and Cookie Solution to directly block Google’s scripts and execute them only after consent has been collected.
How to comply with country-specific requirements

Different countries might have some specific requirements you may have to comply.
The Belgian Data Protection Authority (DPA) has recently issued a decision on IAB Europe and the Transparency and Consent Framework (TCF) setting out some additional requirements to provide enhanced transparency and more informed consent to users.

iubenda can help you meet the most stringent requirements, so if you operate with Belgium make sure you use this configuration.

Furthermore, some other national DPAs, like in Italy, have excluded the use of legitimate interest as a valid legal basis, and it’s important to restrict it to “Consent only” if you operate in those countries.

To make sure you set up the best configuration you can check the country-specific requirements in our Cookie Consent Cheatsheet.

For more information, please read our guide to iubenda’s CMP and IAB TCF 2.0 or view the demo of our Privacy Controls and Cookie Solution with TCF 2.0 enabled.

Additional Consent Mode

Our Privacy Controls and Cookie Solution also supports Google’s Additional Consent Mode, which allows you to gather consent for Google ad partners that are not yet part of the Transparency and Consent Framework but are on Google’s Ad Tech Providers (ATP) list.

Don’t confuse Additional Consent Mode with Consent Mode, a feature that allows you to manage cookies for advertising and analytics purposes.

To enable this feature, select the checkbox Support Google’s Additional Consent Mode, to gather consent for Google’s advertising partners that do not adhere to the TCF within the Privacy Controls and Cookie Solution configurator (in some cases the checkbox will be automatically selected when you enable the TCF for the first time):

This will add "googleAdditionalConsentMode": true to your code snippet:

Important: With Remote Configuration, this change is directly pushed to the website when you save. No new code embedding is needed.

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "countryDetection": true,
        "consentOnContinuedBrowsing": false,
        "perPurposeConsent": true,
        "enableTcf": true,
        "googleAdditionalConsentMode": true,
        "banner": {
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true,
            "rejectButtonDisplay": true,
            "position": "float-top-center"
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Fixes for common errors

Troubleshoot some of the most common TCF 2.0 errors across Ad Manager, AdSense, and AdMob by taking the following actions:

Error Description Suggested action to take (if any)

1.1

Caused by user action. Error 1.1 occurs if the user doesn’t give consent to Google’s ads. This means that almost any website will get at least some 1.1 errors.

This error is perfectly normal as long as the number of occurrences is in line with the number of users choosing “Reject” on the cookie notice (if implemented), or disabling ad tracking manually through the TCF preferences. This error, therefore, should only cause concern if it’s abnormally high.

2.1

Related to the configuration of the TCF on the site for the consent to personalize ads.

Google doesn’t serve ads, not even non-personalized ads, if the user has not expressed a preference in regards to cookies or has not given consent. To solve this problem, you must only run the Google script when you have gained consent.

We support two main implementation methods for our Privacy Controls and Cookie Solution. If you work with Google ads and you’re getting this error, you must mandatorily block Google’s scripts prior to collecting consent using one of the methods listed here.

Alternatively, the error could be due to an incorrect cmpStatus sent by the CMP.

4.1

It occurs when the TC string being generated is using a version of the Global Vendor List (GVL) that doesn’t include Google, because it was collected pre-August 1st, 2020 (i.e before Google joined the GVL).

Modify your CMP configuration to ensure consent collected prior to August 1st is invalidated. In the Privacy Controls and Cookie Solution, this can be done by setting "invalidateConsentBefore": "2020-08-01" using this method.

5.2

Google doesn’t allow to share consent with other sites, as consent has to be service-specific.

Our Privacy Controls and Cookie Solution no longer saves global consent, so there’s no need for any adjustments on your part.

6.1

Consent served is v1 and not v2. This can happen when using AMP because of the cache (keep in mind that errors are per ad unit and are cumulative over the last 7 days).

Update your AMP pages in order to use the new consentRequired and checkConsentHref parameters as specified in our guide.

See also

The post Google and TCF 2.0: how to collect consent for personalized ads appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to start the iubenda initializer asynchronously https://www.iubenda.com/en/help/15546-how-to-start-the-iubenda-initializer-asynchronously/ Tue, 19 Feb 2019 13:34:56 +0000 https://help.iubenda.com/?p=15546 If you’d like to load the iubenda button asynchronously after loading other site content (rather than initializing on page load as is default), simply follow the steps outlined below. Place the following function in the page BODY. As this will be used instead of the standard embed code, please be sure to replace Xxxxxx (seen […]

The post How to start the iubenda initializer asynchronously appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you’d like to load the iubenda button asynchronously after loading other site content (rather than initializing on page load as is default), simply follow the steps outlined below.

Place the following function in the page BODY. As this will be used instead of the standard embed code, please be sure to replace Xxxxxx (seen in the example below) with your own privacy policy id.

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/embedding_privacy_policy/initializer_async_callback.js]

You can then implement this by adding the iubenda callback to the function that loads your dynamic content.

For example,

function initializeWebSiteContent() {
    // create list
    // populate list
    // apply style to list
    startIubendaBadge();
}

See also

The post How to start the iubenda initializer asynchronously appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use the Consent Database with WordPress & Contact Form 7 (JavaScript method) https://www.iubenda.com/en/help/13083-consent-solution-wordpress-contact-form-7-2/ Fri, 23 Nov 2018 13:58:09 +0000 https://help.iubenda.com/?p=13083 This tutorial uses Contact Form 7, a popular WordPress plugin, to illustrate how you can integrate the Consent Database with your WordPress forms. If you’re using another plugin you may still refer to this tutorial as the implementation approach is generally the same. Alternatively, you can use our WordPress plugin, compatible with Contact Form 7, […]

The post How to use the Consent Database with WordPress & Contact Form 7 (JavaScript method) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

This tutorial uses Contact Form 7, a popular WordPress plugin, to illustrate how you can integrate the Consent Database with your WordPress forms. If you’re using another plugin you may still refer to this tutorial as the implementation approach is generally the same.

Alternatively, you can use our WordPress plugin, compatible with Contact Form 7, WP Forms, WordPress comment, Elementor Forms, and WooCommerce checkout forms.

To implement our Consent Database with Contact Form 7 you can use the JavaScript method of implementing the Consent Database

In short, the process involves:

  • embedding the Consent Database code;
  • creating (or modifying) your CF7 form in a way that includes the necessary id tags; and finally
  • sending the consent data to iubenda APIs.
 

1. Embed the Consent Database code

To begin, copy the code you find under Consent Database > Embed > Javascript.

Consent Solution code

Now paste this code inside the head of all your pages (in WordPress, you can easily edit the head and footer sections for all pages in your theme editor or simply use a theme editor plugin if you’re not comfortable directly editing theme files).

2. Create or modify your CF7 form

Once you included our code inside your head, access your WordPress dashboard and create a form using the Contact Form 7 plugin (if you already have a CF7 form active on your site, simply head to your contact forms overview page and click on edit under the form you’d like to integrate with the Consent Database).

Contact Form 7 + Consent Solution

Using a basic example (name, email, message and newsletter subscription) your form will look something like the following:

<label> Your name (required)
    [text* your-name] </label>

<label> Your email (required)
    [email* your-email] </label>

<label> Your message (required)
    [textarea* your-message] </label>

[acceptance generic] I agree to the processing of my personal data to receive a response to this contact request [/acceptance]

[acceptance newsletter optional] Send me information about products, services, deals or recommendations by email (optional) [/acceptance]

[submit "Send"]

<p>See our <a href="/privacy-policy">privacy policy</a> for more information on how we process your data.</p>

Now we have to modify the form’s code to map the various inputs of the form, so that the Consent Database can actually identify and pull the information that your users enter into the various inputs.

To do the mapping we can use the data-cons- attributes, such as:

  • data-cons-subject="first_name"
  • data-cons-subject="last_name"
  • data-cons-subject="full_name"
  • data-cons-subject="email"
  • data-cons-preference="privacy_policy" (for checkboxes, in this case “privacy_policy”, but you can call it as you prefer, unlike the previous keys first_name, last_name, full_name and email)
  • data-cons-exclude (to exclude certain fields, like the password one)

Since you can’t add data-cons- attributes to the inputs generated with Contact Form 7, you’ll have to use the load (or submit) function with the map object.

In order for the load/submit function to work you’ll need:

  • an id for the form element;
  • an id for the submit element; and
  • different names for all the subject and preferences inputs.

While CF7 allows you to add different names to your input fields during the form editing process, you have to manually add the ids for the form and the submit element.

So you’ll need to modify the submit button from:

[submit "Send"]

to:

[submit id:cf7_submit "Send"]

Note: add the id before the “Send” label.

With an id attribute also added to the other inputs, your code will become:

<label> Your name (required)
    [text* your-name id:cf7_name] </label>

<label> Your email (required)
    [email* your-email id:cf7_email] </label>

<label> Your message (required)
    [textarea* your-message id:cf7_message] </label>

[acceptance generic] I agree to the processing of my personal data to receive a response to this contact request [/acceptance]

[acceptance newsletter optional] Send me information about products, services, deals or recommendations by email (optional) [/acceptance]

[submit id:cf7_submit "Send"]

<p>See our <a href="/privacy-policy">privacy policy</a> for more information on how we process your data.</p>

Now save your modifications.

If you’re modifying an already-existing form on your site, jump to the section below, otherwise (if you’ve only just created the form) follow the standard method of embedding your CF7 form — copy the form shortcode generated by CF7:

Contact Form 7 + Consent Solution

Paste it in an empty page (e.g., “Contact us”):

Contact Form 7 + Consent Solution

Next, you’ll need to add an id to the form. To do this you’ll need to edit the shortcode generated by Contact Form 7. So for example, if your shortcode was previously:

[contact-form-7 id="10" title="Contact"]

It should become:

[contact-form-7 id="10" title="Contact" html_id="cf7_form"]
Contact Form 7 + Consent Solution

Now that your form is ready you need to make sure that it sends the information to the Consent Database when the user fills in and submits the form. There are two ways to do this:

  • the load method allows you to send the Consent data to iubenda APIs asynchronously;
  • the submit method allows you to send the Consent data to iubenda APIs synchronously.

Load method

The load function allows you to bind fields of the consent object to input fields of your <form> and to automatically record the consent either by setting up a trigger function under submitElement: or programmatically via a dedicated trigger. By default, this method writes into localStorage to protect from any loss of data in case a new page is loaded before the Javascript has finished executing.

Note: the load function must only be invoked after the declaration of the form object (as can be seen in the example below).

Here’s the load function with the map object.

<script type="text/javascript">
    _iub.cons_instructions.push(["load", {
        submitElement: document.getElementById("cf7_submit"),
        form: {
            selector: document.getElementById("cf7_form"),
            map: {
                subject: {
                    first_name: "your-name",
                    email: "your-email"
                },
                preferences: {
                    generic: "generic",
                    newsletter: "newsletter"
                }
            }
        },
        consent: {
            legal_notices: [{
                    identifier: "privacy_policy",
                },
                {
                    identifier: "cookie_policy",
                }
            ],
        }
    }])
</script>

In the code above please note:

  • the cf7_submit and cf7_form ids;
  • the first_name and email subject mapping (remember that you have four non-editable options: first_name, last_name, full_name and email);
  • the checkbox preferences, where you’re free to use the keys you like (in our case, generic and newsletter);
  • the legal_notices, which are automated if you sync your iubenda legal documents with the Consent Database (just use the standard identifiers privacy_policy and cookie_policy).

Be sure to include the load method AFTER the form (for example inside the footer of your contact page), and you’re done! 

Once you’ve collected your consents, you’ll be able to sort and analyze your user consent data in the Consent Dashboard.

Read the JS documentation for more information about the load method.

Submit method

The submit method allows you to send the Consent data to iubenda APIs synchronously.

Caution

Please note that this method will not work if there is a redirect after the form is submitted.

<script>
    document.getElementById("cf7_submit").onclick = function() {
        sendToConsentSolution()
    };

    function sendToConsentSolution() {
        var inputName = document.getElementById("cf7_name").value;
        var inputEmail = document.getElementById("cf7_email").value;
        var inputMessage = document.getElementById("cf7_message").value;
        var subjectId = inputEmail.toLowerCase().replace(/\W/g, '-');
        _iub.cons_instructions.push(["submit", {
            form: {
                selector: document.getElementById("cf7_form"),
                map: {
                    subject: {
                        first_name: "your-name",
                        email: "your-email"
                    },
                    preferences: {
                        generic: "generic",
                        newsletter: "newsletter"
                    }
                }
            },
            consent: {
                subject: {
                    id: subjectId
                },
                legal_notices: [{
                        identifier: "privacy_policy"
                    },
                    {
                        identifier: "cookie_policy"
                    }
                ]
            }
        }])
    }
</script>

In the code above please note:

  • the cf7_submit and cf7_form ids;
  • the first_name and email subject mapping (remember that you have four non-editable options: first_name, last_name, full_name and email);
  • the checkbox preferences, where you’re free to use the keys you like (in our case, generic and newsletter);
  • the legal_notices, which are automated if you sync your iubenda legal documents with the Consent Database (just use the standard identifiers privacy_policy and cookie_policy);
  • optional: instead of letting it be generated automatically, we can customize the subjectId with the email address – for example – of the subject, all lowercase and with the symbol “-” instead of “.” and “@” (this way for john.doe@iubenda.com the subjectId would become john-doe-iubenda-com).

Optional: for a cleaner output, you can manually edit the proof of consent. Using the example above, the final result would be:

<script>
    document.getElementById("cf7_submit").onclick = function() {
        sendToConsentSolution()
    };

    function sendToConsentSolution() {
        var inputName = document.getElementById("cf7_name").value;
        var inputEmail = document.getElementById("cf7_email").value;
        var inputMessage = document.getElementById("cf7_message").value;
        var subjectId = inputEmail.toLowerCase().replace(/\W/g, '-');
        _iub.cons_instructions.push(["submit", {
            form: {
                selector: document.getElementById("cf7_form"),
                map: {
                    subject: {
                        first_name: "your-name",
                        email: "your-email"
                    },
                    preferences: {
                        generic: "generic",
                        newsletter: "newsletter"
                    }
                }
            },
            consent: {
                subject: {
                    id: subjectId
                },
                legal_notices: [{
                        identifier: "privacy_policy"
                    },
                    {
                        identifier: "cookie_policy"
                    }
                ],
                proofs: [{
                    content: "{" +
                        "\"user_name\": \"" + inputName + "\"," +
                        "\"user_email\": \"" + inputEmail + "\"," +
                        "\"user_message\": \"" + inputMessage + "\"," +
                        "}",
                    form: "<form id=\"cf7_form\">" +
                        "<label>Your name (required)<br>" +
                        "<input type=\"text\" name=\"your-name\" id=\"cf7_name\">" +
                        "</label><br>" +
                        "<label>Your email (required)<br>" +
                        "<input type=\"email\" name=\"your-email\" id=\"cf7_email\">" +
                        "</label><br>" +
                        "<label>Your message (required)<br>" +
                        "<textarea name=\"your-message\" cols=\"40\" rows=\"10\" id=\"cf7_message\"></textarea>" +
                        "</label><br>" +
                        "<input type=\"checkbox\" name=\"generic\"> I agree to the processing of my personal data to receive a response to this contact request<br>" +
                        "<input type=\"checkbox\" name=\"newsletter\"> Send me information about products, services, deals or recommendations by email (optional)<br>" +
                        "<input type=\"submit\" value=\"Send\" id=\"cf7_submit\">" +
                        "<p>See our <a href=\"/privacy-policy\">privacy policy</a> for more information on how we process your data.</p>" +
                        "</form>"
                }]
            }
        }])
    }
</script>

Be sure to include the submit method AFTER the form (e.g., inside the footer of your contact page), and you’re done!

Once you’ve collected your consents, you’ll be able to sort and analyze your user consent data in the Consent Dashboard.

Read the JS documentation for more information about the submit method.

See also

The post How to use the Consent Database with WordPress & Contact Form 7 (JavaScript method) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution – Squarespace Integration Guide https://www.iubenda.com/en/help/12848-cookie-solution-squarespace-integration-guide-2/ Tue, 06 Nov 2018 10:01:33 +0000 https://help.iubenda.com/?p=12848 Except for exempt categories of cookies, the Cookie Law also requires you to obtain users’ informed and active consent before storing cookies on a user’s device and/or tracking them. Scripts that install or could install cookies must be blocked before consent is obtained; users must be able to deny or withdraw consent, and they must be fully informed of […]

The post Privacy Controls and Cookie Solution – Squarespace Integration Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Except for exempt categories of cookies, the Cookie Law also requires you to obtain users’ informed and active consent before storing cookies on a user’s device and/or tracking them. Scripts that install or could install cookies must be blocked before consent is obtained; users must be able to deny or withdraw consent, and they must be fully informed of what actions constitute consent. 

We suggest that you take a look at this article for further details on complying with the Cookie Law.

Our Privacy Controls and Cookie Solution makes it easy for you to meet these requirements by allowing you to:

  • easily inform users via banner and a dedicated cookie policy page (which is automatically linked to your privacy policy and integrates what’s necessary for cookie law compliance);
  • obtain and save cookie consent settings;
  • preventively block scripts prior to consent; and
  • keep track of consent and save consent settings for each user for up to 12 months from the last site visit.

You can collect consent via multiple mechanisms including continued browsing, scrolling, and/or specific clicking actions. Keep in mind though that allowed consenting actions may differ depending on the Member State law.

Setting-up the Privacy Controls and Cookie Solution

The process is straightforward:

If you’ve already integrated the privacy policy on your Squarespace site (which also includes the cookie policy if you’ve activated it), you can jump directly to “Embedding the Privacy Controls and Cookie Solution”. Otherwise, continue reading below.

Create your account then go to your Dashboard > website/app area:

  • click on Generate Now under Privacy Controls and Cookie Solution;
  • configure and customize as you’d like;
  • integrate your cookie policy; and
  • embed into your site.
Note

The Privacy Controls and Cookie Solution requires that you link to a cookie policy from you banner as legally required. If you have the cookie policy feature activated on your iubenda account (as explained here), the Privacy Controls and Cookie Solution automatically integrates your cookie policy into the solution once the option is selected. Otherwise, if you already have your own compliant cookie policy, you can simply insert your own link there. Either way, please remember that a cookie policy is required.

Embedding the Privacy Controls and Cookie Solution on your site

To configure the iubenda Privacy Controls and Cookie Solution you must modify the HEAD of your Squarespace site. To do so, you first need to click on Settings > Advanced > Code Injection.

Code Injection is a Squarespace premium feature available only on Business and Commerce plans.

On this screen that follows, you will need to copy paste your iubenda Privacy Controls and Cookie Solution code in the box of the Header section.

You can find your Privacy Controls and Cookie Solutioncode here:  Dashboard > [Your website/app] then Privacy Controls and Cookie Solution > Embed.

Squarespace - Cookie Solution
The IDs “12345678” are just samples; your siteId and cookiePolicyId will have their own IDs.

Now simply click on Save.

This will cause the iubenda Cookie Banner, Consent Banner and Privacy Controls to appear on the page at each user’s first visit. User consent will be registered via the latter’s continued browsing activity and then memorized so that the Privacy Controls and Cookie Solution will not be reactivated on the same user’s next visit.

Squarespace - Cookie Solution

All available options to customize the Cookie Banner, Consent Banner and Privacy Controls’s style and behavior are described in this guide.

Few categories of cookies are exempt from the consent requirement. Therefore, you’ll need to block scripts from running until you get valid user consent.

💡 Simplify your cookie-blocking process with auto-blocking!

Did you know that there’s a simpler option available for the prior blocking of cookies and trackers? Our auto-blocking feature automates the process, saving you time and effort.

If you prefer to manually tag your scripts that install or may install cookies, you can still follow the process below for step-by-step instructions and practical examples. However, we highly recommend considering the auto-blocking feature for a more streamlined approach.

👉 Click here to learn more about auto-blocking and how it can simplify your cookie-blocking process

How to implement prior blocking via manual tagging on your Squarespace site

Manual tagging is the method of prior-block we’ll be using for the tutorial below. You can view other methods here.

To set up prior blocking, you’ll need to make some minor changes to your site’s scripts. But it’s simple; just do the following:

  1. Identify the script/iframe for any additional services that are running on your website (e.g., Twitter follow button)
  2. Add some simple text to the HTML code (we’ll show you how below!)
  3. Save!

In this tutorial, we are going to block a Twitter follow button.

💡 Not sure which services you need to block? If you’re using a Cookie Policy generated by iubenda, the services listed in your Cookie Policy are most likely the ones you need to modify now.

In your account Dashboard, click Website and then click Edit

Then, find the script you need to modify (simply search for the service you want to block, in this case, it is the Twitter follow button) and then click on the Edit icon to open the code editor.

Now, we’re going to change the script. To do this, we will make 3 simple changes:
  • add this class: _iub_cs_activate to the script tags, and change the “type” attribute from text/javascripttext/plain
  • replace the src with data-suppressedsrc or suppressedsrc
  • specify the categories of the scripts/iframes with a special comma-separated data-iub-purposes attribute, e.g. data-iub-purposes="2" or data-iub-purposes="2, 3"

More about categories and purposes

Purposes are your legal reasons for processing the particular type of user data. Different scripts on your site will fall into different categories and serve different purposes. For example, Google Analytics may be used for measurement, while the Pinterest button may be used for Experience (Purpose 3 below). Purposes are grouped into 5 categories each with an id (1, 2, 3, 4, and 5):

  • Necessary (id: 1)
  • Functionality (id: 2)
  • Experience (id: 3)
  • Measurement (id: 4)
  • Marketing (id: 5)

For even more detailed info on categories and purposes, see our guide here.

Let’s take the Twitter follow button as an example:

We need to 1. Add the class and change the “type” attribute, 2. replace the src and 3. specify the categories.

And the code structure should be like this:

Prior blocking checkbox - Flow page
<p>Twitter follow button:</p>

        <!-- please note type="text/plain" class="_iub_cs_activate" data-suppressedsrc="..." (manual tagging) and data-iub-purposes="3" (per-category consent) -->
<a href="https://twitter.com/iubenda" class="twitter-follow-button" data-show-count="false">Follow @iubenda</a>
  <script async type="text/plain" class="_iub_cs_activate" data-suppressedsrc="https://platform.twitter.com/widgets.js" data-iub-purposes="3" charset="utf-8"></script>
Now that you’ve made your changes, simply hit save, and you’re done.

Not sure if you’ve set up correctly? Check out the live example and FAQs below

Live example

This is an example that shows everything we have described above, you can use this code pen as a guide to see what happens before and after blocking scripts via manual tagging.

(see the example)

To demonstrate the cookie blocking feature, we’ve embedded a YouTube video, and a Twitter follow button:
Follow @iubenda

Both scripts are blocked through manual tagging. Since both the YouTube video widget and the Twitter follow button are part of the Experience purpose (id 3) we’ve added data-iub-purposes="3" to their scripts so that the Privacy Controls and Cookie Solution can properly identify them for release.

Click on the Accept button – or just activate the “Experience” toggle – to release these scripts (refresh the page to return to the starting point).

How can I tell if I’ve set prior blocking up properly?

As you can see in the code pen example, the Youtube and Twitter scripts do not load if you do not consent. (You can test this function again by opening this link (https://codepen.io/iubenda/pen/KKKxmVO/?editors=1000) in incognito mode in your browser)

After you have saved, open your site in an incognito mode and check if the scripts you have blocked via manual tagging stay blocked until you consent.

Please refer to this dedicated article if you’d like to know how to block cookies before consent using other options available. ➔ Take a look at Google Consent Mode as an alternative to prior blocking, Google Tag Manager to Simplify the Blocking of Cookies, or the IAB Transparency & Consent Framework and how to enable it.

See also

The post Privacy Controls and Cookie Solution – Squarespace Integration Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to integrate iubenda’s Privacy Policy on Squarespace https://www.iubenda.com/en/help/12794-squarespace-privacy-policy/ Mon, 05 Nov 2018 16:53:49 +0000 https://help.iubenda.com/?p=12794 If you’re using Squarespace for your website, you need to create a Privacy (and Cookie) Policy to let your visitors know how you use their personal information. In fact, as stated on Squarespace’s Terms of Service (section “7.3 You Must Comply With Data Protection, Security And Privacy Laws”): If applicable law requires, you must provide and make available […]

The post How to integrate iubenda’s Privacy Policy on Squarespace appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you’re using Squarespace for your website, you need to create a Privacy (and Cookie) Policy to let your visitors know how you use their personal information.

In fact, as stated on Squarespace’s Terms of Service (section “7.3 You Must Comply With Data Protection, Security And Privacy Laws”):

If applicable law requires, you must provide and make available to your End Users on Your Sites a legally compliant privacy policy.

Once you got your policy with iubenda’s Privacy Policy Generator, you have two options – both available with a Pro/Ultra license – to integrate it on Squarespace:

💡 Our Privacy Policy Generator makes it easy to create a Privacy Policy for Squarespace. Check out our How to Generate a Privacy Policy guide (and video) to learn more.

Go to the Squarespace dashboard, click on your website and select Pages from the sidebar menu:

Squarespace - Dashboard

Click on the + sign next to Footer navigation and choose Link:

Squarespace - Create new page

Add the iubenda privacy policy link you got using the direct link integration method, call it “Privacy Policy” and click on Save:

Squarespace - Configure link
“12345678” is just a sample, your policy will have a different value

Delete the default privacy page (if any), reorder the links as you like, and you are done!

Squarespace - Privacy Policy

Direct text embedding

Caution

JavaScript and iframe embeds (like our) are only supported in the Squarespace Business plan.

First, you’ll need to create a new page where you’ll embed the text generated by iubenda. To do so, go to the Squarespace dashboard, click on your website and select Pages from the sidebar menu:

Squarespace - Dashboard

Then click on the + sign next to Footer navigation, choose Page, call it “Privacy Policy” and click on Start editing:

Squarespace - Create new page

Click on the + sign on the right to add a content block:

Squarespace - Add content block

Select Code:

Squarespace - Code block

Copy & paste the iubenda code, click on Apply, then Save:

Squarespace - Privacy Policy
“12345678” is just a sample, your policy will have a different value

Delete the default privacy page (if any), reorder the links as you like and you’re done.

Create a privacy policy for Squarespace

Start generating

See also

The post How to integrate iubenda’s Privacy Policy on Squarespace appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Configure your Content Security Policy for iubenda https://www.iubenda.com/en/help/12260-how-to-configure-content-security-policy-to-allow-iubenda-scripts-to-execute/ Thu, 18 Oct 2018 10:14:51 +0000 https://help.iubenda.com/?p=12260 This guide is for website administrators that use a Content Security Policy (CSP) on their site. Because a CSP allows website administrators to specify which domains the browser should consider to be valid sources of executable scripts, a CSP compatible browser will only execute scripts loaded in source files received from those whitelisted domains, ignoring […]

The post How to Configure your Content Security Policy for iubenda appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
This guide is for website administrators that use a Content Security Policy (CSP) on their site.

Because a CSP allows website administrators to specify which domains the browser should consider to be valid sources of executable scripts, a CSP compatible browser will only execute scripts loaded in source files received from those whitelisted domains, ignoring all other scripts.

This can cause some conflict with our Privacy and Cookie Policy, Terms and Conditions, Cookie Solution and Consent Database scripts as you can imagine, however, there is a simple fix.

How to Fix Conflicts Between Your CSP and iubenda

Here’s how to whitelist our Privacy and Cookie Policy, Terms and Conditions, Cookie Solution and Consent Database scripts, so that they can work properly with your CSP:

1. Add a nonce to inline scripts

First of all, you’ll need to use a cryptographic nonce (number used once), giving iubenda script tag a nonce attribute. The nonce value must match one in the list of trusted sources. For example:

<script type="text/javascript" nonce="EDNnf03nceIOfn39fn3e9h3sdfa">
  //iubenda snippet
</script>

Now, add the nonce to your script-src directive, appended to the nonce- keyword:

Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'

So, for example, in Cookie Solution’s case, the implementation will look something like:

<script type="text/javascript" nonce="EDNnf03nceIOfn39fn3e9h3sdfa">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": 12345678
        "cookiePolicyId": 12345678
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Please note that the nonce has been added only to the inline script. We’ll see how to handle external scripts in the next step.

Important

Remember that nonces must be regenerated for every page request and they must be unguessable.

2. Whitelist iubenda’s domain for external scripts

Now you need to allow content from iubenda’s domain and subdomains so that external scripts can load from there. Here’s how to configure the Content Security Policy:

Content-Security-Policy: 
  default-src 'self'; 
  script-src 'self' *.iubenda.com 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa' 'unsafe-eval'; 
  connect-src *.iubenda.com; 
  style-src 'unsafe-inline' *.iubenda.com; 
  frame-src *.iubenda.com; 
  img-src *.iubenda.com data:

And that’s it. You can find more information about CSP and common use cases at MDN Web Docs.

The post How to Configure your Content Security Policy for iubenda appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Customize Privacy and Cookie Policy internal links https://www.iubenda.com/en/help/11072-customize-privacy-and-cookie-policy-internal-links-2/ Wed, 05 Sep 2018 08:57:59 +0000 https://help.iubenda.com/?p=11072 You can customize the default privacy and cookie policy links included in our policies. This feature gives you more freedom and flexibility, especially if you embed the text of our policies into your pages. For example, you might want to hide the simplified privacy policy or the cookie policy link inside the complete privacy policy, […]

The post Customize Privacy and Cookie Policy internal links appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
You can customize the default privacy and cookie policy links included in our policies. This feature gives you more freedom and flexibility, especially if you embed the text of our policies into your pages.

For example, you might want to hide the simplified privacy policy or the cookie policy link inside the complete privacy policy, or set a custom URL for your privacy/cookie policy, so the user doesn’t leave your site.

Go to the privacy policy’s admin page under “Advanced settings” (dashboard > [your website] > Edit > Advanced settings) and click the toggle button next to “Customize internal links”:

Customize Privacy and Cookie Policy internal links

For each language of your policy, you can customize these 4 links:

  • Simplified Privacy Policy (inside the complete privacy policy) Simplified Privacy Policy link inside the complete privacy policy

  • Complete Privacy Policy (inside the simplified privacy policy) Complete Privacy Policy link inside the simplified privacy policy

  • Cookie Policy (inside the complete privacy policy) Cookie Policy link inside the complete privacy policy

  • Privacy Policy (inside the cookie policy) Privacy Policy link inside the cookie policy

Each link has 3 options:

  • Default – Normal behavior
  • Custom – Allows you to specify a custom address
  • Disabled – Removes the link

Customize Privacy and Cookie Policy internal links

Important

If you choose to disable the cookie policy link inside the privacy policy, the entire cookie policy section in the privacy policy will be hidden.

Cookie policy section inside the privacy policy

See also

The post Customize Privacy and Cookie Policy internal links appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution for Shopify: how to display a cookie banner and collect cookie consent https://www.iubenda.com/en/help/10811-cookie-solution-shopify-3/ Tue, 28 Aug 2018 16:05:03 +0000 https://help.iubenda.com/?p=10811 If you’re here, you’ve probably set up your Shopify shop and need to manage cookies. Or are you considering setting up your Shopify shop but are wondering how to display your cookie notice? Let’s see how to do it 👉 Once you’ve integrated the Privacy Policy on your Shopify website (which also includes the cookie […]

The post Privacy Controls and Cookie Solution for Shopify: how to display a cookie banner and collect cookie consent appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you’re here, you’ve probably set up your Shopify shop and need to manage cookies. Or are you considering setting up your Shopify shop but are wondering how to display your cookie notice? Let’s see how to do it 👉

Once you’ve integrated the Privacy Policy on your Shopify website (which also includes the cookie policy if you’ve activated it) you can complete the configuration by embedding our Privacy Controls and Cookie Solution to:

  • display a fully customizable cookie banner
  • collect cookie consent
  • measure conversions and analytics for users who did not provide consent thanks to full support for Google Consent Mode
  • implement prior blocking, as required by the Cookie Law

In fact, except for exempt cookies, the Cookie Law includes not only the obligation to set up and show the user a Cookie Policy, but also to display a brief notice (banner) at the user’s first visit and to block scripts which install (or could install) cookies, until the user has granted consent.

👉 In this guide, you’ll learn how to integrate our Privacy Controls and Cookie Solution in your Shopify store. (In minutes!)

The method shown below uses Shopify’s Customer Privacy API (which automatically blocks cookies and trackers installed either by Shopify directly or by any plugins that support it).

Since Shopify has its own Customer Privacy API, it is recommended not to use the iubenda autoblocking feature. Instead, rely on Shopify’s native functionality for managing cookies and trackers.

1. First, go to your iubenda Dashboard and click on [Your website] > Privacy and Cookie Policy > Edit. You’ll notice a Cookie Policy box in the right column.

Activate Cookie Policy

2. Click on Activate cookie policy and Save changes: your Cookie Policy will be generated automatically based on the configuration of your Privacy Policy.

💡 If you already have your own Cookie Policy, you can add the link in the Advanced View of the Privacy Controls and Cookie Solution configurator. Select Custom under Cookie and Privacy Policy > Cookie Policy URL. More info on the Privacy Controls and Cookie Solution advanced guide.

1. Click on Generate now under Dashboard > [Your website/app] > Privacy Controls and Cookie Solution.

Cookie Solution - Generate your cookie banner

2. This will take you directly to the configuration panel of your cookie banner.

3. Once customized as you like, Save and Copy your Privacy Controls and Cookie Solution snippet.

Cookie Solution - Embed the cookie banner

3. Add the Privacy Controls and Cookie Solution Snippet to Your Shopify Store

Once you’ve copied your Privacy Controls and Cookie Solution snippet, it will look similar to one of these examples:

<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>
<script type="text/javascript">
  var _iub = _iub || [];
  _iub.csConfiguration = {
    "countryDetection": true,
    "consentOnContinuedBrowsing": false,
    "perPurposeConsent": true,
    "lang": "en",
    "siteId": 11223344, //use your siteId
    "cookiePolicyId": 55667788, //use your cookiePolicyId
    "floatingPreferencesButtonDisplay": "bottom-right",
    "banner": {
      "acceptButtonDisplay": true,
      "customizeButtonDisplay": true,
      "rejectButtonDisplay": true,
      "position": "float-top-center"
    }
  };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Now you have two options for adding the Privacy Controls and Cookie Solution snippet to your Shopify store. We recommend starting with the CMP Insert Code method, as it’s the fastest and easiest way to integrate everything.

1. Use CMP Insert Code app (Easiest and Fastest Method!) 🎖

With CMP Insert Code app, you can quickly embed the Privacy Controls and Cookie Solution snippet without needing to manually adjust any callbacks. This option automatically includes the necessary Shopify-specific callbacks, saving you time and effort.

How to do it:

  1. Install the CMP Insert Code app (find it [here]).
  2. Simply paste the Privacy Controls and Cookie Solution snippet into the CMP Script box.
  3. Before you paste the snippet, if you see a message saying “Theme app extension not enabled”, click the link and then click “Save” to enable the theme app extension.
  4. That’s it! No need to manually modify the script or add callbacks.
Shopify - Edit code

💡 Why choose CMP Insert Code app?

  • Fast and easy: The app takes care of everything for you.
  • Automatic callbacks: You don’t need to manually add the Shopify-specific callbacks.
  • No coding required: Just install and copy and paste—nothing else to do!

📹 Video Guide
To help you get started, we’ve created a step-by-step video guide on how to use CMP Insert Code app to embed the Privacy Controls and Cookie Solution in your Shopify store. Watch the video guide here:

2. Edit Your Shopify Theme Manually (❗ Recommended for Advanced Users Only)

If you want more control over the integration, you can manually add the Privacy Controls and Cookie Solution snippet to your Shopify theme. This option requires basic coding skills.

1. Access your Shopify store’s admin panel and go to Online Store > Themes. Once there, click on Actions on the right, then Edit Code.

Shopify - Edit code

2. Create a new snippet in the Snippets folder and name it iub-cookie-banner.liquid

Shopify - Add a new snippet

3. Disable remote configuration: In your Privacy Controls and Cookie Solution settings, make sure to uncheck the “Enable remote configuration” option.

Shopify - Add a new snippet

4. After disabling remote configuration, copy the updated snippet. It will look similar to this:

<script type="text/javascript">
  var _iub = _iub || [];
  _iub.csConfiguration = {
    "countryDetection": true,
    "consentOnContinuedBrowsing": false,
    "perPurposeConsent": true,
    "lang": "en",
    "siteId": 11223344, //use your siteId
    "cookiePolicyId": 55667788, //use your cookiePolicyId
    "floatingPreferencesButtonDisplay": "bottom-right",
    "banner": {
      "acceptButtonDisplay": true,
      "customizeButtonDisplay": true,
      "rejectButtonDisplay": true,
      "position": "float-top-center"
    }
  };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

5. Before pasting the snippet into your Shopify theme, you need to modify your Privacy Controls and Cookie Solution script to add some necessary Shopify-specific callbacks that ensure your Privacy Controls function correctly (note the two “code for Shopify” parts, with the onPreferenceExpressedOrNotNeededCallback, _iub.csConfiguration.callback and Tracking API lines):

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "countryDetection": true,
        "consentOnContinuedBrowsing": false,
        "perPurposeConsent": true,
        "lang": "en",
        "siteId": 11223344, //use your siteId
        "cookiePolicyId": 55667788, //use your cookiePolicyId
        "floatingPreferencesButtonDisplay": "bottom-right",
        "banner": {
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true,
            "rejectButtonDisplay": true,
            "position": "float-top-center"
        }
    };
<!-- code for Shopify (1 of 2) -->
    var onPreferenceExpressedOrNotNeededCallback = function(prefs) {
        var isPrefEmpty = !prefs || Object.keys(prefs).length === 0;
        var consent = isPrefEmpty ? _iub.cs.api.getPreferences() : prefs;
        var shopifyPurposes = {
          "analytics": [4, 's'],
          "marketing": [5, 'adv'],
          "preferences": [2, 3],
          "sale_of_data": ['s', 'sh'],
        }
        var expressedConsent = {};
        Object.keys(shopifyPurposes).forEach(function(purposeItem) {
          var purposeExpressed = null
          shopifyPurposes[purposeItem].forEach(item => {
            if (consent.purposes && typeof consent.purposes[item] === 'boolean') {
              purposeExpressed = consent.purposes[item];
            }
            if (consent.uspr && typeof consent.uspr[item] === 'boolean' && purposeExpressed !== false) {
              purposeExpressed = consent.uspr[item];
            }
          })
 
          if (typeof purposeExpressed === 'boolean') {
            expressedConsent[purposeItem] = purposeExpressed;
          }
        })
        window.Shopify.customerPrivacy.setTrackingConsent(expressedConsent, function() {});
    }
    if (typeof _iub.csConfiguration.callback === 'object') {
        _iub.csConfiguration.callback.onPreferenceExpressedOrNotNeeded = onPreferenceExpressedOrNotNeededCallback;
    } else {
        _iub.csConfiguration.callback = {
            onPreferenceExpressedOrNotNeeded: onPreferenceExpressedOrNotNeededCallback
        };
    }
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
<!-- code for Shopify (2 of 2) - Tracking API -->
<script type="text/javascript">
window.Shopify.loadFeatures(
  [
    {
      name: 'consent-tracking-api',
      version: '0.1',
    },
  ],
  function(error) {
    if (error) {
      throw error;
    }
  }
);
</script>

6. Paste the Privacy Controls and Cookie Solution snippet (complete with the two “code for Shopify” parts) into the iub-cookie-banner.liquid template and save it.

Shopify - Cookie Solution snippet

7. Open the theme.liquid layout (inside the Layout folder) and add {% include 'iub-cookie-banner' %} between {{ content_for_header }} and </head>.

Shopify - theme.liquid

8. Repeat step #7 for the gift_card.liquid and password.liquid layouts.

🎥 How can you check that iubenda is correctly updating consent in Shopify’s Customer Privacy API? (Video Guide)

Few categories of cookies are exempt from the consent requirement. Therefore, you’ll need to block scripts from running until you get valid user consent.

How to implement prior blocking via manual tagging on your Shopify store

Manual tagging is the method of prior-block we’ll be using for the tutorial below. You can view other methods here.

To set up prior blocking, you’ll need to make some minor changes to your site’s scripts. But it’s simple; just do the following:

  1. Identify the script/iframe for any additional services that are running on your website (e.g., Pinterest button)
  2. Add some simple text to the HTML code (we’ll show you how below!)
  3. Save!

In this tutorial, we are going to block a Pinterest “Pin It” Button.

💡 Not sure which services you need to block? If you’re using a Cookie Policy generated by iubenda, the services listed in your Cookie Policy are most likely the ones you need to modify now.

In your Shopify admin, click Online store, and then click Themes. In the theme drop-down, click Edit Code

Prior blocking checkbox - Flow page

Then, open your Snippets folder to find the script you need to modify (simply search for the service you want to block, in this case, it is Pinterest’s “Pin It” Button) You can do this using the search bar in the top left corner of the page

Prior blocking checkbox - Flow page
Now, we’re going to change the script. To do this, we will make 3 simple changes:
  • add this class: _iub_cs_activate to the script tags, and change the “type” attribute from text/javascripttext/plain
  • replace the src with data-suppressedsrc or suppressedsrc
  • specify the categories of the scripts/iframes with a special comma-separated data-iub-purposes attribute, e.g. data-iub-purposes="2" or data-iub-purposes="2, 3"

More about categories and purposes

Purposes are your legal reasons for processing the particular type of user data. Different scripts on your site will fall into different categories and serve different purposes. For example, Google Analytics may be used for Measurement, while the Pinterest button may be used for Experience (Purpose 3 below). Purposes are grouped into 5 categories each with an id (1, 2, 3, 4, and 5):

  • Necessary (id: 1)
  • Functionality (id: 2)
  • Experience (id: 3)
  • Measurement (id: 4)
  • Marketing (id: 5)

For even more detailed info on categories and purposes, see our guide here.

Let’s take the Pinterest “Pin It” Button as an example:

We need to 1. Add the class and change the “type” attribute, 2. replace the src and 3. specify the categories.

And the code structure should be like this:

Prior blocking checkbox - Flow page
<p>Pinterest "Pin It" Button:</p>

a  <a href="//pinterest.com/pin/create/button/?url={{ shop.url }}{{ product.url }}&amp;media=http:{{ product | img_url: '1024x1024' | split: '?' | first }}&amp;description={{ product.title | strip_html | truncate: 200, '' | url_param_escape }}{% for tag in product.tags limit: 3 %}{{ tag | replace: ' ', '-' | prepend: ' #' | url_param_escape }}{% endfor %}" data-pin-do="buttonPin" data-pin-config="none">
  <img src="//assets.pinterest.com/images/pidgets/pin_it_button.png" />
  </a>
  <script async type="text/plain" class="_iub_cs_activate" data-suppressedsrc="//assets.pinterest.com/js/pinit.js" data-iub-purposes="3" charset="utf-8"></script>
Now that you’ve made your changes, simply hit save, and you’re done.

Not sure if you’ve set up correctly? Check out the live example and FAQs below

Live example

This is an example that shows everything we have described above, you can use this code pen as a guide to see what happens before and after blocking scripts via manual tagging.

(see the example)

To demonstrate the cookie blocking feature, we’ve embedded a YouTube video, and a Twitter follow button:
Follow @iubenda

Both scripts are blocked through manual tagging. Since both the YouTube video widget and the Twitter follow button are part of the Experience purpose (id 3) we’ve added data-iub-purposes="3" to their scripts so that the Privacy Controls and Cookie Solution can properly identify them for release.

Click on the Accept button – or just activate the “Experience” toggle – to release these scripts (refresh the page to return to the starting point).

How can I tell if I’ve set prior blocking up properly?

As you can see in the code pen example, the Youtube and Twitter scripts do not load if you do not consent. (You can test this function again by opening this link (https://codepen.io/iubenda/pen/KKKxmVO/?editors=1000) in incognito mode in your browser)

After you have saved, open your site in an incognito mode and check if the scripts you have blocked via manual tagging stay blocked until you consent.

Please refer to this dedicated article if you’d like to know how to block cookies before consent using other options available. ➔ Take a look at Google Consent Mode as an alternative to prior blocking, Google Tag Manager to Simplify the Blocking of Cookies, or the IAB Transparency & Consent Framework and how to enable it.

‼ Important Note About the “Google & YouTube” App Warning


If you’ve recently added a cookie banner to your Shopify store using iubenda—or you’ve already implemented it—you might see a red warning in the “Google & YouTube” app indicating that no cookie banner is active. Rest assured, this warning is a false alarm.

The warning is triggered because the app expects the Shopify native cookie banner to be active. It doesn’t recognize third-party banners like the one provided by iubenda. However, this does not mean that your cookie banner isn’t working properly.

Your iubenda cookie banner remains fully functional and compliant with cookie consent requirements. This warning will not interfere with your ability to use Google services, such as conversion tracking or personalized advertising.

You can safely ignore this warning. For reference, here’s an example of how it might look:

alert google youtube app shopify

Manage cookie consent for your Shopify store

Generate a cookie banner

See also

The post Privacy Controls and Cookie Solution for Shopify: how to display a cookie banner and collect cookie consent appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution – Jimdo Integration Guide https://www.iubenda.com/en/help/10777-cookie-solution-jimdo-integration-guide-2/ Tue, 28 Aug 2018 12:22:23 +0000 https://help.iubenda.com/?p=10777 Once you’ve integrated the privacy policy on Jimdo (which of course also includes the cookie policy if you’ve activated it) you can complete the configuration by embedding the Privacy Controls and Cookie Solution to manage the banner visuals, the registering of consent and the preemptive blocking of script. Note The Privacy Controls and Cookie Solution […]

The post Privacy Controls and Cookie Solution – Jimdo Integration Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Once you’ve integrated the privacy policy on Jimdo (which of course also includes the cookie policy if you’ve activated it) you can complete the configuration by embedding the Privacy Controls and Cookie Solution to manage the banner visuals, the registering of consent and the preemptive blocking of script.

Note

The Privacy Controls and Cookie Solution requires that you link to a cookie policy from you banner as legally required. If you have the cookie policy feature activated on your iubenda account (as explained here), the Privacy Controls and Cookie Solution automatically integrates your cookie policy into the solution once the option is selected. Otherwise, if you already have your own compliant cookie policy, you can simply insert your own link there. Either way, please remember that a cookie policy is required.

Except for certain cookies in categories which are exempt, Cookie Law also requires that a cookie policy be set up and show to the user, that the user be shown a brief notice (banner) the first time they access the site and that the script that installs or could install cookie be suppressed before consent can be obtained.

To configure the iubenda Privacy Controls and Cookie Solution you must modify the HEAD of your Jimdo site. To do so, you first need to access the “Settings” panel, and then click on “Edit Head”.

On this screen that follows, you will need to copy paste the iubenda Privacy Controls and Cookie Solution code in the box of the “Edit Head” section:

Cookie Solution - Jimdo Integration

This code is available under the “Integration” tab of your privacy policy once you have activated the cookie policy. The iubenda cookie banner will now automatically appear at each user’s first visit. User consent is obtained through the latter’s continued browsing and this preference will be memorized so that the iubenda Privacy Controls and Cookie Solution banner will not be triggered at the same user’s next visit.

Cookie Solution - Jimdo Integration

All available options to customize the cookie banner’s style and behavior are described in this guide.

You should also remember to set up the blocking of scripts that require prior consent by using one of the methods outlined in this article.

⚠ Caution

After installation, please be sure to set-up prior blocking, as this is legally mandatory under EU Law. You can find various methods of prior blocking along with full instructions in this guide.

See also

The post Privacy Controls and Cookie Solution – Jimdo Integration Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution – Magento Extension Installation Guide https://www.iubenda.com/en/help/9591-cookie-solution-magento-extension-installation-guide/ Mon, 06 Aug 2018 16:49:15 +0000 https://help.iubenda.com/?p=9591 This extension drastically reduces the need for direct interventions in the code of the site by integrating with our Privacy Controls and Cookie Solution. It provides a fully customizable cookie banner, dynamically generates a cookie policy to match the services in use on your site, store proofs of users’ preferences and, fully manages cookie-related consent – […]

The post Privacy Controls and Cookie Solution – Magento Extension Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
This extension drastically reduces the need for direct interventions in the code of the site by integrating with our Privacy Controls and Cookie Solution.

It provides a fully customizable cookie banner, dynamically generates a cookie policy to match the services in use on your site, store proofs of users’ preferences and, fully manages cookie-related consent – including the blocking of the most common widgets and third-party cookies before consent is received – in order to comply with the GDPR, ePrivacy and CCPA

  • Our extensions are available for both Magento 1.9.x and 2.x, but please note that Magento 1.x reached end-of-support on June 30, 2020. As for version 2.x, our extension supports Magento Open Source (Magento Community Edition) and Magento Commerce (Magento Enterprise Edition and Magento Enterprise Cloud Edition).
  • Our extensions work better with versions of PHP 5.5 or later.

Functionality

  • Allows you to automatically or manually block scripts that can install cookies prior to consent, without the need for direct intervention on the code.
  • Allows you to geo-detect and limit prior-blocking and cookie consent requests only to users from the EU – where this is a legal requirement – while running cookies scripts normally in regions where you are still legally allowed to do so.
  • Asynchronously re-activates cookie scripts once consent is collected.
  • Handles the display of the cookie banner and cookie policy, allowing you to fully customize the banner to match the look and brand colors of your site if needed
  • California Consumer Privacy Act (CCPA) Support.
  • Saves user preferences about the use of cookies and displays a clean page (without banner) to users who have already provided their consent.
  • Integrates with IAB’s Transparency and Consent Framework (TCF 2.0).
  • Allows you to provide your users with granular, per-category privacy control (e.g. Functionality, Experience, Marketing).
  • Compatible with Google’s Accelerated Mobile Pages (AMP).
  • Features an easy-to-use interface for entering custom scripts and iframes.
  • Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised.
  • AdRoll
  • AddThis widgets
  • Bing
  • CodePen
  • Criteo
  • Disqus
  • Elevio
  • Facebook Comments
  • Facebook widgets
  • Freshchat
  • Google AdSense
  • Google Analytics
  • Google Maps
  • Google ReCaptcha
  • Google Site Search
  • Google Tag Manager
  • Google oAuth
  • Google+ widgets
  • Headway
  • Instagram widgets
  • Kissmetrics
  • LinkedIn widgets
  • Mixpanel
  • Neodata
  • Olark
  • Optimizely
  • Outbrain
  • PayPal widgets
  • Pingdom
  • Pinterest widgets
  • Segment
  • ShareThis widgets
  • Twitter widgets
  • UserVoice
  • Vimeo
  • YouTube

Installation

Magento 2.x (Community/Enterprise/Cloud Edition)

  1. “Purchase” our free extension from the Magento Marketplace. Once done, it will appear on your purchases page.
  2. Connect to the server’s console log using SSH.
  3. Install our extension with composer require iubenda/module-cookiesolution command. If you need a version different than the latest release add the version number to the command, for example iubenda/module-cookiesolution:2.2.0
  4. When requested, use the Magento Marketplace Public key for login and Private key for password (note that you are requested to purchase the extension to continue installation using composer).
  5. Once the extension is installed, check the status with php bin/magento module:status
    command.
  6. The extension should have a disabled status. Enable it with php bin/magento module:enable Iubenda_CookieSolution and register with php bin/magento setup:upgrade
  7. If our store is in production mode, compile the build with php bin/magento
    setup:di:compile
  8. Check if our extension is active again with php bin/magento module:status. If so, purge the cache with php bin/magento cache:clean

Uninstallation instructions for pre-marketplace releases

  1. Open the config.php file located in the “/app/etc/” folder, look for 'iubenda_cookiesolution' => 1, replace 1 with 0 and save.
  2. Remove the “/app/code/Iubenda/CookieSolution” folder.
  3. If the cache is enabled you need to purge: head to System > Cache Management, select all
    cache types and click Refresh.
  4. Open the config.php file located in the “/app/etc/” folder, remove the line
    'iubenda_cookiesolution' => 0 and save.
  • Log in to the Magento administrator area and go to System > Magento Connect > Magento Connect Manager
  • Re-enter your Magento Administration Credentials
  • Select the Create Backup checkbox and select the backup type.

Once you’ve created a backup, you can upload the package available here.

Once the extension is installed go back to Magento admin and configure your iubenda extension.

Configuration

After the installation is successfully completed, go to Stores > Configuration > iubenda > iubenda Privacy Controls and Cookie Solution (this is the place where you can configure our extension).

Copy & paste your Privacy Controls and Cookie Solution JavaScript code from your iubenda account (as explained on the introduction guide), save and clear the store cache.

Caution

Don’t forget to save valid JavaScript code there to make sure the extension works properly.

Use

Once configured, the plugin will begin to show the banner on which your cookie policy will be shown/linked to users that visit your site for the first time without the need for any other further configurations. The plugin will also recognize and automatically detect and block the cookies indicated in the above block-list, that are present on your site.

Important

Our Magento extensions automatically block scripts that are generated on the server side (therefore returned by PHP by Magento). Scripts that are inserted into the page via JavaScript after the loading process of that page are not and cannot be blocked automatically.

These scripts can be blocked by entering the source into the Custom Script boxes in the plugin console or by using the manual wrapping method illustrated in the example below and (in more detail) in this help post.

Blocking custom scripts from within the console

The Custom Scripts field makes it easy for you to block scripts inserted into the page directly from within the plugin console. This greatly reduces the need for direct edits to the site’s code.

Magento 2.x (Community/Enterprise/Cloud Edition)

In the admin panel, go to Stores > Configuration > iubenda > iubenda Privacy Controls and Cookie Solution.

magento iubenda config menu

Scroll to find the Custom scripts and Custom iframes fields within the section titled Custom.

iubenda cookie solution custom scripts fields

Enter your script or iframe sources as needed, and click the Save Config button at the top of the page.

In the admin panel go to System > Configuration. Next, click on iubenda Privacy Controls and Cookie Solution in the left in the Configuration menu under Services. iubenda cookie solution custom scripts interface

Next, simply scroll to the section titled Custom iubenda cookie solution custom scripts interface

Enter your script or iframe sources as needed, and click the Save Config button at the top of the page.

Usage Examples

Using these fields are pretty straightforward. Simply enter the script or iframe src attribute you’d like to block.

Script

If you wanted to block a social button (which inserts scripts into the page via JavaScript), you’d simply need to enter the script source, e.g. connect.socialwebsite.net/en_US/track.js into the scripts field.

iframe

Let’s say you wanted to block scripts inserted into the page via the following iframe

<iframe width="1280" height="720" src="https://www.videowebsite.com/embed/xxFhMChxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 

What you’ll need to enter into the iframe field would be videowebsite.com/embed/ as this is the actual source of the scripts. Be careful NOT to enter the component id (videowebsite.com/embed/xxFhMChxx) to ensure that all scripts coming from the actual source are blocked.

Manual Use (wrapping method)

This method requires you to directly modify your site’s code. You’ll need to go into the relevant section of your site’s code and add the scripts to be blocked as explained below.

Here’s an example of how to make the plugin manually work for a Social button (which inserts scripts into the page via JavaScript).

<!--IUB-COOKIE-BLOCK-START-->
<script>
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s);
        js.id = id;
        js.src = "//connect.socialwebsite.net/en_US/sdk.js#xfbml=1&version=v2.3&appId=808061959224601";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'socialwebsite-jssdk'));
</script>
<!--IUB-COOKIE-BLOCK-END-->

If there are HTML / IMG / IFRAME elements, you will need to do it this way:

<!--IUB-COOKIE-BLOCK-START-->
      <iframe src="...
      <img src="...
<!--IUB-COOKIE-BLOCK-END-->

If you’ve enabled the per-category consent feature you’ll need to assign the purpose. Resuming the social button example, being part of the “Experience” purpose (id 3):

<!--IUB-COOKIE-BLOCK-START-PURPOSE-3-->
<script>
    ...
</script>
<!--IUB-COOKIE-BLOCK-END-PURPOSE-3-->

To stop automatic parsing/replacing the iframe/scripts that contain a defined src:

<!--IUB-COOKIE-BLOCK-SKIP-START-->
      <script type="text/javascript">...</script>
<!--IUB-COOKIE-BLOCK-SKIP-END-->

Install the Privacy Controls and Cookie Solution extension

Magento 2.x Community/Enterprise/Cloud Edition

or

Magento 1.9.x
⚠ Caution

After installation, please be sure to set-up prior blocking, as this is legally mandatory under EU Law. You can find various methods of prior blocking along with full instructions in this guide.

See also

The post Privacy Controls and Cookie Solution – Magento Extension Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
What is meant by the identifying details of the Data Controller https://www.iubenda.com/en/help/7850-what-is-meant-by-the-identifiying-details-of-the-data-controller/ Tue, 10 Jul 2018 09:33:41 +0000 https://help.iubenda.com/?p=7850 The term ”data controller” has been defined in the General Data Protection Regulation (GDPR). The GDPR, at its most basic, specifies how personal data should be lawfully processed and sets a number of legal requirements that fall on data controllers. What is a data controller? The data controller means any person or legal entity involved in determining […]

The post What is meant by the identifying details of the Data Controller appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The term ”data controller” has been defined in the General Data Protection Regulation (GDPR). The GDPR, at its most basic, specifies how personal data should be lawfully processed and sets a number of legal requirements that fall on data controllers.

What is a data controller?

The data controller means any person or legal entity involved in determining the purpose and ways of processing the personal data.

Data controller vs processor

Under the GDPR, the term ”data processor” means any person or legal entity involved in processing personal data on behalf of the controller.

💡 Example: an internet company collects user data via their website and stores it using a 3rd party cloud service. In this scenario, the internet company is the controller and the cloud service company is the processor.

In simple terms, the processor handles personal data on behalf of the controller and not for their own purposes.

👉 Learn more about the guidelines for the relationship between data controllers and processors in our quick guide about GDPR Article 28.

Identifying details

💡 You must include the identifying details of the controller in your privacy policy.

If the Owner is specifically a legal entity, it is absolutely necessary to indicate the personal details, together with the residence or registered office, as well as with the contact details. For example:

iubenda srl – Via Torino, 2 – 20123 Milan (Italy)
info@iubenda.com

See the data controller field of iubenda’s Privacy and Cookie Policy Generator below:

data controller

Is it necessary to provide the residence/seat even if the owner is a natural person?

If the controller is a natural person, for example, a freelancer, and the relevant legislation does not provide specific indications in this regard, the data controller must, in any case, provide all the data necessary for unequivocal identification.

It is for this reason we suggest that individuals disclose personal details, residence and contact details.

Except for specific situations provided for by the relevant legislation, it is only possible to avoid stating information such as residence, provided that the requirement of unequivocal identification is met in another indisputable and valid way.

Curious to know if your privacy policy is complete?

Drafting a privacy policy is complicated! It has to include a big amount of information for being legally compliant and valid. Check this out:

👉 Don’t make this 1 mistake in your privacy policy!

See also

The post What is meant by the identifying details of the Data Controller appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Sync Your iubenda Legal Documents with the Consent Database https://www.iubenda.com/en/help/7379-how-to-sync-your-iubenda-legal-documents-with-the-consent-solution/ Tue, 12 Jun 2018 09:09:52 +0000 https://help.iubenda.com/?p=7379 The Consent Database comes with the option to sync your iubenda legal documents with the Consent Database. This means that if your legal documents were generated using iubenda’s services, you no longer need to manually push each new version of your legal documents to the Consent Database as the documents can now be auto-synced. To […]

The post How to Sync Your iubenda Legal Documents with the Consent Database appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The Consent Database comes with the option to sync your iubenda legal documents with the Consent Database. This means that if your legal documents were generated using iubenda’s services, you no longer need to manually push each new version of your legal documents to the Consent Database as the documents can now be auto-synced.

To enable, simply go to the Consent Database embed section of your website area and click on the checkbox as described below.

1) Dashboard > [your website] > Consent Database
If you’ve already activated the Consent Database, you’ll see the <>EMBED button as pictured, (if you haven’t already activated, simply click “Activate” and the following screen will appear). Clicking on the <>EMBED button pictured will take you directly to the embed section.

Consent Solution post activation screenshot

2) Next, simply click on the checkbox labeled “Sync your iubenda legal documents with the Consent Database” (pictured below). This enables the sync feature for both Javascript and HTTP API.

Consent Solution embed-screen screenshot

3) Lastly, simply copy the modified code and implement according to the guidelines outlined in the relevant guide:

See also

The post How to Sync Your iubenda Legal Documents with the Consent Database appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database – HTTP API Documentation https://www.iubenda.com/en/help/6484-consent-solution-http-api-documentation/ Mon, 14 May 2018 16:59:31 +0000 https://help.iubenda.com/?p=6484 The Consent Database HTTP API allows you to record and retrieve consent actions performed by your users, who will be referred to within the solution as “subjects”. Update: We’ve now added a Beta channel. Here you can test all the latest features before they’re moved to the Current channel. Headers Authentication In order to write […]

The post Consent Database – HTTP API Documentation appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

The Consent Database HTTP API allows you to record and retrieve consent actions performed by your users, who will be referred to within the solution as “subjects”.

Update: We’ve now added a Beta channel. Here you can test all the latest features before they’re moved to the Current channel.

Headers

Authentication

In order to write into the API, we provide two kinds of keys:

  • Public key, commonly used by the Javascript library
  • Private key, commonly used by the HTTP API

All calls performed to the API, both via HTTP or JS, indicate whether the call was authenticated by a private or public key. This allows you to give more trust to calls that came from the private key, which come with an increased level of reliability when it comes to verifying that the data was truly sent by you.

For the HTTP API, the private key must be sent via the ApiKey header. Public API keys are accepted only on the POST /public/consent endpoint.

Update: To secure all communications between REST API and clients, support for HTTP protocol is being dropped in all Consent Database API calls. After 31 Jan 2023, all requests for Consent Database APIs must adhere to HTTPS protocol.

Content-Type

In order to send data to our HTTP API, the Content-Type header must be set to application/json or application/x-www-form-urlencoded.

❗ Consent Database HTTP APIs only support UTF-8 encoded JSON. The APls will return HTTP status 400 for any other encoding headings sent with a request.

API Output

By default, every json response is unescaped. We recommend users to escape the values that might contain HTML and/or JavaScript code if they are going to render them from a web page to avoid XSS attacks.

❗ Warning

The parameter unescape_json, which was used to unescape the response json by passing unescape_json=true to any request is now ignored and every request considers it as a default.

Rate Limits

By default, you can perform a maximum of 50 requests per second and 108000 requests per hour. Server-side, the API will respond with “429 Too Many Requests” if these limits are exceeded

Max Request Size

There is a maximum of 1 MB per call. Server-side, the API will respond with “413 Request Entity Too Large” if these limits are exceeded.

LIST consents

Examples

GET https://consent.iubenda.com/consent

For Beta:

GET https://consent.iubenda.com/beta/consent

All fields are optional, but some are auto-filled if not provided.

Accepted query parameters:

from_time optional String Filter by consents timestamp. Returns all consents from that time onward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
to_time optional String Filter by consents timestamp. Returns all consents from that time backward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
source optional String Filter by consents source. Possible values: public, private. Default null
ip_address optional String Filter by IP address. Default null. Valid formats (IP address format). Default ‘none’
subject_id optional String Filter by Subject ID. Default null
subject_email_exact optional String Filter by Subject email. It must exactly match (case sensitive). Default null
subject_email optional String Filter by Subject email. It matches the string partially (case insensitive). Default null deprecated
subject_first_name optional String Filter by Subject first name. It must exactly match (case sensitive). Default null
subject_last_name optional String Filter by Subject last name. It must exactly match (case sensitive). Default null
subject_full_name optional String Filter by Subject full name. It matches the string partially (case insensitive). Default null deprecated
subject_verified optional Boolean Filter by subject verified status. Possible values: true, false. Default null
starting_after optional String Cursor which indicates after which Consent the results should be returned (cursor excluded). Default null
limit optional Numeric Number indicating the number of results returned. Min: 1, Max: 100. Default 10

This method supports cursor-based pagination via the starting_after parameter. This parameter takes an existing consent and returns objects after it.

Keeping in mind that the results are ordered by default by timestamp descending.

Some fields are deprecated and might not be performant. We discourage their use as we might drop the support in the future.

Response:

# 200 OK
[{
    "id": "b04c4b2b-80b7-439f-8997-ade3d35cbb95",
    "timestamp": "2018-06-04T08:11:34.000+00:00",
    "owner": "521686",
    "source": "private",
    "subject": {
      "id": "0e371678-634a-4016-83ce-9b7c36f828e6",
      "email": "83ce_634a_4016_9b7c36f828e6_0e371678@example.com",
      "first_name": "Kianna",
      "last_name": "Fahey",
      "full_name": "Kianna Fahey",
      "phones": [
        { "number": "+395555555555", "label": "personal", "country": "IT" }
      ]
    },
    "preferences": {
      "newsletter": false
    }
  },
  {
    "id": "ee6644ea-08e9-4aaa-a7a9-18602731a123",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "681109",
    "source": "public",
    "subject": {
      "id": "8c6d1b71-0908-4604-948f-2f706500b5b1",
      "email": "0908.8c6d1b71.2f706500b5b1.4604.948f@example.org",
      "first_name": "Eleanora",
      "last_name": "Adams",
      "full_name": "Eleanora Adams",
      "verified": false
    },
    "preferences": {
      "newsletter": true
    }
  },
  {
    "id": "e7a9f5db-481e-4c80-ac7d-a35e35d37f98",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "178473",
    "source": "private",
    "subject": {
      "id": "d084ab70-0460-4523-94b2-44841055b49c",
      "email": "94b2_4523_44841055b49c_0460_d084ab70@example.com",
      "first_name": "Abbie",
      "last_name": "Heidenreich",
      "full_name": "Abbie Heidenreich",
      "verified": false
    },
    "preferences": {
      "third_party": true
    }
  },
  {
    "id": "e3481085-296c-4b11-a999-73d5d1309128",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "393753",
    "source": "private",
    "subject": {
      "id": "be8ca546-150d-4a6e-b2ac-ef76fb8a279e",
      "email": "b2ac_ef76fb8a279e_150d_4a6e_be8ca546@example.net",
      "first_name": "Grace",
      "last_name": "Dooley",
      "full_name": "Grace Dooley",
      "verified": false
    },
    "preferences": {
      "another_preference_key": false,
      "newsletter": false
    }
  },
  {
    "id": "e1be0320-a854-4b01-a468-49b1752ee4f3",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "629879",
    "source": "public",
    "subject": {
      "id": "f8878254-c7ae-4169-b474-19e90d7b2f4f",
      "email": "f8878254_b474_19e90d7b2f4f_4169_c7ae@example.net",
      "first_name": "Providenci",
      "last_name": "Kulas",
      "full_name": "Providenci Kulas",
      "verified": false
    },
    "preferences": {
      "newsletter": false,
      "random_preference_key": true,
      "third_party": true,
      "another_preference_key": false
    }
  },
  {
    "id": "cbe2bba8-d31d-4a27-9e2d-b38de4f22a68",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "989797",
    "source": "public",
    "subject": {
      "id": "6387dc5d-d474-4da8-8c40-8b197dee8d7c",
      "email": "6387dc5d.4da8.d474.8c40.8b197dee8d7c@example.com",
      "first_name": "Alan",
      "last_name": "Rutherford",
      "full_name": "Alan Rutherford",
      "verified": false
    },
    "preferences": {
      "newsletter": true,
      "random_preference_key": true
    }
  },
  {
    "id": "ca429c28-e1cd-4b95-87ae-48adb8fe56bb",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "885846",
    "source": "public",
    "subject": {
      "id": "b2ad578d-0aa9-4bd5-becd-e2e7a2019e7a",
      "email": "b2ad578d.becd.e2e7a2019e7a.0aa9.4bd5@example.net",
      "first_name": "Ruby",
      "last_name": "Lemke",
      "full_name": "Ruby Lemke",
      "verified": false
    },
    "preferences": {
      "third_party": true,
      "random_preference_key": false
    }
  },
  {
    "id": "bf12770e-840a-40cd-ab79-5d88576b6b73",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "369168",
    "source": "public",
    "subject": {
      "id": "d4f24d92-56c2-4372-8696-fec829da5ccc",
      "email": "fec829da5ccc.8696.4372.56c2.d4f24d92@example.com",
      "first_name": "Hank",
      "last_name": "Klein",
      "full_name": "Hank Klein",
      "verified": false
    },
    "preferences": {
      "newsletter": false
    }
  },
  {
    "id": "b489e2d4-2fc6-44e1-ba54-e5f81000d30a",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "781022",
    "source": "public",
    "subject": {
      "id": "38bc623f-b386-4b66-8ee6-5e7d91c19800",
      "email": "38bc623f.8ee6.4b66.5e7d91c19800.b386@example.net",
      "first_name": "Kamren",
      "last_name": "Pacocha",
      "full_name": "Kamren Pacocha",
      "verified": false
    },
    "preferences": {
      "newsletter": true
    }
  },
  {
    "id": "b2ec7aa8-35e7-470c-8b51-bd39fa686a3a",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "527898",
    "source": "public",
    "subject": {
      "id": "0cc94c66-d9eb-4ace-af3d-1d48fba265f9",
      "email": "1d48fba265f9_4ace_af3d_d9eb_0cc94c66@example.net",
      "first_name": "Maryjane",
      "last_name": "Wiegand",
      "full_name": "Maryjane Wiegand",
      "verified": false
    },
    "preferences": {
      "newsletter": true
    }
  }
]

Please note, this method doesn’t include the proofs and legal notices of the Consent. You should call GET /consent/:id to get the complete Consent event.

GET consent

Examples

GET https://consent.iubenda.com/consent/:id

For Beta:

GET https://consent.iubenda.com/beta/consent/:id
200 OK
{
  "id": "de801ca9-abec-45e2-8f7c-729822cfffad",
  "timestamp": "2018-05-04T14:52:26+00:00",
  "owner": "1234",
  "subject": {
    "id": "J02eZvKYlo2ClwuJ1",
    "email": "subject@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": "John Doe",
    "phones": [
      { "number": "+395555555555", "label": "personal", "country": "IT" }
    ],
    "verified": false
  },
  "preferences": {
    "privacy_policy": true,
    "newsletter": false
  },
  "legal_notices": [
    {
      "identifier": "privacy_policy",
      "version": "123"
    },
    {
      "identifier": "terms",
      "version": "123"
    }
  ],
  "proofs": [
    {
      "content": "proof_1",
      "form": "proof form"
    }
  ],
  "proof_documents": [
      {
        "id" : "85812b7c-f6a5-4861-a180-a74303446e08", 
        "name" : "test.pdf"
      },
      {
        "id" : "f8cbc695-5228-4ba4-a017-dc2a50c67e25",
        "name" : "test.html"
      }
  ]
}

In addition to the properties outlined previously:

id Unique identifier of the specific consent event
owner Unique identifier of the API key owner
source private public Whether the consent was filed from the public or the private API key

CREATE consent

Examples

POST https://consent.iubenda.com/consent

For Beta:

POST https://consent.iubenda.com/beta/consent
{
  "subject": {
    "id": "J02eZvKYlo2ClwuJ1",
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": "John Doe",
    "phones": [
      { "number": "+395555555555", "label": "personal" }
    ],
    "verified": false
  },
  "legal_notices": [
    {
      "identifier": "privacy_policy",
      "version": "123"
    },
    {
      "identifier": "terms",
      "version": "123"
    }
  ],
  "proofs": [
    {
      "content": "proof_1",
      "form": "proof form"
    }
  ],
  "proof_documents_ids": [
    "85812b7c-f6a5-4861-a180-a74303446e08", 
    "f8cbc695-5228-4ba4-a017-dc2a50c67e25"
  ],
  "preferences": {
    "newsletter": false,
    "privacy_policy": true
  }
}

This call will post a new consent.

The response is the following:

# 200 OK
{
  "id": "de801ca9-abec-45e2-8f7c-729822cfffad",
  "timestamp": "2018-05-04T14:52:26Z",
  "subject_id": "testsubject"
}
timestamp auto-filled if not provided String ISO 8601 timestamp at which the consent occurred
subject Object
id auto-filled if not provided String
email String
first_name String
last_name String
full_name String
verified Boolean Reserved field used to signal whether a subject is verified, for instance via the double opt-in method
legal_notices Array Array of objects containing legal_notices data
identifier String privacy_policy, cookie_policy, term or a custom identifier
version auto-filled if not provided String
proofs Array Array of objects containing proof data
content Text
form Text
preferences Object Set of key-value pairs with user preferences for the consent action
ip_address auto-filled if using `autodetect_ip_address` String Considered only when using a `private` key. Saves the passed IP address on the Consent. Default null
autodetect_ip_address Default `true` String Considered only when using a `public` key. Enables or disables (true, false) the IP address autedetection. Default true
proof_document_ids Array Array of String IDs for documents that provide proof of the consent

LAST consent

Examples

For Beta:

GET https://consent.iubenda.com/beta/subjects/:id/consent/last

The Last Consent method returns the last consent created for the given subject.

The response is the following:

# 200 OK
{
  "id": "de801ca9-abec-45e2-8f7c-729822cfffad",
  "timestamp": "2018-05-04T14:52:26Z",
  "checksum": "336dd0c5ee2253794b8cca6ee2b2fec835ab25a7097c4405014d02e4ffe4d5e5",
  "owner": "1",
  "subject": {
    "id": "custom_subject_id",
    "owner_id": "1",
    "email": "subject@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "verified": false
  },
  "preferences": {
    "privacy_policy": true,
    "newsletter": false
  },
  "legal_notices": [
    {
      "identifier": "privacy_policy",
      "version": 123
    },
    {
      "identifier": "term",
      "version": 123
    }
  ],
  "proofs": [
    {
      "content": "proof_1",
      "form": "proof_1 form"
    },
    {
      "content": "proof_2",
      "form": "proof_2 form"
    }
  ],
  "ip_address": null
}

Subjects

LIST subjects

Examples

GET https://consent.iubenda.com/subjects

For Beta:

GET https://consent.iubenda.com/beta/subjects

All fields are optional, but some are auto-filled if not provided.

Accepted query parameters:

id optional String Filter by id. It must exactly match. Default null
email_exact optional String Filter by email. It must exactly match (case sensitive). Default null
email optional String Filter by email. It matches the string partially (case insensitive) Deprecated
first_name optional String Filter by first name. It must exactly match (case sensitive). Default null
last_name optional String Filter by last name. It must exactly match (case sensitive). Default null
full_name optional String Filter by full name. It matches the string partially (case insensitive) Deprecated
from_time optional String Filter by subjects timestamp. Returns all subjects from that time onward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
to_time optional String Filter by subjects timestamp. Returns all subjects from that time backward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
verified optional Boolean Filter by verified status. Possible values: true, false. Default null
starting_after optional String Cursor which indicates after which Subject the results should be returned (cursor excluded). Default null
limit optional Numeric Number indicating the number of results returned. Min: 1, Max: 101. Default 10
phone optional String Filter all subjects containing the given number. Phone number must include the country code. The plus (+) sign can be omitted. Default null

This method supports cursor-based pagination via the starting_after parameter. This parameter takes an existing subject and returns objects after it.

Response:

# 200 OK
[
  {
    "id": "d2a55da5-0777-4625-94bd-b69948703e71",
    "owner_id": "131132",
    "email": "rath.jorge@example.com",
    "first_name": "Jorge",
    "last_name": "Rath",
    "full_name": "Jorge Rath",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
  },
  {
    "id": "b75c6d0c-550f-4f84-9e92-2f351d481220",
    "owner_id": "131132",
    "email": "aufderhar_alfonso@example.net",
    "first_name": "Alfonso",
    "last_name": "Aufderhar",
    "full_name": "Alfonso Aufderhar",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
  },
  {
    "id": "a9c8c720-cb07-4a52-81c3-7cb7fb4f877e",
    "owner_id": "131132",
    "email": "vandervort.furman@example.net",
    "first_name": "Furman",
    "last_name": "Vandervort",
    "full_name": "Furman Vandervort",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
  },
  {
    "id": "6ccc2802-3bcb-49af-a4c5-14dc89ba94bc",
    "owner_id": "131132",
    "email": "alvis.rohan@example.org",
    "first_name": "Alvis",
    "last_name": "Rohan",
    "full_name": "Alvis Rohan",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
  },
  {
    "id": "5900f856-619e-42b0-92a5-b2ebd016ac01",
    "owner_id": "131132",
    "email": "brown.marlee@example.net",
    "first_name": "Marlee",
    "last_name": "Brown",
    "full_name": "Marlee Brown",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
  }
]

Some fields are deprecated and might not be performant. We discourage their use as we might drop the support in the future.

GET subjects

Examples

GET https://consent.iubenda.com/subjects/:id

For Beta:

GET https://consent.iubenda.com/beta/subjects/:id
# 200 OK
{
  "id": "testsubject",
  "owner_id": "1",
  "email": "subject@example.com",
  "first_name": "John",
  "last_name": "Doe",
  "phones": [
      { "number": "+395555555555", "label": "personal", "country": "IT" }
    ],
  "verified": false,
  "preferences": {
    "privacy_policy": {
      "value": true,
      "consent_id": "de801ca9-abec-45e2-8f7c-729822cfffad"
    },
    "newsletter": {
      "value": true,
      "consent_id": "de801ca9-abec-45e2-8f7c-729822cfffad"
    }
  }
}

CREATE subjects

Examples

POST https://consent.iubenda.com/subjects

For Beta:

POST https://consent.iubenda.com/beta/subjects
{
  "id": "testsubject",
  "email": "subject@example.com",
  "first_name": "John",
  "last_name": "Doe",
  "full_name": "John Doe",
  "verified": false
  "phones": [
    { "number": "+395555555555", "label": "personal" }
  ]
}

This method will post a new subject. It can also be used from within the consent one. Check the reference within the consent method for the details.

id auto-filled if not provided String
email optional String
first_name optional String
last_name optional String
full_name optional String
verified optional Boolean Reserved field used to signal whether a subject is verified, for instance via the double opt-in method
phones optional Array Array of objects containing phone number data
number optional String A valid number with country code prefix
label optional String Arbitrary text used to identify the phone number
Coming soon
custom_attributes optional Object A set of key-value pairs containing custom attributes

The response is the following:

# 200 OK
{
  "id": "testsubject",
  "created_at": "2018-05-04T14:52:26Z"
}

UPDATE subjects

Examples

PUT|PATCH https://consent.iubenda.com/subjects/:id

For Beta:

PUT|PATCH https://consent.iubenda.com/beta/subjects/:id
{
  "first_name": "Mary",
  "verified": true
}

This call will update an existing subject.

The response is the following:

# 200 OK
{
  "id": "testsubject",
  "created_at": "2018-05-04T14:52:26Z"
}

Legal Notices

LIST Legal Notices

Examples

GET https://consent.iubenda.com/legal_notices

For Beta:

GET https://consent.iubenda.com/beta/legal_notices

The documents are returned ordered by timestamp.

All fields are optional, but some are auto-filled if not provided.
Accepted query parameters:

id optional String Filter by id. It must exactly match. Default null
identifier optional String Filter by identifier. It must exactly match (case sensitive). Default null
version optional Numeric Filter by version. It must exactly match. Default null
language optional String Filter by legal notices which contents include the specified language (using short form like ‘en’, ‘it’ etc.). Default null
from_time optional String Filter by legal notices timestamp. Returns all legal notices from that time onward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
to_time optional String Filter by legal notices timestamp. Returns all legal notices from that time backward (inclusive). Valid formats: 2018-02-22 00:40:00 UTC, 2018-02-22T00:40:00Z (ISO 8601), 1519260000 (unix timestamp in seconds). Default null
starting_after_version optional Numeric Cursor which indicates after which Legal Notice’s version the results should be returned (cursor excluded). Default null
starting_after_identifier optional String Cursor which indicates after which Legal Notice’s identifier the results should be returned (cursor excluded). Default null
limit optional Numeric Number indicating the number of results returned. Min: 1, Max: 101. Default 10

This method supports cursor-based pagination via the starting_after_version and starting_after_identifier parameters. These parameters take an existing Legal Notice and return objects after it. Both parameters are required in order to paginate.

Response:

# 200 OK

[
  {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 20,
    "timestamp": "2018-10-09T12:38:04Z",
    "content": {
      "en": "Et vinculum clam decerno arguo admoveo velum sponte tot suppellex venustas defendo dolor decumbo est.",
      "it": "Collum tutis esse confugo porro urbs varius abscido turpis decor praesentium tardus voluptate fugit numquam."
    }
  },
  {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 19,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Venia valde vel surculus capitulus adfectus patior comparo acsi cur vero super cursim.",
      "it": "Consuasor arcesso conscendo crudelis cauda aer aut adeptio illo argentum comis subiungo subito colo."
    }
  },
  {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 18,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Ullus voco aufero speculum fugiat audacia laboriosam vilicus amita trans aut ut.",
      "it": "Alo veritatis ipsa tristis cuius occaecati adflicto creta verecundia facere solvo despirmatio cupiditate crinis aqua bos."
    }
  },
  {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 17,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Confero succedo caelum adhaero quo vir deorsum quaerat utor sit ustulo cribro.",
      "it": "Bibo cubitum unus est ambitus contego apparatus alo via abutor utroque xiphias voco."
    }
  },
  {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 16,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Qui porro culpo attero benevolentia aut sed sulum adfero artificiose adsidue tam amo validus vel spectaculum.",
      "it": "Cerno ipsum fugit compello cursim ter surgo asporto debilito excepturi adversus facere."
    }
  },
  {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 15,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Tunc timidus veritatis maiores advenio aperio testimonium defluo celo cuius adsuesco deripio.",
      "it": "Depulso dignissimos vinitor curatio caelestis cedo et sum concedo id admoneo appositus."
    }
  },
  {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 14,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Repellat mollitia desidero videlicet est textilis stips nisi aequus solum depromo agnitio usus.",
      "it": "Vomito tonsor comitatus illum aut usitas laboriosam canonicus tepesco benigne confugo trado."
    }
  },
  {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 13,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Temperantia alias somniculosus absorbeo utique caecus terror demitto trucido desidero baiulus sublime.",
      "it": "Perspiciatis at tredecim curriculum comprehendo deduco corrupti attonbitus barba cruentus communis comparo thorax cauda spero vito anser."
    }
  },
  {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 12,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Allatus cena surculus ventito ver adversus torrens demo venustas toties veritas qui cado vis.",
      "it": "Talio avoco aptus compono et subiungo peior bellum depromo aureus torqueo adeptio nobis."
    }
  },
  {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 11,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
      "en": "Aliquam cubicularis tergum utor cinis concido ratione vociferor uter deduco tertius verecundia alo claustrum sto vos aegrotatio.",
      "it": "Corona ut comes sub coaegresco caute casus laboriosam tremo vulariter aegrotatio pauci callide assentator basium."
    }
  }
]

GET a Legal Notice version

Examples

GET https://consent.iubenda.com/legal_notices/:identifier/:version

For Beta:

GET https://consent.iubenda.com/beta/legal_notices/:identifier/:version

Response:

# GET /legal_notices/privacy_policy/1
# 200 OK
{
    "identifier": "privacy_policy",
    "content": "legal text",
    "timestamp": "2018-05-16T13:55:57+00:00",
    "version": 1,
    "documents": [
      {
        "id" : "85812b7c-f6a5-4861-a180-a74303446e08", 
        "name" : "test.pdf"
      },
      {
        "id" : "f8cbc695-5228-4ba4-a017-dc2a50c67e25",
        "name" : "test.html"
      }
    ]
}

GET all Legal Notice versions

Examples

GET https://consent.iubenda.com/legal_notices/:identifier

For Beta:

GET https://consent.iubenda.com/beta/legal_notices/:identifier

The documents are returned ordered by version.

Accepted query parameters:

limit optional Number Limit the number of results. Default 10
starting_after optional Number Cursor for use in pagination. Default null

This method supports cursor-based pagination via the starting_after parameter. This parameter takes an existing Legal Notice version and returns objects in reverse order.

# 200 OK
[
    {
        "identifier": "privacy_policy",
        "timestamp": "2018-05-16T13:55:57+00:00",
        "version": 3,
        "documents": [
          {
            "id" : "85812b7c-f6a5-4861-a180-a74303446e08", 
            "name" : "name"
          },
          {
            "id" : "f8cbc695-5228-4ba4-a017-dc2a50c67e25",
            "name" : "something"
          }        
        ]
    },
    {
        "identifier": "privacy_policy",
        "timestamp": "2018-03-16T13:55:57+00:00",
        "version": 2,
        "documents": [
          {
            "id" : "85812b7c-f6a5-4861-a180-a74303446e08", 
            "name" : "name"
          }
        ]
    },
    {
        "identifier": "privacy_policy",
        "timestamp": "2018-01-16T13:55:57+00:00",
        "version": 1,
        "documents: []
    }
]

Please note, this method doesn’t include the content of the Legal Notice, only the metadata for each. You should call GET /legal_notices/:identifier/:version to get the full document.

If you use iubenda for your legal documents, we’ll automatically update the contents of the legal_notices method for you whenever your legal documents are changed. You can read about how to enable this feature here.

CREATE a Legal Notice

Examples

POST https://consent.iubenda.com/legal_notices

For Beta:

POST https://consent.iubenda.com/beta/legal_notices
{
    "identifier": "privacy_policy",
    "content": "privacy policy content",
    "timestamp": "2018-05-16T13:55:57_00:00",
    "document_ids": [
      "85812b7c-f6a5-4861-a180-a74303446e08", 
      "f8cbc695-5228-4ba4-a017-dc2a50c67e25"
    ]
}

With multi-language content:

{
    "identifier": "privacy_policy",
    "content": {
    "en": "privacy policy content",
    "it": "contenuto della privacy policy"
  },
    "timestamp": "2018-05-16T13:55:57_00:00",
    "document_ids": [
      "85812b7c-f6a5-4861-a180-a74303446e08", 
      "f8cbc695-5228-4ba4-a017-dc2a50c67e25"
    ]
}

Response:

# 200 OK
{
  "identifier": "privacy_policy",
  "timestamp": "2018-05-16T13:55:57Z",
  "version": 1
}

CREATE multiple Legal Notices

POST https://consent.iubenda.com/legal_notices

For Beta:

POST https://consent.iubenda.com/beta/legal_notices
[
  {
    "identifier": "privacy_policy",
    "content": "privacy policy content",
    "timestamp": "2018-05-16T13:55:57Z"
  },
  {
    "identifier": "cookie_policy",
    "content": "cookie policy content",
    "timestamp": "2018-05-16T13:55:57Z"
  }
]

Response:

# 200 OK
[
  {
    "identifier": "privacy_policy",
    "timestamp": "2018-05-16T13:55:57Z",
    "version": 1
  },
  {
    "identifier": "cookie_policy",
    "timestamp": "2018-05-16T13:55:57Z",
    "version": 1
  }
]

Document

CREATE Document

The Create Document method will post a new document.

POST https://consent.iubenda.com/beta/documents

Accepted query parameters:

file optional the uploaded file (max 1MB)

Response:

# 200 OK
{
  "id": "bd25e1fc-da53-4b48-8fef-0ecb6068f666",
  "name": "text_of_contract.txt",
  "mime_type": "text/plain",
  "timestamp": "2019-06-11T15:20:07+00:00",
}

LIST Documents

The Index Document method will show all documents.

For Beta:

GET https://consent.iubenda.com/beta/documents

The results are ordered by timestamp in descending order (DESC).
Accepted query parameters:

starting_after_identifier optional String Cursor which indicates after which Legal Notice’s identifier the results should be returned (cursor excluded). Default null
limit optional Numeric Number indicating the number of results returned. Min: 1, Max: 101. Default 10

Response:

# 200 OK
[
  {
    "id": "bd25e1fc-da53-4b48-8fef-0ecb6068f666",
    "name": "text_of_contract.txt",
    "mime_type": "text/plain",
    "timestamp": "2019-06-11T15:20:07+00:00",
    "referenced": true
  },
  {
    "id": "bd25e1fc-da53-4b48-8fef-0ecb6068f666",
    "name": "contract_image.jpg",
    "mime_type": "image/jpeg",
    "timestamp": "2020-06-11T15:20:07+00:00",
    "referenced":false
  },
  ...
]

SHOW Document

The Show Document method will show a document.

For Beta:

GET https://consent.iubenda.com/beta/documents/:id

Response:

File data

Examples

POST /consent

$ curl https://consent.iubenda.com/consent \
  -X POST \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json" \
  -d  '{ "subject": { "id": "J02eZvKYlo2ClwuJ1", "email": "subject@example.com" }, "preferences": { "newsletter": true }, "legal_notices": [{ "identifier": "privacy_policy" }], "proofs": [{ "content": "proof_content", "form": "proof_form" }], "ip_address": "127.0.0.1" }'

Response:


{
    "id": "1dbbc6f8-6a57-4407-b687-d6e6f818742f",
    "timestamp": "2018-06-06T09:48:44.265Z",
    "subject_id": "J02eZvKYlo2ClwuJ1"
}
GET /consent

$ curl https://consent.iubenda.com/consent/ \
  -H "ApiKey: your-private-api-key"

Response:


[{
    "id": "b04c4b2b-80b7-439f-8997-ade3d35cbb95",
    "timestamp": "2018-06-04T08:11:34.000+00:00",
    "owner": "12345",
    "source": "private",
    "subject": {
        "id": "0e371678-634a-4016-83ce-9b7c36f828e6",
        "email": "83ce_634a_4016_9b7c36f828e6_0e371678@example.com",
        "first_name": "Kianna",
        "last_name": "Fahey",
        "full_name": "Kianna Fahey",
        "verified": false
    },
    "preferences": {
        "newsletter": false
    },
    "ip_address": "79.42.49.139"
}, {
    "id": "ee6644ea-08e9-4aaa-a7a9-18602731a123",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "12345",
    "source": "public",
    "subject": {
        "id": "8c6d1b71-0908-4604-948f-2f706500b5b1",
        "email": "0908.8c6d1b71.2f706500b5b1.4604.948f@example.org",
        "first_name": "Eleanora",
        "last_name": "Adams",
        "full_name": "Eleanora Adams",
        "verified": false
    },
    "preferences": {
        "newsletter": true
    },
    "ip_address": null
}, {
    "id": "bf12770e-840a-40cd-ab79-5d88576b6b73",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "12345",
    "source": "public",
    "subject": {
        "id": "d4f24d92-56c2-4372-8696-fec829da5ccc",
        "email": "fec829da5ccc.8696.4372.56c2.d4f24d92@example.com",
        "first_name": "Hank",
        "last_name": "Klein",
        "full_name": "Hank Klein",
        "verified": false
    },
    "preferences": {
        "newsletter": false
    },
    "ip_address": "79.42.49.139"
}]
GET /consent/:id

$ curl https://consent.iubenda.com/consent/1dbbc6f8-6a57-4407-b687-d6e6f818742f \
  -H "ApiKey: your-private-api-key"

Response:


{
    "id": "1dbbc6f8-6a57-4407-b687-d6e6f818742f",
    "timestamp": "2018-05-04T14:52:26Z",
    "owner": "1",
    "subject": {
        "id": "custom_subject_id",
        "owner_id": "1",
        "email": "subject@example.com",
        "first_name": "John",
        "last_name": "Doe",
        "verified": false
    },
    "preferences": {
        "privacy_policy": true,
        "newsletter": false
    },
    "legal_notices": [{
        "identifier": "privacy_policy",
        "version": "123.0"
    }, {
        "identifier": "term",
        "version": "123.0"
    }],
    "proofs": [{
        "content": "proof_1",
        "form": "proof_1 form"
    }, {
        "content": "proof_2",
        "form": "proof_2 form"
    }],
    "ip_address": null
}
POST /consent

$consent_data = array(
    "subject" => array(
        "id" => "J02eZvKYlo2ClwuJ1",
        "email" => "subject@example.com"
    ),
    "legal_notices" => array(
        array(
            "identifier" => "newsletter"
        ),
        array(
            "identifier" => "privacy_policy"
        )
    ),
    "proofs" => array(
        array(
            "content" => "proof_content",
            "form" => "proof_form"
        )
    ),
    "preferences" => array(
        "newsletter" => true,
        "privacy_policy" => true
    ),
    "ip_address" => "127.0.0.1"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/consent');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($consent_data));

$response = curl_exec($req);

Response:


{
    "id": "7abe5f70-22e4-4181-878c-9f931034fab5",
    "timestamp": "2018-06-08T08:25:30.395Z",
    "subject_id": "J02eZvKYlo2ClwuJ1"
}
GET /consent

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/consent');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


[{
    "id": "b04c4b2b-80b7-439f-8997-ade3d35cbb95",
    "timestamp": "2018-06-04T08:11:34.000+00:00",
    "owner": "12345",
    "source": "private",
    "subject": {
        "id": "0e371678-634a-4016-83ce-9b7c36f828e6",
        "email": "83ce_634a_4016_9b7c36f828e6_0e371678@example.com",
        "first_name": "Kianna",
        "last_name": "Fahey",
        "full_name": "Kianna Fahey",
        "verified": false
    },
    "preferences": {
        "newsletter": false
    },
    "ip_address": "79.42.49.139"
}, {
    "id": "ee6644ea-08e9-4aaa-a7a9-18602731a123",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "12345",
    "source": "public",
    "subject": {
        "id": "8c6d1b71-0908-4604-948f-2f706500b5b1",
        "email": "0908.8c6d1b71.2f706500b5b1.4604.948f@example.org",
        "first_name": "Eleanora",
        "last_name": "Adams",
        "full_name": "Eleanora Adams",
        "verified": false
    },
    "preferences": {
        "newsletter": true
    },
    "ip_address": null
}, {
    "id": "bf12770e-840a-40cd-ab79-5d88576b6b73",
    "timestamp": "2018-06-04T08:11:33.000+00:00",
    "owner": "12345",
    "source": "public",
    "subject": {
        "id": "d4f24d92-56c2-4372-8696-fec829da5ccc",
        "email": "fec829da5ccc.8696.4372.56c2.d4f24d92@example.com",
        "first_name": "Hank",
        "last_name": "Klein",
        "full_name": "Hank Klein",
        "verified": false
    },
    "preferences": {
        "newsletter": false
    },
    "ip_address": "79.42.49.139"
}]
GET /consent/:id

$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/consent/7abe5f70-22e4-4181-878c-9f931034fab5');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


{
    "id": "1dbbc6f8-6a57-4407-b687-d6e6f818742f",
    "timestamp": "2018-05-04T14:52:26Z",
    "owner": "1",
    "subject": {
        "id": "custom_subject_id",
        "owner_id": "1",
        "email": "subject@example.com",
        "first_name": "John",
        "last_name": "Doe",
        "verified": false
    },
    "preferences": {
        "privacy_policy": true,
        "newsletter": false
    },
    "legal_notices": [{
        "identifier": "privacy_policy",
        "version": "123.0"
    }, {
        "identifier": "term",
        "version": "123.0"
    }],
    "proofs": [{
        "content": "proof_1",
        "form": "proof_1 form"
    }, {
        "content": "proof_2",
        "form": "proof_2 form"
    }],
    "ip_address": null
}

Subjects

POST /subjects

$ curl https://consent.iubenda.com/subjects \
    -X POST \
    -H "ApiKey: your-private-api-key" \
    -H "Content-Type: application/json" \
    -d '{ "email": "john@example.com", "first_name": "John", "last_name": "Doe" }'

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "timestamp": "2018-06-06T11:05:41.600Z"
}
GET /subjects

$ curl https://consent.iubenda.com/subjects \
  -X GET \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json"

Response:


[{
    "id": "d2a55da5-0777-4625-94bd-b69948703e71",
    "owner_id": "131132",
    "email": "rath.jorge@example.com",
    "first_name": "Jorge",
    "last_name": "Rath",
    "full_name": "Jorge Rath",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "b75c6d0c-550f-4f84-9e92-2f351d481220",
    "owner_id": "131132",
    "email": "aufderhar_alfonso@example.net",
    "first_name": "Alfonso",
    "last_name": "Aufderhar",
    "full_name": "Alfonso Aufderhar",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "a9c8c720-cb07-4a52-81c3-7cb7fb4f877e",
    "owner_id": "131132",
    "email": "vandervort.furman@example.net",
    "first_name": "Furman",
    "last_name": "Vandervort",
    "full_name": "Furman Vandervort",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "6ccc2802-3bcb-49af-a4c5-14dc89ba94bc",
    "owner_id": "131132",
    "email": "alvis.rohan@example.org",
    "first_name": "Alvis",
    "last_name": "Rohan",
    "full_name": "Alvis Rohan",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "5900f856-619e-42b0-92a5-b2ebd016ac01",
    "owner_id": "131132",
    "email": "brown.marlee@example.net",
    "first_name": "Marlee",
    "last_name": "Brown",
    "full_name": "Marlee Brown",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}]
GET /subjects/:id

$ curl https://consent.iubenda.com/subjects/9f5a50f6-052c-4595-8bc4-760dc05d86ba \
  -H "ApiKey: your-private-api-key"

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "owner_id": "123",
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": null,
    "preferences": null,
    "verified": false,
    "timestamp": "2018-06-06T11:05:41+00:00"
}
PATCH /subjects/:id

$ curl https://consent.iubenda.com/subjects/9f5a50f6-052c-4595-8bc4-760dc05d86ba \
  -X PATCH \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "email": "mary@example.com", "first_name": "Mary", "last_name": "Doe" }'

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "timestamp": "2018-06-06T11:05:41.000+00:00"
}
GET /beta/subjects

$ curl https://consent.iubenda.com/beta/subjects \
  -X GET \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json"

Response:


[{
    "id": "d2a55da5-0777-4625-94bd-b69948703e71",
    "owner_id": "131132",
    "email": "rath.jorge@example.com",
    "first_name": "Jorge",
    "last_name": "Rath",
    "full_name": "Jorge Rath",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "b75c6d0c-550f-4f84-9e92-2f351d481220",
    "owner_id": "131132",
    "email": "aufderhar_alfonso@example.net",
    "first_name": "Alfonso",
    "last_name": "Aufderhar",
    "full_name": "Alfonso Aufderhar",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "a9c8c720-cb07-4a52-81c3-7cb7fb4f877e",
    "owner_id": "131132",
    "email": "vandervort.furman@example.net",
    "first_name": "Furman",
    "last_name": "Vandervort",
    "full_name": "Furman Vandervort",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "6ccc2802-3bcb-49af-a4c5-14dc89ba94bc",
    "owner_id": "131132",
    "email": "alvis.rohan@example.org",
    "first_name": "Alvis",
    "last_name": "Rohan",
    "full_name": "Alvis Rohan",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "5900f856-619e-42b0-92a5-b2ebd016ac01",
    "owner_id": "131132",
    "email": "brown.marlee@example.net",
    "first_name": "Marlee",
    "last_name": "Brown",
    "full_name": "Marlee Brown",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}]
GET /beta/subjects/:id

$ curl https://consent.iubenda.com/beta/subjects/9f5a50f6-052c-4595-8bc4-760dc05d86ba \
  -H "ApiKey: your-private-api-key"

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "owner_id": "123",
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": null,
    "preferences": null,
    "verified": false,
    "timestamp": "2018-06-06T11:05:41+00:00"
}
PATCH /beta/subjects/:id

$ curl https://consent.iubenda.com/beta/subjects/9f5a50f6-052c-4595-8bc4-760dc05d86ba \
  -X PATCH \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "email": "mary@example.com", "first_name": "Mary", "last_name": "Doe" }'

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "timestamp": "2018-06-06T11:05:41.000+00:00"
}
POST /subjects

$subject_data = array(
    "email" => "subject@example.com",
    "first_name" => "John",
    "last_name" => "Doe"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/subjects');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


{
    "id": "df39c1bf-5f27-4c3a-bf94-64360cc7e4f8",
    "timestamp": "2018-06-11T08:57:13.662Z"
}
GET /subjects

$subject_data = array(
    "email" => "subject@example.com",
    "first_name" => "John",
    "last_name" => "Doe"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/subjects');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


[{
    "id": "d2a55da5-0777-4625-94bd-b69948703e71",
    "owner_id": "131132",
    "email": "rath.jorge@example.com",
    "first_name": "Jorge",
    "last_name": "Rath",
    "full_name": "Jorge Rath",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "b75c6d0c-550f-4f84-9e92-2f351d481220",
    "owner_id": "131132",
    "email": "aufderhar_alfonso@example.net",
    "first_name": "Alfonso",
    "last_name": "Aufderhar",
    "full_name": "Alfonso Aufderhar",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "a9c8c720-cb07-4a52-81c3-7cb7fb4f877e",
    "owner_id": "131132",
    "email": "vandervort.furman@example.net",
    "first_name": "Furman",
    "last_name": "Vandervort",
    "full_name": "Furman Vandervort",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "6ccc2802-3bcb-49af-a4c5-14dc89ba94bc",
    "owner_id": "131132",
    "email": "alvis.rohan@example.org",
    "first_name": "Alvis",
    "last_name": "Rohan",
    "full_name": "Alvis Rohan",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "5900f856-619e-42b0-92a5-b2ebd016ac01",
    "owner_id": "131132",
    "email": "brown.marlee@example.net",
    "first_name": "Marlee",
    "last_name": "Brown",
    "full_name": "Marlee Brown",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}]
GET /subjects/:id

$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/subjects/df39c1bf-5f27-4c3a-bf94-64360cc7e4f8');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "owner_id": "123",
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": null,
    "preferences": null,
    "verified": false,
    "timestamp": "2018-06-06T11:05:41+00:00"
}
PATCH /subjects/:id

$subject_data = array(
    "first_name" => "Mary"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/subjects/df39c1bf-5f27-4c3a-bf94-64360cc7e4f8');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


{
    "id": "df39c1bf-5f27-4c3a-bf94-64360cc7e4f8",
    "timestamp": "2018-06-11T08:57:13.000+00:00"
}
POST /beta/subjects

$subject_data = array(
    "email" => "subject@example.com",
    "first_name" => "John",
    "last_name" => "Doe"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/beta/subjects');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


{
    "id": "df39c1bf-5f27-4c3a-bf94-64360cc7e4f8",
    "timestamp": "2018-06-11T08:57:13.662Z"
}
GET /beta/subjects

$subject_data = array(
    "email" => "subject@example.com",
    "first_name" => "John",
    "last_name" => "Doe"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/beta/subjects');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


[{
    "id": "d2a55da5-0777-4625-94bd-b69948703e71",
    "owner_id": "131132",
    "email": "rath.jorge@example.com",
    "first_name": "Jorge",
    "last_name": "Rath",
    "full_name": "Jorge Rath",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "b75c6d0c-550f-4f84-9e92-2f351d481220",
    "owner_id": "131132",
    "email": "aufderhar_alfonso@example.net",
    "first_name": "Alfonso",
    "last_name": "Aufderhar",
    "full_name": "Alfonso Aufderhar",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "a9c8c720-cb07-4a52-81c3-7cb7fb4f877e",
    "owner_id": "131132",
    "email": "vandervort.furman@example.net",
    "first_name": "Furman",
    "last_name": "Vandervort",
    "full_name": "Furman Vandervort",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "6ccc2802-3bcb-49af-a4c5-14dc89ba94bc",
    "owner_id": "131132",
    "email": "alvis.rohan@example.org",
    "first_name": "Alvis",
    "last_name": "Rohan",
    "full_name": "Alvis Rohan",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}, {
    "id": "5900f856-619e-42b0-92a5-b2ebd016ac01",
    "owner_id": "131132",
    "email": "brown.marlee@example.net",
    "first_name": "Marlee",
    "last_name": "Brown",
    "full_name": "Marlee Brown",
    "preferences": null,
    "verified": true,
    "timestamp": "2018-09-12T16:22:21+00:00"
}]
GET /beta/subjects/:id
$req = curl_init();
$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/beta/subjects/df39c1bf-5f27-4c3a-bf94-64360cc7e4f8');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


{
    "id": "9f5a50f6-052c-4595-8bc4-760dc05d86ba",
    "owner_id": "123",
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "full_name": null,
    "preferences": null,
    "verified": false,
    "timestamp": "2018-06-06T11:05:41+00:00"
}
PATCH /beta/subjects/:id

$subject_data = array(
    "first_name" => "Mary"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/beta/subjects/df39c1bf-5f27-4c3a-bf94-64360cc7e4f8');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($subject_data));

$response = curl_exec($req);

Response:


{
    "id": "df39c1bf-5f27-4c3a-bf94-64360cc7e4f8",
    "timestamp": "2018-06-11T08:57:13.000+00:00"
}
POST /legal_notices

$ curl https://consent.iubenda.com/legal_notices \
  -X POST \
  -H "ApiKey: your-private-api-key" \
  -H "Content-Type: application/json" \
  -d '{ "identifier": "privacy_policy", "content": "privacy policy legal text" }'

Response:


{
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-06-06T15:56:10.090Z"
}
GET /legal_notices

$ curl https://consent.iubenda.com/legal_notices \
  -H "ApiKey: your-private-api-key"

Response:


[{
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 20,
    "timestamp": "2018-10-09T12:38:04Z",
    "content": {
        "en": "Et vinculum clam decerno arguo admoveo velum sponte tot suppellex venustas defendo dolor decumbo est.",
        "it": "Collum tutis esse confugo porro urbs varius abscido turpis decor praesentium tardus voluptate fugit numquam."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 19,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Venia valde vel surculus capitulus adfectus patior comparo acsi cur vero super cursim.",
        "it": "Consuasor arcesso conscendo crudelis cauda aer aut adeptio illo argentum comis subiungo subito colo."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 18,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Ullus voco aufero speculum fugiat audacia laboriosam vilicus amita trans aut ut.",
        "it": "Alo veritatis ipsa tristis cuius occaecati adflicto creta verecundia facere solvo despirmatio cupiditate crinis aqua bos."
    }
}, {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 17,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Confero succedo caelum adhaero quo vir deorsum quaerat utor sit ustulo cribro.",
        "it": "Bibo cubitum unus est ambitus contego apparatus alo via abutor utroque xiphias voco."
    }
}, {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 16,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Qui porro culpo attero benevolentia aut sed sulum adfero artificiose adsidue tam amo validus vel spectaculum.",
        "it": "Cerno ipsum fugit compello cursim ter surgo asporto debilito excepturi adversus facere."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 15,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Tunc timidus veritatis maiores advenio aperio testimonium defluo celo cuius adsuesco deripio.",
        "it": "Depulso dignissimos vinitor curatio caelestis cedo et sum concedo id admoneo appositus."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 14,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Repellat mollitia desidero videlicet est textilis stips nisi aequus solum depromo agnitio usus.",
        "it": "Vomito tonsor comitatus illum aut usitas laboriosam canonicus tepesco benigne confugo trado."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 13,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Temperantia alias somniculosus absorbeo utique caecus terror demitto trucido desidero baiulus sublime.",
        "it": "Perspiciatis at tredecim curriculum comprehendo deduco corrupti attonbitus barba cruentus communis comparo thorax cauda spero vito anser."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 12,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Allatus cena surculus ventito ver adversus torrens demo venustas toties veritas qui cado vis.",
        "it": "Talio avoco aptus compono et subiungo peior bellum depromo aureus torqueo adeptio nobis."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 11,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Aliquam cubicularis tergum utor cinis concido ratione vociferor uter deduco tertius verecundia alo claustrum sto vos aegrotatio.",
        "it": "Corona ut comes sub coaegresco caute casus laboriosam tremo vulariter aegrotatio pauci callide assentator basium."
    }
}]
GET /legal_notices/:identifier/:version

$ curl https://consent.iubenda.com/legal_notices/privacy_policy/1 \
  -H "ApiKey: your-private-api-key"

Response:


{
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-06-06T15:56:10.000+00:00",
    "content": "privacy policy legal text"
}
GET /legal_notices/:identifier

$ curl https://consent.iubenda.com/legal_notices/privacy_policy \
  -H "ApiKey: your-private-api-key"

Response:


[{
    "identifier": "privacy_policy",
    "version": 3,
    "timestamp": "2018-05-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 2,
    "timestamp": "2018-03-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-01-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}]

With limit and pagination parameters:


$ curl https://consent.iubenda.com/legal_notices/privacy_policy?limit=20&starting_after=3 \
  -H "ApiKey: your-private-api-key" \
  -G

Response:


[{
    "identifier": "privacy_policy",
    "version": 2,
    "timestamp": "2018-03-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-01-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}]
POST /legal_notices

$legal_notice_data = array(
    "identifier" => "privacy_policy",
    "content" => "privacy policy legal text"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/legal_notices');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($legal_notice_data));

$response = curl_exec($req);

Response:


{
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-06-11T10:26:00.413Z"
}
GET /legal_notices

$legal_notice_data = array(
    "identifier" => "privacy_policy",
    "content" => "privacy policy legal text"
);

$req = curl_init();
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/legal_notices');
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, json_encode($legal_notice_data));

$response = curl_exec($req);

Response:


[{
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 20,
    "timestamp": "2018-10-09T12:38:04Z",
    "content": {
        "en": "Et vinculum clam decerno arguo admoveo velum sponte tot suppellex venustas defendo dolor decumbo est.",
        "it": "Collum tutis esse confugo porro urbs varius abscido turpis decor praesentium tardus voluptate fugit numquam."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 19,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Venia valde vel surculus capitulus adfectus patior comparo acsi cur vero super cursim.",
        "it": "Consuasor arcesso conscendo crudelis cauda aer aut adeptio illo argentum comis subiungo subito colo."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 18,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Ullus voco aufero speculum fugiat audacia laboriosam vilicus amita trans aut ut.",
        "it": "Alo veritatis ipsa tristis cuius occaecati adflicto creta verecundia facere solvo despirmatio cupiditate crinis aqua bos."
    }
}, {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 17,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Confero succedo caelum adhaero quo vir deorsum quaerat utor sit ustulo cribro.",
        "it": "Bibo cubitum unus est ambitus contego apparatus alo via abutor utroque xiphias voco."
    }
}, {
    "id": "0_privacy_policy",
    "owner_id": "0",
    "identifier": "privacy_policy",
    "version": 16,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Qui porro culpo attero benevolentia aut sed sulum adfero artificiose adsidue tam amo validus vel spectaculum.",
        "it": "Cerno ipsum fugit compello cursim ter surgo asporto debilito excepturi adversus facere."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 15,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Tunc timidus veritatis maiores advenio aperio testimonium defluo celo cuius adsuesco deripio.",
        "it": "Depulso dignissimos vinitor curatio caelestis cedo et sum concedo id admoneo appositus."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 14,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Repellat mollitia desidero videlicet est textilis stips nisi aequus solum depromo agnitio usus.",
        "it": "Vomito tonsor comitatus illum aut usitas laboriosam canonicus tepesco benigne confugo trado."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 13,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Temperantia alias somniculosus absorbeo utique caecus terror demitto trucido desidero baiulus sublime.",
        "it": "Perspiciatis at tredecim curriculum comprehendo deduco corrupti attonbitus barba cruentus communis comparo thorax cauda spero vito anser."
    }
}, {
    "id": "0_cookie_policy",
    "owner_id": "0",
    "identifier": "cookie_policy",
    "version": 12,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Allatus cena surculus ventito ver adversus torrens demo venustas toties veritas qui cado vis.",
        "it": "Talio avoco aptus compono et subiungo peior bellum depromo aureus torqueo adeptio nobis."
    }
}, {
    "id": "0_term",
    "owner_id": "0",
    "identifier": "term",
    "version": 11,
    "timestamp": "2018-10-09T12:38:03Z",
    "content": {
        "en": "Aliquam cubicularis tergum utor cinis concido ratione vociferor uter deduco tertius verecundia alo claustrum sto vos aegrotatio.",
        "it": "Corona ut comes sub coaegresco caute casus laboriosam tremo vulariter aegrotatio pauci callide assentator basium."
    }
}]
GET /legal_notices/:identifier/:version

$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/legal_notices/privacy_policy/1');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


{
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-06-11T10:26:00.000+00:00",
    "content": "privacy policy legal text"
}
GET /legal_notices/:identifier

$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/legal_notices/privacy_policy');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


[{
    "identifier": "privacy_policy",
    "version": 3,
    "timestamp": "2018-05-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 2,
    "timestamp": "2018-03-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-01-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}]

With limit and pagination parameters:


$req = curl_init();
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_URL, 'https://consent.iubenda.com/legal_notices/privacy_policy?limit=3&starting_after=4');
curl_setopt($req, CURLOPT_HTTPHEADER, array(
    'ApiKey: your-secret-api-key',
    'Content-Type: application/json'
));

$response = curl_exec($req);

Response:


[{
    "identifier": "privacy_policy",
    "version": 2,
    "timestamp": "2018-03-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}, {
    "identifier": "privacy_policy",
    "version": 1,
    "timestamp": "2018-01-16T13:55:57Z",
    "id": "1234_privacy_policy",
    "owner_id": "1234",
    "content": "privacy policy content"
}]

See also

The post Consent Database – HTTP API Documentation appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database – JS Documentation https://www.iubenda.com/en/help/6473-consent-solution-js-documentation/ Mon, 14 May 2018 16:16:45 +0000 https://help.iubenda.com/?p=6473 The Consent Database JavaScript library allows you to record consent actions performed by your users, referred to as “subjects,” throughout the rest of this guide. Setting up your Consent Database is easy! In short, it involves three main steps, which we’ll walk you through:  After you’ve followed these three steps, you will be able to […]

The post Consent Database – JS Documentation appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

The Consent Database JavaScript library allows you to record consent actions performed by your users, referred to as “subjects,” throughout the rest of this guide.

Setting up your Consent Database is easy! In short, it involves three main steps, which we’ll walk you through: 

  1. Embed your Consent Database code;
  2. Set up your form; and 
  3. Send the consent data to iubenda APIs.

After you’ve followed these three steps, you will be able to see your subjects’ consent in your iubenda dashboard. If you’re looking for advanced configurationplease see here.

 

Please note: this is a WP specific example: some details could vary, but the approach is the same.

1.Embed your Consent Database code

Once you’ve activated your Consent Database, copy the code you find under Consent Database > Embed > Javascript:

Now paste this code inside the head of all your pages. Next step: set up your form.

2. Set up your form

Once you’ve included your iubenda code inside your head, you’ll need to add id and name attributes to your form (if you haven’t already).

Let’s assume you have this simple contact form (name, email, message, and newsletter subscription):

<form>
  <label>Full Name</label>
  <input type="text" />
   
  <label>Email</label>
  <input type="email" />
  
  <label>Message</label>
  <textarea></textarea>
 
  <input type="checkbox" /> I've read the
 <a href="#">Privacy Policy</a> and accept the <a href="#">Terms and Conditions</a>
  <input type="checkbox" /> Send me information about products, services,
deals or recommendations by email (optional)
    
  <button>Send</button>
</form>

Make sure that: 

  • your form and button/input type="submit" elements have an id
  • your form fields have a name attribute

The form above will become:

<form id="contact-form">
  <label>Full Name</label>
  <input type="text" name="your-name" />
   
  <label>Email</label>
  <input type="email" name="your-email" />
  
  <label>Message</label>
  <textarea name="your-message"></textarea>
 
  <input type="checkbox" name="generic" /> I've read the <a 
href="#">Privacy Policy</a> and 
accept the <a href="#">Terms and Conditions</a>
  <input type="checkbox" name="newsletter" /> Send me information about products, services, 
deals or recommendations by email (optional)
    
  <button id="contact-submit">Send</button>
</form>

Now it’s time for the last step: setting up a function to send the consent data to your dashboard. 

3. Send the Consent data to iubenda APIs

Now that your form is ready, you need to ensure that it sends the information to the Consent Database when the user fills in and submits the form. There are two alternative methods to do this: load (asynchronous) and submit (synchronous).

In most cases, you’ll want to use a load function like this: 

<script type="text/javascript">
    _iub.cons_instructions.push(["load", {
        submitElement: document.getElementById("contact-submit"),
        form: {
            selector: document.getElementById("contact-form"),
            map: {
                subject: {
                    full_name: "your-name",
                    email: "your-email"
                },
                preferences: {
                    generic: "generic",
                    newsletter: "newsletter"
                }
            }
        },
        consent: {
            legal_notices: [{
                    identifier: "privacy_policy",
                },
                {
                    identifier: 'cookie_policy',
                },
                {
                    identifier: "terms",
                }
            ],
        }
    }])
</script>

In the code above please note:

  • the contact-form and contact-submit ids;
  • the full_name and email subject mapping (you have four non-editable options: first_namelast_name,full_name and email);
  • the checkbox preferences, where you’re free to use the keys you like (in our case, generic and newsletter);
  • the legal_notices, which are automated if you sync your iubenda legal documents with the Consent Database (just use the standard identifiers privacy_policycookie_policy and terms).

Be sure to include the load method after the form (for example, inside the footer of your contact page), and you’re done! 

Once you’ve collected your consent, you’ll be able to sort and analyze your user consent data in the Consent Dashboard.

Follow this link to see a working example of the load method.

Advanced configuration 

The following steps are an advanced configuration method; after you’ve followed these three steps, you will be able to see your subjects’ consent in your iubenda dashboard.

To install the Consent Database JS widget, insert your Consent Database code inside every page of your site, before closing the HEAD tag (see example code below).

<script type="text/javascript">
    var _iub = _iub || {};
    _iub.cons_instructions = _iub.cons_instructions || [];
    _iub.cons_instructions.push(["init", {api_key: "YOUR_PUBLIC_API_KEY"}]);
</script>
<script type="text/javascript" src="https://cdn.iubenda.com/cons/iubenda_cons.js" async></script>

*The API key is a unique code that the SDK uses in order to communicate with our API’s endpoint. Your API key (displayed as “YOUR_PUBLIC_API_KEY” in the example above) is generated by us during the Consent Database activation and is specific to that particular site.

Caution

The code above is just an example. Please be sure to use your own Consent Database code as the code is specific to your particular site. You can find your code snippet by going to Dashboard > [your website area] > Consent Database > EMBED. Once there, simply copy the information you need.

The init function (included into the setup script above) defines how the library is instantiated and is required on every page that implements the Consent Database widget.

It is possible to add a callback function as a second parameter of the init function. The callback function will then be called once the library has been loaded.

Configuring the init function this way (by adding a callback function — see “YOUR_CALLBACK” in the example below) can be used to set some additional action after the library has been loaded.

_iub.cons_instructions.push(["init", {
    api_key: "YOUR_PUBLIC_API_KEY"},
    function YOUR_CALLBACK() {
        //the library has been loaded
        ...
        //put you code here
    ...
    }
]);

The following are the parameters that you can use inside the init configuration object ( i.e. the first parameter on init function which contains the API key) to customize, for example, the logger or the behavior of the library.

See table and code example below:

Name Required Type Notes
api_key yes String Your public key
logger no String Possible values: “none”, “console”. Defaults to: “console”
log_level no String Possible values: “none”, “debug”, “info”, “warn”, “error”, “fatal”. Defaults to: “error”
sendFromLocalStorageAtLoad no boolean Determines whether the script reads localStorage at load and submits whatever is included. Defaults to: true
retrySaveCount no number Specifies the number of times the SDK should attempt to retry the API call if it fails initially. Defaults to 5
retrySaveDelayMs no number Specifies the time delay between each retry attempt, measured in milliseconds. Defaults to 3000 ms (3 seconds)
// An example configuration with optional parameters added (note: api_key parameter is always required)

_iub.cons_instructions.push(["init", {
    api_key: "YOUR_PUBLIC_API_KEY",
    logger: "console",
    log_level: "warn",
    sendFromLocalStorageAtLoad: false,
    retrySaveCount: 5,
    retrySaveDelayMs: 3000
}, ...]);

In order to automatically record the consents provided via a submission form you can either use the load function or the submit function.

3.1 load

The load function allows you to bind fields of the consent object to input fields of your <form> and to automatically record the consent at submit time.

Note: the load function must only be invoked after the declaration of the form object (as can be seen in the example below).

We suggest inserting the <script> tag after the <form> tag as follows:

<form>
    <!-- Your form input fields -->
    <input type="submit" id="submit-btn" name="submit-button" />
</form>

<script type="text/javascript">
    _iub.cons_instructions.push([ * "load" * ,
        {
            submitElement: "submit-btn", // if this line is missing, the consent is not automatically recorded at submit time; a call to _iub.cons.sendData (see section below) is needed instead
            form: {
                ...your form object
            },
            consent: {
                legal_notices: [{
                    identifier: "term",
                    version: "1"
                }]
            }
        }
    ])
</script>

Parameters:

Name Required Type Notes
submitElement no String or DOM element Pass the Id string or the DOM element of an element that will trigger the submit of the consent, when clicked. If this element is not specified, or not triggered, you need to call _iub.cons.sendData() to record the consent (see also below).
form No/Yes if consent is not defined FormConfig Check the form object section
consent No/Yes if form is not defined ConsentConfig Check the consent object section
writeOnLocalStorage no boolean Defines whether the data should be sent directly or written in localStorage. Defaults to: true
autodetect_ip_address no boolean A parameter that enable or disable the ip autodetect. Default to: true

The code in the example above will automatically record the consent object with the values of the bound input fields:

  • when the submitElement receives a click event (if submitElement was specified); or
  • when the _iub.cons.sendData() function gets manually called (see below)
3.1.1 sendData

The sendData function must be used in conjunction with the load function and triggers the recording of the consent object with the values of the input fields that have been bound by a prior call to the load function.

It must be used in case the submitElement is not provided (eg. when you need to validate the input form before submitting) and you need to programmatically trigger the fetching of the data from the form and the consequent recording of the consent.

// your form handler function
function validateForm() {
    if (isValidForm()) {
        // the form has been validated
      _iub.cons.sendData();
      // ...
     }
}
3.1.2 sendFromLocalStorage

By default, the consent object created by the load function is not directly sent to our servers for storage; it is indeed saved into the localStorage in order to protect from any loss of data in case a new page is loaded before the JavaScript has finished executing. The consent saved into localStorage will be automatically recorded (that is, sent to our servers for storage) at the very next page load.

If you want to disable the automatic sending of the consent saved in localStorage at page load, you need to provide the parameter sendFromLocalStorageAtLoad = false inside the init object configuration; in such cases, in order to sent the consent stored in localStorage to our servers you’ll need to explicitly call the _iub.cons.sendFromLocalStorage function (see below).

_iub.cons.sendFromLocalStorage()
3.2 submit

The submit function allows you to send the consent data to iubenda APIs, that is to record the consent, programmatically (for example inside an event handler or a callback function):

It can be configured in two ways:

  • Specifying the form selector parameter in the same way as the load function
  • By specifying all the values of the consent object

It’s worth noting that, unlike the load function, by default the submit function does not leverage the localStorage and instead directly sends the consent object to our server for storage.

Parameters:

Name Required Type Notes
form No/Yes if consent is not defined FormConfig (See the form object section below)
consent No/Yes if form is not defined ConsentConfig (See the consent object section below)
writeOnLocalStorage No boolean Defines whether the data should be sent directly or written to localStorage. Default to: false
autodetect_ip_address No boolean Allows you to enable or disable the ip autodetect. Default to: true
Note

In cases where you provide both the form and the consent parameter, they will be merged to create the consent object. In cases where there is a conflict between data retrieved from the form and the data specified directly in the consent object, the consent object will take precedence.

Callbacks

The .success callback is called in cases of success, the .error callback is called in cases of error.

3.2.1 When the form object is provided

In the example below (where the form object is provided), the submit function will take care of populating the consent object from the form inputs.

_iub.cons_instructions.push(["submit",
{
    form: {"... your form object"},
    consent: {
      legal_notices: [{
        identifier: "term",
        version: "1"
      }]
    }
},
{
    success: function(response) {
      console.log(response);
    },
    error: function(response) {
      console.log(response);
    }
}
])

3.2.2 When the form object is not provided

Alternatively, you can also pass the consent object as shown the example below:

_iub.cons_instructions.push(["submit",
  {
    consent: {
      subject: {
        id: "your-subject-id",
        email: "your-subject-email0@example.com"
      },
      preferences: {
        term: true
      },
      legal_notices: [
        {
          identifier: "privacy_policy"
        }
      ],
      proofs: [
        {
          content: "{ \"first_name\": \"John\", \"last_name\": \"Doe\", \"email\": \"john@example.com\" }"
          form: "<form action=\"/action\" method=\"POST\"><p><label>First Name</label><input type=\"text\" name=\"first_name\" /></p><p><label>Last name</label><input type=\"text\" name=\"last_name\" /></p><p><label>E-mail</label><input type=\"email\" name=\"email\" /></p><input type=\"submit\" /></form>"
        }
      ]
    }
  },
  {
    success: function(response) {
      console.log(response);
    },
    error: function(response) {
      console.log(response);
    }
  }
])

This is an example of a response (in this case a success response) from the server:

200 OK
{
    id: "de801ca9-abec-45e2-8f7c-729822cfffad",
    timestamp: "2018-05-04T14:52:26Z",
    subject_id: "J02eZvKYlo2ClwuJ1"
}

If you want to programmatically build your consent object and send it to the Consent Database API you’ll need to use the submit function as previously described in 3.2.2 When The Form Object Is Not Provided.

This is the structure of the form object passed to load and submit functions:

Name Type Notes
selector String or DOM element The ID (string) of the form or the DOM element form
map Object Object allowing to map consent attributes to specific form fields by their “name” attributes as an alternative to data-cons-x attributes (see example below)
subject Object
id String name attribute of a DOM element present in the form
email String name attribute of a DOM element present in the form
first_name String name attribute of a DOM element present in the form
last_name String name attribute of a DOM element present in the form
full_name String name attribute of a DOM element present in the form
preferences Object
preference_name String name attribute of a DOM element present in the form
exclude Array A list of fields name that we would like to exclude from proofs
5.1 Binding the form fields to your consent object

The form fields can be bound to your consent object in two ways:

1) By specifying the relevant name attribute in the MAP object (please note that id cannot be used here, only the name attribute):

form: {
    selector: "form-id", // The string (ID) or the DOM element of the form from which you'd like to detect the data
    map: { // optional: map consent attributes directly to the corresponding
        // input's "name" attribute, instead of using data-cons-x attributes
        subject: {
            id: "id-element-name"
            email: "email-element-name",
            first_name: "first-name-element-name",
            last_name: "last-name-element-name",
            full_name: "full-name-element-name"
        },
        preferences: {
            term: "terms-checkbox-element-name"
        }
    }
}

2) By using data-cons-x attributes in your input field:

<form id="form-id">
    <!-- subject -->
    <input type="..." name="subject_name" data-cons-subject-name />

    <input type="hidden" name="id" value="12141412" *data-cons-subject="id" * />
    <p>
        First name:<br />
        <input type="text" value="value" name="first_name" *data-cons-subject="first_name" * />
    </p>
    <p>
        Last name:<br />
        <input type="text" name="last_name" *data-cons-subject="last_name" * />
    </p>
    <p>
        Full Name:<br />
        <input type="text" name="full_name" *data-cons-subject="full_name" * />
    </p>
    <p>
        Email<br />
        <input type="text" name="email" *data-cons-subject="email" * />
    </p>
    <p>
        Password<br />
        <input type="password" name="password" *data-cons-exclude* />
    </p>

    <!-- preferences -->
    <p>
        <label><input type="hidden" name="terms-and-conditions" data-cons-preference="terms-and-conditions" value="value" />
            Accept terms and conditions</label>
    </p>
    <p>
        <label><input type="hidden" name="newsletter" value="newsletter" data-cons-preference="newsletter" /> newsletter</label>
    </p>
    <input type="submit" id="submit-btn" />
</form>

You can also exclude certain fields ( i.e. password or fields not related to the consent) in two ways:

1) By using data-cons-exclude in your input field:

<input type="password" name="password" data-cons-exclude />

2) By using the exclude object inside the map:

map: {
    .
    .
    // exclude fields by inserting inputs names in this array
    exclude: ['password']
}

The consent object is composed of the following fields:

Name Required Type Notes
subject Yes Object
id No String Identifier to identify the subject that sent the consent. If an ID is passed that one is used and you can update a subject info by posting new consents using the same subject ID. However if you do not provide a specific subject ID the API will create a secure random UUID for you.
email No String
first_name No String
last_name No String
full_name No String
verified No Boolean Reserved field used to signal whether a subject is verified, for instance via the double opt-in method
legal_notices Yes Array Array of objects containing legal_notices data
identifier No String
version No String Auto-filled if not provided
proofs Yes Array Array of objects containing proof data
content No String
form No String
preferences Yes Object Set of key-value pairs with user preferences for the consent action

Note: In the JS library, all of the properties must be specified from within the consent object. Example:

consent: {
  subject: {
    id: "your-subject-id",
    email: "your-subject-email0@example.com"
  },
  preferences: {
    term: true
  },
  legal_notices: [
    {
      identifier: "privacy_policy"
    }
   ]},
   proofs: [
    {
      content: "{ \"first_name\": \"John\", \"last_name\": \"Doe\", \"email\": \"john@example.com\" }"
      form: "<form action=\"/action\" method=\"POST\"><p><label>First Name</label><input type=\"text\" name=\"first_name\" /></p><p><label>Last name</label><input type=\"text\" name=\"last_name\" /></p><p><label>E-mail</label><input type=\"email\" name=\"email\" /></p><input type=\"submit\" /></form>"
    }
   ]
}

If you use iubenda for your legal documents, we’ll automatically update the contents of the legal_notices for you whenever your legal documents are changed. You can read about how to enable this feature here.

However it is still required for you to declare which legal_notices are being agreed upon on each consent creation, therefore if you’re using legal notices, you should fill the legal_notices array with the identifier and version of your legal notices created beforehand.

Example:

consent: {
  legal_notices: [
    {
      identifier: "privacy_policy",
      version: "1" // auto-filled if not provided
    },
    {
      identifier: "another_legal_notice"
    },
    ...
  ]
}

Included below are some practical examples of how you can actually implement the Consent Database.

8.1 MAP feature
Load function

See the Pen [Iubenda Cons] (async) Load function by iubenda (@iubenda) on CodePen.

Load function with Map (no data-attribute)

See the Pen [Iubenda Cons] (async) Load function and Map option by iubenda (@iubenda) on CodePen.

8.2 Submit implementation (async)

See the Pen [Iubenda Cons] (async) Submit implementation by iubenda (@iubenda) on CodePen.

8.3 Multiple Form implementation

See the Pen [Iubenda Cons] (async)Multiple Form implementation by iubenda (@iubenda) on CodePen.

8.4 External validation tools (Load function with validate.js)

See the Pen [Iubenda Cons] (async) load function with validate.js by iubenda (@iubenda) on CodePen.

See also

The post Consent Database – JS Documentation appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Consent Database – Introduction and methods https://www.iubenda.com/en/help/6469-consent-solution-getting-started/ Mon, 14 May 2018 12:34:59 +0000 https://help.iubenda.com/?p=6469 Maintaining comprehensive records of consent are a vital part of privacy compliance in general but are specifically required under the GDPR. These records should include a way of identifying the user, proof of consent, record of the consenting action and the legal documents available to the user at the time of consent, among other things. […]

The post Consent Database – Introduction and methods appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Maintaining comprehensive records of consent are a vital part of privacy compliance in general but are specifically required under the GDPR. These records should include a way of identifying the user, proof of consent, record of the consenting action and the legal documents available to the user at the time of consent, among other things. You can read about the full requirements here.

The Consent Database provides you with an API to:

  • Add, revoke, manage user consent
  • Store multiple preferences for each user (e.g. if you have multiple newsletters or opt-ins)
  • Store whether a user was verified with double opt-in
  • Store additional information about the user, allowing you to identify him/her in the future
  • For each consent, track the legal or privacy notice the user has accepted
  • For each consent, track the form/wording the user was prompted with
  • Flexibly upload any form of proof of consent or legal notice, including a PDF if consent was collected on paper
  • For each user, get the latest preferences and which consent action is the proof of consent
  • For each user, get the history of consents

 

Different ways of accessing the API

You can access the API via HTTP, or through our JavaScript library. The JavaScript library also comes with a few extra features, such as:

  • Extracting the consent data automatically from a form
  • Asynchronous saving via localstorage

The methods are the same for all the interfaces and are explained below. Each interface has its own specific integration instructions and specific features, which are explained in the respective guides:

Key differences

  • The HTTP API must be authenticated with the private key, the JavaScript library with the public key
  • the JavaScript API only supports write actions, not read ones

Consent Dashboard

The aesthetic and user-friendly visual Dashboard allows you to easily sort, analyze and review your consent records.

You can find your Consent Database Dashboard by simply visiting your main account dashboard > [Your website/app], then Consent Database > Consent Database Dashboard.

Consent Solution Dashboard button

Once you’ve collected your consents, sorting and analyzing your user consent data are made practically pain-free as records are categorized by “Consents”, “Subjects” and “Legal Notices”:

Consent Solution Dashboard - Consent, Subjects and Legal Notices

Furthermore, the color scheme is designed to provide visual cues regarding the status of consent preferences for each subject listed:

  • GREEN Active consent (true).
  • RED Inactive consent (false).
  • GREY Indicates an undetermined or unspecified consent status when a checkbox lacks a boolean value.

You can click on the icons on the right side of the table for easy access to individual user, consent and legal notices details:

Consent Solution Dashboard - Consent, Subjects and Legal Notices (details)

Or use the powerful search function to find subjects, consents or legal notices:

Consent Solution Dashboard - Consent, Subjects and Legal Notices (search function)

You even can apply detailed filters specific to the table you’re searching.

See the dashboard in action here:

 

Technical Overview

The Consent Database has the purpose of allowing you to save consent actions performed by your users (here called subjects) and to store all the information necessary to hold a proof. These consent actions result in a series of values saved about your subjects/users, which you can later recall via a dedicated endpoint. These values include the user’s preferences (newsletter, profiling, etc) that each consent section has modified.

Naming conventions

  • Subject: the person the personal data is referred to, which generally coincides with the user
  • Consent: the action of providing consent. Each consent action contains all the information necessary to uniquely identify that specific consent, the subject who performed it, the preferences expressed with that consent, the legal notices the user has accepted, the proof (e.g. the form the user was presented with)
  • Preferences: the various opt-ins the user has agreed to, such as newsletter, profiling, etc.

Example of implementation flow

The implementation flow will generally look like this:

  1. Identify all the preferences you collect from subjects (general, newsletter emailing, behavioral emailing, profiling etc)
  2. Determine what unique identifier to send to the Consent Database to later access consents and preferences for each subject. This field is not mandatory, and if you don’t provide one, we’ll assign an auto-generated subject ID
  3. Identify all points where the subject can change its preferences, such as:
    • At signup
    • When subscribing to the newsletter
    • When verifying the user via double opt-in
    • In the preferences page the user has in your dashboard
  4. Send a consent call for each

The Consent Database is flexible enough to be used in the most disparate scenarios, including offline scenarios, such as storing any consents that have been collected on paper.

Methods and properties

Consent

This method is used to send consent events. You can write and read, but you cannot modify existing consent events. Keep consents as a log history of the consents that the subject has provided, whether they’ve affected or not its preferences.

Properties

`timestamp`

Type: string (ISO 8601 timestamp)
Default value: auto-filled if not provided
Description: The timestamp at which the consent occurred

subject ([id], [email], [first_name], [last_name], [full_name], [verified])

Type: hash
Description: Wrapper for the subject set of properties, which can be saved both via the Subject method and from within the Consent method. Check the Subject method for the properties supported within this set.
Note: subject.id will be auto-filled if not provided.

legal_notices ([identifier], [version])

Type: array (accepts multiple objects)
Description: array of the legal notices to attach to the consent event, identified by their identifier and version. If version is not provided, the latest available will be used. Accepts the following fields:

  • identifier, string, used to pass an identifier of your legal documents. Accepts semantic names or custom values. Pre-defined semantic names are:
    • privacy_policy
    • cookie_policy
    • terms
  • version, string, used to specify the version of legal documents that your user has accepted. Default is the latest available.
proofs ([form], [content])

Type: array (accepts multiple objects)
Description: array of the proofs to attach to the consent event. It’s normally used to attach what the subject was prompted with (e.g. the form) and what the subject has filled (e.g. the content of the form).
Accepts the following fields:

  • form, string, used to include the form
  • content, string, used to include the content of the form

In some cases, like if you’re uploading a paper form, uploading only one of the two (such as content) which contains both the form and the content, will be sufficient.

preferences ({ [preference_name]: [preference_value], ... })

Type: hash
Description: set of key-value pairs with preferences that you’re saving with the consent action. These preferences will also be updated for the subject and will be retrievable with the Subject method. It’s advisable to define a preferences naming and stick to it for all your calls. For instance, you could pass:

  • general: true|false
  • newsletter: true|false
  • profiling: true|false
  • etc.

Subject

This method allows you to save subject information, and to retrieve them.

Properties you can write

id

Type: string
Default value: auto-filled if not provided
Description: To uniquely identify your subjects. Will be auto-generated if not provided. It’s advisable to either send an identifier that you already have in your database, or store the identifier that we generate and then provide in the callback, so that you can later retrieve a subject and update its preferences or send further consent events.

email
first_name
last_name
full_name

Type: string
Description: For your convenience, so that you can more easily identify a subject.

verified

Type: bool
Description: Reserved field used to signal whether a subject is verified, for instance via the double opt-in method

Read only properties

preferences ()

Type: hash
Description: contains the most updated preferences the user has provided via the consent events. Including the latest consent ID for each preference.

Legal_notices

This method allows you to store the legal notices that you can then reference under consent → legal_notices.

E.g. you have the following legal notices:

  • Privacy Policy
  • Cookie Policy
  • Terms and Conditions

At the first setup and whenever you update them, you can use this method to update the version. If you use iubenda for your legal documents, we’ll automatically update the contents of this method for you whenever your legal documents are changed.
You can read about how to enable this feature here.

Each time a new or existing legal_notice is filled, we’ll bump the version field by 1, starting from 1.

Properties

legal_notices 
    (
        { 
            identifier: [ privacy_policy|cookie_policy|terms|[custom] ], 
            content: [the actual legal text]
            timestamp: [date] // auto-generated, but can be overridden
            version: [1+] // progressive number, auto-generated, cannot be overridden
        }
    )

Accepts the following fields:

  • identifier, string, used to pass an identifier of your legal documents. Accepts semantic names or custom values. Pre-defined semantic names are:
    • privacy_policy
    • cookie_policy
    • terms
  • content, string or hash, the actual legal text that you’ll prompt the user with. You can store multilanguage content by passing a hash having the following structure { [language_code]: [content], ... }
  • timestamp, date, auto-generated, but can be overridden, should be customized with the time of update of the legal notice. By default it’s filled with the time the call is performed at
  • version, number, auto-generated, cannot be overridden

See also

The post Consent Database – Introduction and methods appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Guide to the Register of Data Processing Activities https://www.iubenda.com/en/help/6311-internal-privacy-management-getting-started/ Sat, 12 May 2018 17:56:29 +0000 https://help.iubenda.com/?p=6311 The General Data Protection Regulation (GDPR) (Regulation (EU) 2016/679) basically regulates how personal data should be lawfully processed (including how it’s collected, used, protected or interacted with in general). It is intended to strengthen data protection for all people whose personal information fall within its scope of application, putting personal data control back into their […]

The post Guide to the Register of Data Processing Activities appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

The General Data Protection Regulation (GDPR) (Regulation (EU) 2016/679) basically regulates how personal data should be lawfully processed (including how it’s collected, used, protected or interacted with in general). It is intended to strengthen data protection for all people whose personal information fall within its scope of application, putting personal data control back into their hands.

The aforementioned can, however, be a technical challenge to implement in practical terms. This is especially true for your register of data processing activities. Users must be able to describe which data they collect, for which purposes, the parties involved and some other details for the entire company, including data of employees.

If you are looking for further background information on the GDPR please have a look at our extensive GDPR guide.

This guide is meant to guide you step by step through our Register of Data Processing Activities.

Please note: Even though the GDPR is a common reason to put more effort into your register of data processing activities, our tool is not exclusively made for application under the GDPR. It can also be used for all your data processing activities in general, even by companies who do not have any users/customers within the EU.

 

Keep reading or view the full tutorial.

Does my organization need to keep records of processing activities under the GDPR? 

The GDPR requires both controllers and processors to keep a record of processing activities. Such records need to be in writing, including in electronic form. The Register of Data Processing Activities was specifically designed for controllers and processors to meet this requirement.

The record (also called “register”) of processing activities needs to be made available to the supervisory authority if requested.

When is my organization exempt from this requirement?

Enterprises or organizations that employ less than 250 persons are exempted from this requirement.

👉 However, if you employ less than 250 persons but match one of the following, you are required to fulfill this requirement of the GDPR:

  • the processing it carries out is likely to result in a risk to the rights and freedoms of data subjects
  • the processing is not occasional, OR
  • the processing includes special categories of data, as referred to in Article 9(1), or personal data relating to criminal convictions and offenses referred to in Article 10.

What does the concept of area mean?

Areas are perimeters within which data processing activities are homogeneous. Examples of areas are your website, mobile app, physical stores, employees, recruiting, manufacturing facility etc. For each, you can provide a description of how data is being processed, just like you are doing probably already with our privacy policy generator or the terms of service generator for any given site. In short, areas are replications of the ‘site’ entity that are connected to each other, that you can create at will.

How are members/roles defined?

At the account level you’re able to add members, who can then be associated with a particular role (such as “controller”, “processor etc.) or a specific area.

When associating, you can choose what role the member has within the following options:

  • Controller: means any person or legal entity involved in determining the purpose and ways of processing personal data.
  • Member of the controller’s organization: see list of examples below
  • Processor: means any person or legal entity involved in processing personal data on behalf of the controller
  • Subject (sometimes also called user): means an individual whose personal data is processed by a controller or processor.

For example, an internet company may collect user information via their website and store it using a 3rd party cloud service. In this scenario, the internet company is the data controller and the organization running the cloud service is the data processor.

You can think of it as basically an address book. All current owners are members too.

Please be aware: The defaults that you put in the area members section are then applied by default to each service.

The following members are available by default:

  • Employees
  • Users
  • EU Users
  • Marketing Department
  • HR Department
  • Finance Department
  • Customer Care Department
  • Sales Department
  • R&D Department
  • Development Department
  • Product Department
  • Legal Department
  • PR Department
  • Intelligence Department

How can I configure services with the new fields?

Your privacy policy needs to be adapted to your site’s or app’s data collection practices. You do that by adding a service.

Services generally fall into two categories:

  • Services related to your own data collection activities (eg. contact forms)
  • Services related to third-party data collection activities (eg. Google Analytics)

When figuring out which basic services to add to your policy, it may help to ask yourself the following questions:

  • What user data do I collect myself and how do I collect it?
    (eg. newsletter forms, contact forms, comment systems)
  • Which third-party services do I use on my site/app? Most likely these services also process user data in some way and therefore must be included in your policy.

In the following section, we will go through the new fields that we have released to facilitate your register of data processing activities (you can find these fields in the customization window that shows up when you add a service). This will be done step by step in order to assist you in choosing the right option for your personal situation.

Label and Description

Those 2 fields are simply for your convenience to be able to describe the given service. An example for a label could be “DE data center” and the corresponding description could be “Frankfurt data center”.

Region

This is a field that only applies to some services where you can specify if you are keeping data in the EU. A good example of this is “Amazon Web services” (often abbreviated as “AWS”).

Custom personal data

A field that only some services have, that allows you to specify the personal data type collected through that service.

Legal basis for processing data

Under the GDPR, data can only be processed if there’s at least one lawful basis for doing so.

The lawful bases are:

  • The user has given consent for one or more specific purposes.
  • The data processing is necessary for the performance of a contract in which the user is a participant or necessary in order to take steps (requested by the user) prior to entering the contract.
  • The processing is necessary for fulfilling a legal obligation to which the data controller is subject.
  • The processing is necessary for protecting the vital interests of the user or of another person.
  • The processing is necessary for performing a task carried out in the interest of the public or as contained under the official authority given to the data controller.
  • The processing is necessary for the legitimate interests of the data controller or third party, except where overridden by the interests, rights and freedoms of the user, in particular where the user is a child.

In our tool you can select from the following options:

  • Consent: Consent means offering individuals real choice and control. Genuine consent should put individuals in charge, build trust and engagement, and enhance your reputation. This refers to all tracking tools that are cookie-based, for which you collect consent via the cookie banner.
  • Contract: All that you need to do in order to provide the service (hosting, etc). You can rely on this lawful basis if you need to process someone’s personal data:
    • to fulfil your contractual obligations to them; or
    • because they have asked you to do something before entering into a contract (for example providing a quote).
  • Legal obligation: You can rely on this lawful basis if you need to process the personal data to comply with a common law or statutory obligation. This refers to invoicing for example.
  • Vital interest: You are likely to be able to rely on the so-called vital interests as your lawful basis if you need to process the personal data to protect someone’s life. This processing must be necessary. If you can reasonably protect the person’s vital interests in another less intrusive way, this basis will not apply to your case.
  • Public task: This is most relevant to public authorities, but it can apply to any organization that exercises official authority or carries out tasks in the general public interest.
  • Legitimate interest: Legitimate interests is certainly the most flexible lawful basis for processing, but you cannot assume it will always be the most appropriate for your case. It is likely to be most appropriate where you use people’s data in ways they would reasonably expect and which have a minimal privacy impact, or where there is a compelling justification for the processing.
  • Special category data: Special category data is personal data which according to the GDPR is more sensitive, and therefore needs more protection. This includes for example information about an individual’s race, religion or health.
  • Criminal offense data: To process personal data about criminal convictions or offenses, you must have both a lawful basis under Article 6 and either legal authority or official authority for the processing under Article 10.

Legal basis for data transfer outside of the EU

This only applies when you are transferring data outside of the EU so please choose accordingly.

You can choose between the following options:

  • No data transfer: self-explanatory.
  • Adequacy decisions: A decision adopted by the European Commission on the basis of Article 45 of Regulation (EU)2016/679, which establishes that a non-EU country ensures an adequate level of protection of personal data by reason of its domestic law or the international commitments it has entered into.
  • Binding corporate rules: Binding Corporate Rules (BCRs) are designed to allow multinational companies to transfer personal data from the European Economic Area (EEA) to their affiliates located outside of the EEA in compliance with the Article 47 of the GDPR. The procedure is designed to avoid you having to approach each individual data protection authority separately. Further information can be found under Article 47.
  • Appropriate safeguards: In the absence of a adequacy decision pursuant to Article 45(3), a controller or processor may transfer personal data to a third country or an international organization only if the controller or processor has provided appropriate safeguards, and on condition that enforceable data subject rights and effective legal remedies for data subjects are available. Further info can be found under Article 46.
  • Consent: Consent means offering individuals real choice and control. Genuine consent should put individuals in charge, build trust and engagement, and enhance your reputation. This refers to all tracking tools that are cookie-based, for which you collect consent via the cookie banner.
  • Standard data protection clauses adopted by the EU commission: The European Commission can decide that standard contractual clauses offer sufficient safeguards on data protection for the data to be transferred internationally. It has so far issued two sets of standard contractual clauses for data transfers from data controllers in the EU to data controllers established outside the EU or European Economic Area (EEA). Regulated by the GDPR and Regulation (EU) 2018/1725 (Data Protection Regulation applicable to the EU institutions, bodies, offices and agencies, “EUDPR”).
  • Public interest: This is mostly relevant to public authorities, but it can apply to any organization that exercises official authority or carries out tasks in the general public interest.
  • Establishment, exercise or defense of legal claims.
  • Vital interest: You are likely to be able to rely on the so-called vital interests as your lawful basis if you need to process the personal data to protect someone’s life. This processing must be necessary. If you can reasonably protect the person’s vital interests in another less intrusive way, this basis will not apply to your case.

Those related to the processing of personal data

Controller
Means any person or legal entity involved in determining the purpose and ways of processing the personal data.

Processors
Means any person or legal entity involved in processing personal data on behalf of the controller.

Members of the controller organization
A common example for this are the employees of the given company/organization.

Subjects
Can be for example either the users of the given website or app, visitors of a physical store or paying clients.

Available rights

Under normal circumstances, matters that have “consent” as the legal basis for processing, need to have all of the rights selected. Our solution offers you the following options:

  • Information: Individuals have the right to be informed about the collection and use of their personal data. This is a key transparency requirement under the GDPR.
  • Access: Individuals have the right to access their personal data and supplementary information. The right of access allows individuals to be aware of and verify the lawfulness of the processing.
  • Rectification: The GDPR includes a right for individuals to have inaccurate personal data rectified, or completed if it is incomplete. An individual can make a request for rectification verbally or in writing.
  • Erasure: The GDPR introduces a right for individuals to have personal data erased (also called the “right to be forgotten”). Individuals can make a request for erasure verbally or in writing.
  • Restrict processing: Individuals have the right to request the restriction or suppression of their personal data. This is however not an absolute right and only applies in certain circumstances.
  • Data portability: The right to data portability allows individuals to obtain and reuse their personal data for their own purposes across different services. It allows them to move, copy or transfer personal data easily from one IT environment to another in a safe and secure way, without affecting its usability.
  • Object: Individuals have the right to object to:
    • processing based on legitimate interests or the performance of a task in the public interest/exercise of official authority (including profiling);
    • direct marketing (including profiling); and
    • processing for purposes of scientific/historical research and statistics.

Retention policy

This field refers to how long data is being stored. The default option is “keeping the data for the time necessary to fulfill the purpose” and should apply to most cases. Otherwise, you can choose from a period of 1 up to 5 years.

Security measures

Common examples here are the used encryption method or vulnerability assessments/penetration tests meaning that your technical systems should be tested periodically in order to evaluate the safety and resilience of your systems.

Another important measure is the so-called “backup and storage of backup media” which means that it is advisable to keep the backup media in a dedicated place accessible only to the personnel in charge. The safety of the place should be verified at least annually.

It is also recommended to install and maintain a firewall. It is advisable to review the current configurations, manage permissions for system users, check that the system is up to date and finally proceed with the installation on portable devices. Having a firewall in place is however obviously nothing new in relation to the GDPR and should be regarded as a minimum security measure already provided for by current standards.

From the tool you will be able to choose from the following options:

  • Encryption: Encryption is a broadly used process whereby data gets turned into an encoded and unintelligible version, using encryption algorithms and an encryption key, and whereby a decryption key or code enables others to decode it again.
  • Anonymization: Recital 26 of the GDPR defines anonymized data as “data rendered anonymous in such a way that the data subject is not or no longer identifiable.”
  • Pseudonymization: Pseudonymization is the separation of data from direct identifiers so that linkage to an identity is not possible without additional information that is held separately. It may therefore reduce the risks associated with data processing, while also maintaining the data’s utility.
  • Auditing: Regular data audits alongside reviews and data management exercises are ongoing requirements to maintain compliance under the GDPR.
  • Access limitation: This refers to limited access to any personally identifiable data that is collected or stored from any individual in the European Union.

What does the button “Adding alternates” mean?

To thoroughly describe the processing as required under the GDPR, you must be very granular in describing your data collection practices. A common scenario is that of a website having multiple contact forms, where each form is aimed at different individuals or for which the data is shared with different parties. Another example is having two different newsletters for different user-groups or customers.

Our Register of Data Processing Activities tool therefore allows you to add different versions of the same service.

Practical Examples

Let’s now go through a range of specific examples to make the above information more practical including our “alternate options”:

Example Inc. adds a site area and configures the privacy policy, cookie policy, privacy controls and cookie solution, and the terms of service.

For the privacy policy, the following is done:

members: Here we set the global members for each role that is valid for the entire area. Members can also be specified on a per-service basis.
controller: Example Inc. (the owner)
members of the controller organization: employees
processors:
subjects: users of the site

name: Example Inc.

alternate_default

label: DE data center
description: Frankfurt data center
region: EU
legal basis for processing: contract
those who process the personal data: owner, employees (those who have been set at the site level)
subjects: users of the website
legal basis for data transfer: no data transfer
available rights: none (since it would not be possible to provide the service if they object to processing from Example Inc.)
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

alternate_1

label: NL data center
description: Amsterdam data center
region: EU
legal basis for processing: contract
those who process the personal data: owner, employees (those who have been set at the site level)
subjects: users of the website
legal basis for data transfer: no data transfer
available rights: none (since it would not be possible to provide the service if they object to processing from Example Inc.)
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

(if you do not use google analytics on your website or app you can simply insert another analytics tool here)

name: Google Analytics

alternate_default

label: Google Analytics
description: Google Analytics tracking tool
legal basis for processing: consent
those who process the personal data: owner, employees (of the given company)
subjects: users of the website
legal basis for data transfer: consent
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)

name: mailing and newsletter

alternate_default

label: main newsletter (remember that you can have more than one newsletter or mailing list)
description: main newsletter mailing list
custom personal data: email
legal basis for processing: consent
those who process the personal data: owner, employees (of the given company)
subjects: users of the website
legalbasis for data transfer: no data transfer
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)

alternate_1

label: main drip (referring to drip campaigns and not the standard newsletter)
description: drip campaigns
custom personal data: email
legal basis for processing: consent
those who process the personal data: owner, employees
subjects: users of the website
legal basis for data transfer: no data transfer
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

alternate_2

label: secondary product newsletter
description: “”
custom personal data: email
legal basis for processing: consent
those who process the personal data: owner, employees
subjects: users of the website
legal basis for data transfer: no data transfer
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

alternate_3

label: secondary product drip
description: “”
custom personal data:e mail
legal basis for processing: consent
those who process the personal data: owner, employees
subjects: users of the website
legal basis for data transfer: no data transfer
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

alternate_4

label: Affiliates newsletter
description: Newsletter for the affiliates
custom personal data: email
legal basis for processing: consent
those who process the personal data: owner, employees, agency x (who is managing the affiliate campaigns)
subjects: users of the website
lgal basis for data transfer: no data transfer
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

name: referral candy

alternate_default

label: main Referral Candy account
description: “”
legal basis for processing: consent
those who process the personal data: owner, employees, agency x (who is managing the affiliate campaigns)
subjects: users of the website
legal basis for data transfer: consent
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

alternate_1

label: Referral Candy account for secondary product
description: “”
legal basis for processing: consent
those who process the personal data: owner, employees, agency x (who is managing the affiliate campaigns)
subjects: users of the website
legal basis for data transfer: consent
available rights: information, access, rectification, erasure, restrict processing, data portability, object
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

The user adds a custom area and calls it “employees”, to describe the personal data it processes of employees and the purposes.

members:
controller: Example Inc. (the owner)
members of the controller organization: HR department
processors: Mr X, Mr Y
subjects: employees, consultants

name: payroll elaboration

alternate_default

legal basis for processing: legal obligation
those who process the personal data: owner, employees, HR department, Mr X, Mr Y
subjects: employees, consultants
legal basis for data transfer: no data transfer
available rights: none
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

name: “Timely” (employee time tracking software)

alternate_default

legal basis for processing: contract
those who process the personal data: owner, employees, HR department, Mr X, Mr Y
subjects: employees, consultants
legal basis for data transfer: consent
available rights: none
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

The user adds a custom area and calls it “job interview”, to describe the personal data he uses of candidates and the purposes.

members:
controller: Example Inc. (the owner)
members of the controller organization: employees, HR department
processors:
subjects: job candidates

name: candidate evaluation

alternate_default

legal basis for processing: consent
those who process the personal data: owner, employees, HR department
subjects: candidates
legal basis for data transfer: no data transfer
available rights: none
retention policy: keeping the data for the time necessary to fulfill the purpose (default option)
security measures: tbd

The post Guide to the Register of Data Processing Activities appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Apply GDPR Protections Only to EU Users or to All Users https://www.iubenda.com/en/help/5853-gdpr-protections-users/ Mon, 07 May 2018 12:11:40 +0000 https://help.iubenda.com/?p=5853 The General Data Protection Regulation (GDPR) is the new European privacy regulation, fully applicable from 25 May 2018. All privacy and cookie policies generated with iubenda are compliant with the GDPR, with the possibility of applying the protection standards defined by the regulation only to European users or to all users. Given that the GDPR […]

The post How to Apply GDPR Protections Only to EU Users or to All Users appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The General Data Protection Regulation (GDPR) is the new European privacy regulation, fully applicable from 25 May 2018. All privacy and cookie policies generated with iubenda are compliant with the GDPR, with the possibility of applying the protection standards defined by the regulation only to European users or to all users.

Given that the GDPR is an EU directive we offer the option to apply the new GDPR wording only when European data protection legislation applies. Using this option, the GDPR related text and provisions will then only apply to users who you are required to offer the rights to. However, you can also choose to apply that text to all users by choosing the “All Users” option.

Important (the following applies to European users)

If you are a European user, you are not allowed to exclude certain types of users from the rights awarded by the GDPR. This means European users must always apply the GDPR protections to ALL users (it’s the law). This is however not automatically set up by us (meaning that you still have the physical option to toggle this switch as you choose), so you ultimately decide if to honor the law or not in this regard. We of course STRONGLY recommend following the law and applying the protections to all users.

GDPR and EU standards

You can find the switch here:

  • log into your privacy policy admin area
  • enter the editing of your privacy policy, which can be found via Dashboard, then click on your policy and go to Edit from the privacy policy section
  • under the heading “Apply GDPR’s broader protection standards to” choose from All users (default option) or EU only

This allows you to consider your specific case and react to where your users/clients are based and choose accordingly.

Want to learn more about the GDPR? Please have a look at our detailed GDPR guide.

What changes have been made to the policy text?

In addition to the above information, you can find a summary of the changes introduced in reaction to the requirements of the GDPR here.

Depending on the type of privacy policy you choose, here are the changes for each of these policies compared to the earlier iubenda policies:

Version GDPR texts for everyone

  • general: improvements in readability
  • added: a section outlining the legal basis of processing
  • rewritten large parts: the section about the place of processing is now explicit about data transfers and the user’s informational rights regarding such transfers
  • rewritten: retention time now outlines the rationale behind any retention periods of user data
  • added: we’ve added a dedicated user rights section to accommodate rights required by the GDPR
  • rewritten small parts: the changes to this privacy policy section has been updated to account for GDPR rules
  • rewritten small parts: the definitions section was updated to account for GDPR wording
  • rewritten: the legal information section was updated to precisely describe the basis of the privacy policy wording
  • rewritten small parts: the cookie policy text has been rewritten to use the same terminology as the privacy policy and therefore play well with the rest of the system

Version GDPR texts only when European data protection legislation applies

  • general: improvements in readability
  • added: a section explaining that this privacy policy text follows two differing standards depending on which legislation applies to the user. This standard is explicitly mentioned within all of the privacy policy where differences are applicable
  • added: a section outlining the legal basis of processing
  • rewritten large parts: the section about the place of processing is now explicit about data transfers and the user’s informational rights regarding such transfers
  • rewritten: retention time now outlines the rationale behind any retention periods of user data
  • added: we’ve added a dedicated user rights section to accommodate rights required by the GDPR
  • added: a section that outlines when the broader of the differing standards apply to users
  • rewritten small parts: the changes to this privacy policy section has been updated to account for GDPR rules
  • rewritten small parts: the definitions section was updated to account for GDPR wording
  • rewritten: the legal information section was updated to precisely describe the basis of the privacy policy wording
  • rewritten small parts: the cookie policy text has been rewritten to use the same terminology as the privacy policy and therefore play well with the rest of the system

Want to learn more about providing a GDPR privacy policy? Please have a look at our guidance to choose the right services.

The post How to Apply GDPR Protections Only to EU Users or to All Users appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Behavior of iubenda Embedding Options When JavaScript Is Disabled https://www.iubenda.com/en/help/5339-behavior-of-iubenda-embedding-options-when-javascript-is-disabled/ Wed, 07 Mar 2018 09:02:29 +0000 https://help.iubenda.com/?p=5339 When JavaScript is disabled in a browser, your chosen embedding option will not appear as it is intended. However, it will degrade gracefully to showing a link that will lead any user to the privacy policy displayed on our own page (just the way the direct link works, usually). If you are concerned that your […]

The post Behavior of iubenda Embedding Options When JavaScript Is Disabled appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
When JavaScript is disabled in a browser, your chosen embedding option will not appear as it is intended. However, it will degrade gracefully to showing a link that will lead any user to the privacy policy displayed on our own page (just the way the direct link works, usually).

If you are concerned that your users may have disabled JavaScript and as a result may not be able to view your privacy policy, you have the following options:

If you would like to read more about API embedding or make your privacy policy available for offline viewing, please take a look at this guide.

Should JavaScript be an issue you would like to avoid when integrating the Cookie Solution, please be aware that JavaScript is required to make it work. It also allows the Cookie Solution to effectively block tracking codes. To make sure your users are not tracked if JavaScript is disabled, you should remove the ‘noscript’ versions of all your third party scripts.

See also

The post Behavior of iubenda Embedding Options When JavaScript Is Disabled appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Customize the way your website or app is referred to in your documents https://www.iubenda.com/en/help/4825-customize-this-application/ Thu, 09 Nov 2017 15:16:41 +0000 https://help.iubenda.com?p=4825 You can customize the way your project/website/app etc is referred to in your privacy policy and terms and conditions. The default is “This Application”. A website is in fact also an application, therefore your documents’ default reference to “This Application” is not in error. Moreover, the term “Application” encompasses a wider range of case law. […]

The post Customize the way your website or app is referred to in your documents appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
You can customize the way your project/website/app etc is referred to in your privacy policy and terms and conditions. The default is “This Application”. A website is in fact also an application, therefore your documents’ default reference to “This Application” is not in error. Moreover, the term “Application” encompasses a wider range of case law. In fact, in our privacy policies, we define “This Application” as – The hardware or software tool by which the Personal Data of the User is collected.

You might want to be more specific regarding how the documents refer to your property, for example when you want to specifically refer to “This Website”, or to the exact name of the property.

These three options:

  • “This Application” (default)
  • “This Website”
  • “Your site/app name”

can be accessed from the privacy policy/terms and conditions admin section below the content modifications under Advanced settings.

'This Application' customization

Examples

To illustrate how this works you can find three examples below, taken from the very start of the privacy policy:

  • “This Application”: “This Application collects some Personal Data from its Users
  • “This Website”: “This Website collects some Personal Data from its Users
  • “Your site/app name”: “{Your site/app name} collects some Personal Data from its Users

Please be aware that we’ve disabled this function for Russian (Russian documents will just keep the “This Application” wording).

See also

The post Customize the way your website or app is referred to in your documents appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution – PrestaShop Plugin Installation Guide https://www.iubenda.com/en/help/4338-cookie-solution-prestashop-plugin-installation-guide/ Wed, 27 Sep 2017 09:57:18 +0000 https://help.iubenda.com?p=4338 The PrestaShop plugin by iubenda allows you to automate the implementation of the cookie law rules, drastically reducing the necessity for direct interventions in the site’s code. Caution The module is currently compatible with all versions of PrestaShop starting from 1.7 for PrestaShop 1.6 please see here. You also need to have overrides enabled (enabled […]

The post Privacy Controls and Cookie Solution – PrestaShop Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The PrestaShop plugin by iubenda allows you to automate the implementation of the cookie law rules, drastically reducing the necessity for direct interventions in the site’s code.

Caution
iubenda Cookie Solution for PrestaShop

Functionality

  • The plugin automatically adds the iubenda code to all the pages of a site (to the <head> tag);
  • Manages the visualization of the banner and of the cookie policy, as well as the saving of user’s consent preferences as per cookie installation;
  • It supports the auto-assignment of categories when blocking scripts;
  • Simplifies the management of the iubenda Privacy Controls and Cookie Solution for multilingual sites.
  • AdRoll
  • AddThis widgets
  • Bing
  • CodePen
  • Criteo
  • Disqus
  • Elevio
  • Facebook Comments
  • Facebook widgets
  • Freshchat
  • Google AdSense
  • Google Analytics
  • Google Maps
  • Google ReCaptcha
  • Google Site Search
  • Google Tag Manager
  • Google oAuth
  • Google+ widgets
  • Headway
  • Instagram widgets
  • Kissmetrics
  • LinkedIn widgets
  • Mixpanel
  • Neodata
  • Olark
  • Optimizely
  • Outbrain
  • PayPal widgets
  • Pingdom
  • Pinterest widgets
  • Segment
  • ShareThis widgets
  • Twitter widgets
  • UserVoice
  • Vimeo
  • YouTube

Instructions

Installation and activation

  • Log in and open the admin section to get to your main PrestaShop dashboard;
  • Click on Modules > Modules & Services in the sidebar menu;
  • Click on Upload a module in the header section;
  • To install the module upload the zip file (click here to download) – you must point to the module’s zip archive, and not its folder or any of its unpacked files.

If the installation is successful, you’ll get this message:

PrestaShop plugin by iubenda

The module will then appear in your list of modules under “Modules & Services”.

Now it’s time to go configure the settings of the module.

How to add the cookie banner/consent banner and modify settings

Now that the module is ready, we need to feed it the necessary information from your iubenda account.

  • If you haven’t clicked on the Configure button inside the “Module installed!” pop-up message, navigate to the Modules & Services page and find the iubenda module: PrestaShop plugin by iubenda
  • Click on Configure to go to the module configuration settings.
  • Add the code from your iubenda account to the extension (this is what the embedding code looks like in your iubenda dashboard): Embed Cookie Solution (If you haven’t already generated your cookie banner/consent banner and code, you can do so here or for in-depth information, you can read the introduction to the iubenda Privacy Controls and Cookie Solution guide.)
  • Paste that code into the plugin form and save: PrestaShop plugin by iubenda (Being PHP native, we recommend the primary, faster option for the parsing engine. If you’re experiencing some issues, try with the alternative based on a custom HTML DOM class)

Use

Once configured, the plugin will begin to show the banner on which your cookie policy will be shown/linked to users that visit your site for the first time without the need for any other further configurations. The plugin will also recognize and automatically detect and block the cookies indicated in the above block-list, that are present on your site.

Important

Our PrestaShop extension automatically blocks scripts that are generated on the server side (therefore returned by PHP by PrestaShop). Scripts that are inserted into the page via JavaScript after the loading process of that page are not and cannot be blocked automatically.

These scripts can be blocked by entering the source into the Custom Script boxes in the plugin console or by using the manual wrapping method illustrated in the example below and (in more detail) in this help post

Blocking custom scripts from within the console

The Custom Scripts field makes it easy for you to block scripts inserted into the page directly from within the plugin console. This greatly reduces the need for direct edits to the site’s code.

Here’s how to do it:

  • On the left menu in your admin panel, go to the Improve section and click Extensions > Plugins.
  • Next, search “iubenda”, and when the plugin appears, click on the Configure button.
  • Scroll down to find the Custom scripts and Custom iframes fields at the bottom of the page.PrestaShop custom and iframe scripts fields
  • Enter your script or iframe sources as needed, and click the Save button at the bottom-right of the page.

Usage Examples

Using these fields are pretty straightforward. Simply enter the script or iframe src attribute you’d like to block.

Script

If you wanted to block a social button (which inserts scripts into the page via JavaScript), you’d simply need to enter the script source, e.g. connect.socialwebsite.net/en_US/track.js into the scripts field.

iframe

Let’s say you wanted to block scripts inserted into the page via the following iframe

<iframe width="1280" height="720" src="https://www.videowebsite.com/embed/xxFhMChxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 

What you’ll need to enter into the iframe field would be videowebsite.com/embed/ as this is the actual source of the scripts. Be careful NOT to enter the component id (videowebsite.com/embed/xxFhMChxx) to ensure that all scripts coming from the actual source are blocked.

Manual Use (wrapping method)

This method requires you to directly modify your site’s code. You’ll need to go into the relevant section of your site’s code and add the scripts to be blocked as explained below.

Here’s an example of how to make the plugin manually work for a Social button (which inserts scripts into the page via JavaScript).

<!--IUB-COOKIE-BLOCK-START-->
<script>
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s);
        js.id = id;
        js.src = "//connect.socialwebsite.net/en_US/sdk.js#xfbml=1&version=v2.3&appId=808061959224601";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'socialwebsite-jssdk'));
</script>
<!--IUB-COOKIE-BLOCK-END-->

If there are HTML / IMG / IFRAME elements, you will need to do it this way:

<!--IUB-COOKIE-BLOCK-START-->
      <iframe src="...
      <img src="...
<!--IUB-COOKIE-BLOCK-END-->

If you’ve enabled the per-category consent feature you’ll need to assign the purpose. Resuming the social button example, being part of the “Experience” purpose (id 3):

<!--IUB-COOKIE-BLOCK-START-PURPOSE-3-->
<script>
    ...
</script>
<!--IUB-COOKIE-BLOCK-END-PURPOSE-3-->

To stop automatic parsing/replacing the iframe/scripts that contain a defined src:

<!--IUB-COOKIE-BLOCK-SKIP-START-->
      <script type="text/javascript">...</script>
<!--IUB-COOKIE-BLOCK-SKIP-END-->

Further information

For API calls and xmlrpc we suggest the parameter ?iub_no_parse=1.

PrestaShop “Forbidden” error
Caution

Always remember to back up your website before attempting any fix.

In some rare cases, the system may return a “forbidden” error when you enter the Privacy Controls and Cookie Solution script, or any other script, into the Privacy Controls and Cookie Solution module and click “Save”.

PrestaShop forbidden error

This is likely related to a ModSecurity property of Apache activated in the PrestaShop backend. To solve the issue, you’ll need to disable the mod_security module. You can do this using the following procedure:

Click on Shop Parameters -> Click on Traffic&Seo -> Find the “Disable Apache ModSecurity Module” and set to “Yes”.

If for some reason the procedure doesn’t work, it may be necessary to contact your web hosting provider regarding your particular site restrictions.

1.3.1

Enhanced script insertion to follow _iub.csConfiguration based on autoblocking status
Removed async from the autoblocking script

1.3.0

Introduced iubenda automatic blocking feature

1.2.0

Support the Prestashop latest version 8
Update the core iubenda classes to the latest version

1.1.18

Fix SSRF security vulnerability
Remove googletagmanager.com/gtm.js from basic interaction

1.1.17

Integrate with PageCache ultimate

1.1.16

Fix: Avoid overriding the purposes attribute if it was set

1.1.15

Fix: Purpose evaluation for iframes blocking
Fix: Block the custom scripts while parsing

1.1.14

Fix: Follow code standard to avoid conflict on overriding
Fix: Add per-purpose on inline script tags
Tweak: Add GA to per-purpose blocking support

1.1.13

Fix: Move FB connect to experience enhancement

1.1.12

Tweak: Add Google GPT to per-purpose blocking support
Fix: admin.js ready method deprecation

1.1.11

Fix: limit url sanitize to http protocols
Fix: AddThis per-purpose category

1.1.10

New: Per-purpose script blocking support
New: “Reject” button support

1.0.9

Tweak: Simple HTML Dom PHP class update to 1.9
Tweak: Code handled with official code validator

1.0.8

New: Introducing a way to skip specific script parsing
Fix: Improved handling of iubenda script HTML
Tweak: Support links update

1.0.7

Tweak: Adjust the iubenda PHP class handling
Tweak: Update iubenda logo

1.0.6

New: Option to block custom scripts and iframes
Tweak: Update and extend the list of blocked scripts including Google Site Search, Google oAuth, LinkedIn widgets, PayPal widgets, Freshchat, UserVoice, AdRoll, Olark, Segment, Kissmetrics, Mixpanel, Pingdom, Bing and Elevio

1.0.5

Tweak: Update and extend the list of blocked scripts including Pinterest, AddThis, Disqus, Optimizely, Neodata, Criteo, Outbrain, Headway and CodePen
Tweak: Interface improvements

1.0.4

Fix: Invalid iubenda parser implementation

1.0.3

Tweak: Update and unify iubenda parsing engine

1.0.2

Fix: Eage output empty if script blocking disabled

1.0.1

Tweak: iubenda faster class regex update

1.0

Initial release

⚠ Caution

After installation, please be sure to set-up prior blocking, as this is legally mandatory under EU Law. You can find various methods of prior blocking along with full instructions in this guide.

Privacy Controls and Cookie Solution on PrestaShop 1.6.x

If you’re unable to upgrade to version 1.7.x (which is compatible with our module), you will need to integrate the code manually. To do this either:

  1. integrate the code into the <head> tag of your website (as the first element), please see Manual embedding below for instructions on how to do this or;
  2. use a module that allows you to add our Privacy Controls and Cookie Solution script in the <head> tag of your website (as the first element), for this please see Embedding via a Prestashop module below.

In this case, you will most likely need to edit the header.tpl file of your Prestashop theme and add the Privacy Controls and Cookie Solution script.

We do not have a dedicated guide for this, but you can find some helpful articles online, such as this one, on how to modify a PrestaShop template.

The Privacy Controls and Cookie Solution code should be placed between “literal” tags as shown below:

{literal}
Cookie Solution Script
{/literal}

If you don’t want to put your hands on the code, you can also use a simple Prestashop module that allows you to add our Privacy Controls and Cookie Solution script in the <head> tag of the page, such as this module here

Remember that, in addition to displaying a cookie banner/consent banner, you must also block cookies before consent. Need help with Prior blocking? Check out our guide on Manuel tagging here

See also

The post Privacy Controls and Cookie Solution – PrestaShop Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Force Update & Change the “Last updated” Date Information https://www.iubenda.com/en/help/4158-force-update/ Tue, 01 Aug 2017 10:20:06 +0000 http://help.iubenda.com/?p=4158 Sometimes you need to update the “last updated” information on your privacy policy/terms and conditions to reflect changes in that document. When do I need to change my last update section? Whenever you change your privacy policy and terms & conditions in our generator, this is not needed. In those cases (in 99.9% of cases), […]

The post How to Force Update & Change the “Last updated” Date Information appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Sometimes you need to update the “last updated” information on your privacy policy/terms and conditions to reflect changes in that document.

Latest update section at the bottom of the policy/terms and conditions

When do I need to change my last update section?

Whenever you change your privacy policy and terms & conditions in our generator, this is not needed. In those cases (in 99.9% of cases), the generator takes care of this for you.

The very rare case in which you need to do this manually is when iubenda performs updates that we want to be ultimately triggered by the user.

The exact use case is this: we’ve made an update, but we do not want to perform this update without you being in charge of the update. In this scenario, you visit your dashboard and perform this update yourself. Our change is “cached” and not visible to the user unless you update the privacy policy in any way, or trigger the change by using the dedicated button.

We will always let you know if such a case occurs.

So how do I change my “last update” date?

There are two possible ways to perform such an update:

  1. You can change your privacy policy/terms and conditions by adding something new or by removing something from your existing document. This triggers some background maintenance, removes any cache sitting on your document and updates the “last updated” section.
  2. We’ve made a dedicated button for this exact use case. It can be found in the document’s admin page under Advanced Settings (Dashboard > [your website] > Edit > Advanced Settings). Clicking this button will flush the cache and update the date on your privacy policy/terms and conditions to now/today.
Force update this document

The post How to Force Update & Change the “Last updated” Date Information appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How Are the Privacy Controls and Cookie Solution Pageviews Calculated? https://www.iubenda.com/en/help/3062-how-are-calculated-the-pageviews-of-the-cookie-solution/ Thu, 11 May 2017 12:27:04 +0000 http://help.iubenda.com/?p=3062&lang=en Legacy user? Please refer to this guide to find out how your pageviews are calculated → To operate properly, the iubenda Privacy Controls and Cookie Solution counts the number of pageviews generated by the website. This is also done to provide the user with useful information regarding the collection of the consent, such as the […]

The post How Are the Privacy Controls and Cookie Solution Pageviews Calculated? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? Please refer to this guide to find out how your pageviews are calculated →

To operate properly, the iubenda Privacy Controls and Cookie Solution counts the number of pageviews generated by the website. This is also done to provide the user with useful information regarding the collection of the consent, such as the percentage of consent on the total visits, the manner in which the consent was collected and so on.

The count of the pageviews is carried on by counting the number of executions of the Privacy Controls and Cookie Solution script. Whenever the Privacy Controls and Cookie Solution code runs, our software records a pageview.

In order to find out the number of generated pageviews:
  • head to your dashboard;
  • select the site for which you want to check the pageviews;
  • click on the gear icon in the top-right corner to access the site settings;
  • navigate to “Manage subscription” and scroll to the bottom to check the pageviews.

Why does the amount of pageviews calculated by iubenda not coincide with the pageviews calculated with Google Analytics?

The number of pageviews calculated by our software may differ from those calculated using other statistical software such as Google Analytics, ShinyStat or Matomo/Piwik. This difference is due to the fact that the Privacy Controls and Cookie Solution automatically excludes from the counting, the pageviews generated by bots.

Are the pageviews calculated only at the first visit of each user?

Once the consent has been collected, the banner will disappear and the scripts/cookies that were subjected to the prior consent are immediately released. This is possible because the Privacy Controls and Cookie Solution script continues working behind the scenes, recognizing the users who have already given their consent.

For this reason the pageview is not recorded only at the first visit of each user, but also during all subsequent visits. The Privacy Controls and Cookie Solution script, in fact, runs continuously – even if the banner is not displayed and the blocking of scripts not executed.

How We Exclude Bots from Pageview Counting?

Many users ask if bot traffic is counted in pageviews. The answer is no — our system is designed to exclude bots so your statistics reflect real user activity.

What Happens When a Bot Visits Your Site
  1. The script loads
    The Privacy Controls and Cookie Solution script always loads, whether the visitor is a person or a bot.
  2. The system checks the visitor
    The script looks at the visitor’s User Agent (the identifier browsers and crawlers use).
  3. The system identifies bots
    • If the User Agent contains the word “bot” or matches our known bot list, the visitor is flagged as a bot.
    • If it doesn’t, the visitor is treated as a normal user.
  4. The system excludes the bot
    • The system accepts the preferences automatically and unlocks any blocked scripts.
    • The banner is not shown.
    • No pageview is recorded.
    • Other functions, like event tracking, still work as normal.

This process ensures that bot traffic never inflates your pageview numbers.

Which Bots We Exclude

We exclude:

  • Any User Agent with “bot” in its name.
  • A long list of known crawlers and testing tools, such as:
  • 360Spider
  • A6-Indexer
  • Aboundex
  • AddThis
  • ADmantX
  • backlinkcrawler
  • baiduspider
  • bibnum.bnf
  • biglotron
  • BingPreview
  • binlar
  • BUbiNG
  • CC Metadata Scaper
  • changedetection
  • Chrome-Lighthouse
  • coccoc
  • Commons-HttpClient
  • content crawler spider
  • convera
  • crawler4j
  • curl
  • CyberPatrol
  • domaincrawler
  • drupact
  • ec2linkfinder
  • europarchive.org
  • ezooms
  • facebookexternalhit
  • FAST Enterprise Crawler
  • FAST-WebCrawler
  • findlink
  • findthatfile
  • fluffy
  • fr-crawler
  • g00g1e.net
  • gigablast
  • GingerCrawler
  • gnam gnam spider
  • Google favicon
  • Google-InspectionTool
  • GoogleOther
  • GoogleSecurityScanner
  • grapeshot
  • GrapeshotCrawler
  • grub.org
  • heritrix
  • hotjar
  • httpunit
  • httrack
  • ia_archiver
  • ichiro
  • integromedb
  • IOI
  • ip-web-crawler.com
  • ips-agent
  • it2media-domain-crawler
  • java
  • lb-spider
  • libwww
  • linkdex
  • lipperhey
  • Lipperhey SEO Service
  • lssrocketcrawler
  • ltx71
  • Mediapartners-Google
  • MegaIndex
  • MicrosoftPreview
  • netresearchserver
  • nutch
  • openindexspider
  • page2rss
  • panscient
  • phpcrawl
  • postrank
  • proximic
  • Python-urllib
  • Qwantify
  • RetrevoPageAnalyzer
  • Sansec Security Monitor
  • SimpleCrawler
  • sistrix crawler
  • siteexplorer.info
  • slurp
  • sogou
  • speedy
  • summify
  • teoma
  • UsineNouvelleCrawler
  • Voyager
  • webcompanycrawler
  • webcrawler
  • webmon
  • WeSEE:Search
  • wget
  • wotbox
  • y!j-asr
  • yahoo
  • yandex
  • yanga
  • yeti
  • Bytespider

We also block bots from major search engines like GoogleBot, Bing, and DuckDuckGo. This way, we make sure your pageview count reflects only real user activity.

See also

The post How Are the Privacy Controls and Cookie Solution Pageviews Calculated? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Honor and Include a “Do Not Track” Clause in the Privacy Policy https://www.iubenda.com/en/help/3953-how-to-honor-and-include-a-do-not-track-clause-in-the-privacy-policy/ Tue, 09 May 2017 13:15:08 +0000 http://help.iubenda.com/?p=3953&lang=en Do Not Track (DNT) is a browser feature that allows for users to have greater control over the information that is collected from them during their browsing activities. Specifically, when this feature is activated through the browser’s settings, every website visited receives a Do Not Track request. However, most website no longer support Do Not […]

The post How to Honor and Include a “Do Not Track” Clause in the Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Do Not Track (DNT) is a browser feature that allows for users to have greater control over the information that is collected from them during their browsing activities. Specifically, when this feature is activated through the browser’s settings, every website visited receives a Do Not Track request.

However, most website no longer support Do Not Track requests therefore even though the Do Not Track request is sent, it is of no effect.

Given that, for the most part websites do not honor Do Not Track (DNT) requests, iubenda offers users the option to add a ‘Do Not Track’ clause through the Privacy and Cookie Policy Generator if you choose to explicitly declare that your application does not support DNT requests.

To do this, once in the iubenda Privacy and Cookie Policy Generator, just click on Add service and then search for the “Do not track” clause, and you are done.

Do Not Track

Further information on Do Not Track is available in the following articles:

What are my obligations if my site does support Do Not Track?

If your site supports “Do Not Track” requests, and you want to declare it inside your Privacy and Cookie Policy, please create a new custom clause where you explain how “Do Not Track” requests are handled.

The post How to Honor and Include a “Do Not Track” Clause in the Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on WordPress.com https://www.iubenda.com/en/help/3905-how-to-use-iubenda-privacy-and-cookie-policy-on-wordpress-com/ Fri, 28 Apr 2017 10:01:15 +0000 http://help.iubenda.com/?p=3905&lang=en Since WordPress.com doesn’t allow* the addition of JavaScript into its pages, we’re going to use the direct link option provided by the generator. These are the simple steps you need to take. *Update: this is now allowed, but only on WordPress.com Business Plans – code limitations still apply to Free, Personal, and Premium Plans. If you […]

The post How to use iubenda privacy and cookie policy on WordPress.com appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Since WordPress.com doesn’t allow* the addition of JavaScript into its pages, we’re going to use the direct link option provided by the generator. These are the simple steps you need to take.

*Update: this is now allowed, but only on WordPress.com Business Plans – code limitations still apply to Free, Personal, and Premium Plans.

If you are using the more customizable self hosted version of WordPress, read How to use iubenda privacy and cookie policy on a WordPress website.

 

Get your privacy policy link

  • Head to your dashboard and click on the website that you’d like to get the embed code for
  • Next, click the <>EMBED button in the Privacy and Cookie Policy section, this will take you directly to the integration section
  • Once there, simply click on the “Direct Link” tab and copy the appropriate link
direct link integration iubenda

Integrate with WordPress.com

For this, you’ll need to go to your site admin area (usually something like yourwebsite.wordpress.com/wp-admin/ ).

In order to add the iubenda privacy policy link to your WordPress.com website, we’re going to use the links widget. Links widgets can essentially be added all over the design you’re using with links going practically anywhere you want them.

Connect the privacy policy with the Links widget

Now, that you have your privacy policy link, add it to your links widget in the footer of your site. The fact that your privacy policy is in the footer of the page makes sure that it is visible, no matter which page of your site is being accessed (as legally required).

Like so:

This is how you’ll accomplish this.

In your WP admin in the sidebar, click on “links” and then “Add New” (seen at the top center-left):

Add new link

Next, you’ll need to:

  • Name your privacy policy “Privacy Policy”
  • Paste in the link taken from the iubenda generator dashboard in the Web Address field
  • Add it to a category called something like About, if you already have one created, simply create one by clicking on + Add New Category, located in the lower section of the page (Bonus tip: select “_blank” in the Target section if you’d like the policy to open in a new tab)
  • Now, click the Add Link button on the upper right of the page
How to add a new link in wordpress

Place the Links widget in the site footer

With that done, we simply need to place this link category within your footer. For this, find the Appearance link in your admin and then navigate to Widgets. In this window, you should now see the footer widget area. This is where we need to place the category containing our links.

Simply:

  • Drag the Links widget into your preferred footer-widget area
  • Select the category you assigned your Privacy Policy link to (in this example, that would be theAbout category
  • Lastly, click the Save button and you’re done

You now have an iubenda privacy policy on your WordPress.com site.

See also

The post How to use iubenda privacy and cookie policy on WordPress.com appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Cache, Speed and Other Optimization of the iubenda Privacy Controls and Cookie Solution https://www.iubenda.com/en/help/3834-cache-and-optimisation-of-the-iubenda-cookie-solution/ Wed, 29 Mar 2017 15:28:04 +0000 http://help.iubenda.com/?p=3834&lang=en Here are our tips on how to further optimize the performance of our Privacy Controls and Cookie Solution: The Privacy Controls and Cookie Solution is configured by default to avoid running when we detect spiders or bots – therefore, there are no SEO effects whatsoever when using it. Direct loading In addition to the above […]

The post Cache, Speed and Other Optimization of the iubenda Privacy Controls and Cookie Solution appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Here are our tips on how to further optimize the performance of our Privacy Controls and Cookie Solution:

  1. Include the Privacy Controls and Cookie Solution scripts directly in the document’s HTML, don’t use a tag manager or another script
  2. If you’ve enabled the TCF option, you should include the Privacy Controls and Cookie Solution inside the body, not the head
  3. Preload the js files as soon as possible in the head
  4. Autoblocking is essential for preventing third-party resources (such as ads) from loading before user consent is obtained. To ensure its functionality, autoblocking.js, stub-v2.js, and safe-tcf-v2.js must be executed in the correct order and should not be loaded asynchronously using defer or requestIdleCallback() attributes.
    ❗ Important Considerations:
    • Do not use defer or requestIdleCallback() for autoblocking.js, stub-v2.js, and safe-tcf-v2.js.
    • Autoblocking must be executed first to block the DOM before any external resources are loaded.
    • Do not attempt to optimize autoblocking as it is a critical mechanism for user privacy and security.
  5. The Privacy Controls and Cookie Solution should be embedded after at least one text or image tag to avoid influencing First Contentful Paint. However, keep in mind that, if you’ve enabled the TCF option, the lower you place the Privacy Controls and Cookie Solution scripts, the more delayed the ads will be activated.
  6. safe.js and safe-tcf-v2.js impact PageSpeed score. Ideally, you should use them only if you can write server side code (see our php example):
    • include safe.js only when the _iub_cs_xxx cookie exists
    • include safe-tcf-v2.js only when the euconsent-v2 cookie exists
  7. Decrease inlineDelay value (integer, milliseconds, default 500) to reduce the total time of activation. Keep in mind that inlineDelay works only with the “-inline” block, so it is reduced only to that kind of snippet. Finally, don’t set it under 300.

The Privacy Controls and Cookie Solution is configured by default to avoid running when we detect spiders or bots – therefore, there are no SEO effects whatsoever when using it.

Direct loading

In addition to the above suggestions, you may want to use a specific version of the iubenda Privacy Controls and Cookie Solution. To do that, in your snippet, instead of:

<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

You’ll have:

<script type="text/javascript" src="//cdn.iubenda.com/cs/versions/iubenda_cs-1.30.3.js" charset="UTF-8" async></script>

The “1.30.3” value must be replaced with the number of the version to be used. Available versions are those released from version 1.29.0 onwards (check the changelog for a listing of all released Privacy Controls and Cookie Solution versions. To use a version earlier than 1.29.0, read here).

Unlike the default link (//cdn.iubenda.com/cs/iubenda_cs.js), the link //cdn.iubenda.com/cs/versions/iubenda_cs-1.30.3.js has a very extended cache configuration as it points to a specific version which does not require future modifications.

If you decide to lock the iubenda Privacy Controls and Cookie Solution at a specific version, we suggest that you manually update it periodically so that you may continue to benefit from our updates.

By applying the edit described above to the Privacy Controls and Cookie Solution, the js resource will load a new file containing the desired version.

It’s a best practice, also adopted by Google for the loading of Google Analytics, as a way to achieve a compromise between the need to update the Privacy Controls and Cookie Solution and the loading/caching speed.

The js file is in fact a file with a brief cache of few bytes, which in turn calls the real Privacy Controls and Cookie Solution, whose cache is much more extensive.

Direct loading of versions prior to 1.29.0

If Google PageSpeed provided you with a suggestion similar to the following, we can help you solve the problem:

Look through the browser’s cache: If there is a maximum age for statistic resources in the HTTP headers or if an expiry date is set, the browser will load the the resources previously downloaded from the local disk instead of from the network.

For versions prior to 1.29.0 (but later than 1.3.11), to bypass iubenda_cs.js, you’ll have to get the hash from the desired version. This way you’ll be able to:

  • Eliminate an intermediary passage (resulting however in an almost negligible gain of a few milliseconds)
  • Access a version of the file with a very long cache

For example, let’s take version “1.23.2”: by visiting https://cdn.iubenda.com/cs/versions/iubenda_cs-1.23.2.js, you’ll get e.src="//cdn.iubenda.com/cookie_solution/iubenda_cs/core-03369fd53df171f29d94bfed207eedaa.js" which is the URL of the file with the hash of the desired version.

So, in your Privacy Controls and Cookie Solution snippet, instead of:

<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

You’ll have:

<script>
  _iub.csConfigLegacy = !1;
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cookie_solution/iubenda_cs/core-03369fd53df171f29d94bfed207eedaa.js" charset="UTF-8" async></script>

IAB Transparency and Consent Framework

If you’ve enabled IAB Transparency and Consent Framework (TCF) compatibility for the customization of advertising tracking preferences, and would like to make the most of the cache, you need to take the value of _iub.GVL2 from https://cdn.iubenda.com/cs/iubenda_cs.js and add it to your script.

So, continuing with the previous example, instead of:

<script src="//cdn.iubenda.com/cs/iubenda_cs.js" async></script>

You’ll have:

<script>
  _iub.csConfigLegacy = !1, _iub.GVL2 = _iub.GVL2 || 54;
</script>
<script src="//cdn.iubenda.com/cookie_solution/iubenda_cs/core-03369fd53df171f29d94bfed207eedaa.js" async></script>

However, please note that you’ll have to update the value of _iub.GVL2 on a weekly basis (so that it matches the value included in https://cdn.iubenda.com/cs/iubenda_cs.js), as the Global Vendor List is regularly updated.

Because of this, we advise against direct loading for the TCF. Instead, we suggest using the inline activator and not directly blocking the vendor scripts (see our examples).

Inline activator – Direct inclusion of the activator inside the page

It’s also possible to include the part of the code relative to the scripts, directly in-page (inline); this code is known as the inline activator. Scripts can be activated through the inline activator even if the iubenda_cs.js primary resource is generically unavailable or in error.

The inline activator for safe.js is available at:

The inline activator for safe-tcf-v2.js is available at:

For more information and code samples, see How to Configure Your Privacy Controls and Cookie Solution (Advanced Guide).

Optimization examples

Without TCF

HTML

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- Preload resources beforehand -->
    <link rel="preload" href="//cdn.iubenda.com/cs/iubenda_cs.js" as="script">
    
    <!-- The ID (e.g. 12345) should be the same as cookiePolicyId -->
    <link rel="preload" href="//www.iubenda.com/cookie-solution/confs/js/12345.js" as="script">

    <!-- other stuff in head tag -->
</head>

<body>
    <script>
        var _iub = _iub || [];
        _iub.csConfiguration = {
            "lang": "en",
            "siteId": 67890, //use your siteId
            "cookiePolicyId": 12345, //use your cookiePolicyId
            "enableTcf": true,
            "inlineDelay": 300, //default value: 500
            // ...
        };
    </script>
    
    <!-- inline activator - safe.js (optional) -->
    <script type="text/javascript">
        //<![CDATA[
            //copy content from cdn.iubenda.com/cs/safe.js (current channel) and paste here
        //]]>
    </script>

    <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
</body>

</html>

PHP

<?php
  $cookie_policy_id = 12345; //use your cookiePolicyId
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- Preload resources beforehand -->
    <link rel="preload" href="//cdn.iubenda.com/cs/iubenda_cs.js" as="script">
    <link rel="preload" href="//www.iubenda.com/cookie-solution/confs/js/<?php echo $cookie_policy_id; ?>.js" as="script">

    <!-- other stuff in head tag -->
</head>

<body>

    <script>
        var _iub = _iub || [];
        _iub.csConfiguration = {
            "lang": "en",
            "siteId": 67890, //use your siteId
            "cookiePolicyId": <?php echo $cookie_policy_id; ?>, 
            "inlineDelay": 300, //default value: 500
            // ...
        };
    </script>

    <!-- Only include safe.js if the consent cookie is found -->
    <?php if (isset($_COOKIE["_iub_cs-{$cookie_policy_id}"])) { ?>
    <script>
        /* inline safe.js */
    </script>
    <?php } ?>
    
    <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
</body>

</html>

With TCF enabled

HTML – TCF and inline activator

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- Preload resources beforehand -->
    <link rel="preload" href="//cdn.iubenda.com/cs/tcf/stub-v2.js" as="script">
    <link rel="preload" href="//cdn.iubenda.com/cs/tcf/safe-tcf-v2.js" as="script">
    <link rel="preload" href="//cdn.iubenda.com/cs/iubenda_cs.js" as="script">
    
    <!-- The ID (e.g. 12345) should be the same as cookiePolicyId -->
    <link rel="preload" href="//www.iubenda.com/cookie-solution/confs/js/12345.js" as="script">

    <!-- other stuff in head tag -->
</head>

<body>
    <script>
        var _iub = _iub || [];
        _iub.csConfiguration = {
            "lang": "en",
            "siteId": 67890, //use your siteId
            "cookiePolicyId": 12345, //use your cookiePolicyId
            "enableTcf": true,
            "inlineDelay": 300, //default value: 500
            // ...
        };
    </script>
    <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
    <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/safe-tcf-v2.js"></script>
    
    <!-- inline activator - safe.js -->
    <script type="text/javascript">
        //<![CDATA[
            //copy content from cdn.iubenda.com/cs/safe.js (current channel) and paste here
        //]]>
    </script>

    <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
</body>

</html>

PHP – TCF and inline activator

<?php
  $cookie_policy_id = 12345; //use your cookiePolicyId
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <!-- Preload resources beforehand -->
    <link rel="preload" href="//cdn.iubenda.com/cs/tcf/stub-v2.js" as="script">
    
    <!-- Only preload safe-tcf-v2.js if the euconsent-v2 cookie is found -->
    <?php if (isset($_COOKIE['euconsent-v2'])) { ?>
    <link rel="preload" href="//cdn.iubenda.com/cs/tcf/safe-tcf-v2.js" as="script">
    <?php } ?>
    
    <link rel="preload" href="//cdn.iubenda.com/cs/iubenda_cs.js" as="script">
    <link rel="preload" href="//www.iubenda.com/cookie-solution/confs/js/<?php echo $cookie_policy_id; ?>.js" as="script">

    <!-- other stuff in head tag -->
</head>

<body>

    <script>
        var _iub = _iub || [];
        _iub.csConfiguration = {
            "lang": "en",
            "siteId": 67890, //use your siteId
            "cookiePolicyId": <?php echo $cookie_policy_id; ?>, 
            "enableTcf": true,
            "inlineDelay": 300, //default value: 500
            // ...
        };
    </script>

    <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
    
    <!-- Only include safe-tcf-v2.js if the TCF cookie euconsent-v2 is found -->
    <?php if (isset($_COOKIE['euconsent-v2'])) { ?>
    <script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/safe-tcf-v2.js"></script>
    <?php } ?>
    
    <!-- Only include safe.js if the consent cookie is found -->
    <?php if (isset($_COOKIE["_iub_cs-{$cookie_policy_id}"])) { ?>
    <script>
        /* inline safe.js */
    </script>
    <?php } ?>
    
    <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
</body>

</html>

See also

The post Cache, Speed and Other Optimization of the iubenda Privacy Controls and Cookie Solution appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Configure Your Privacy Controls and Cookie Solution (beginner’s guide) https://www.iubenda.com/en/help/3831-customize-cookie-banner/ Fri, 24 Mar 2017 11:41:11 +0000 http://help.iubenda.com/?p=3831&lang=en Welcome to our Privacy Controls and Cookie Solution Configurator! This guide is intended to walk you through the configuration of our Privacy Controls and Cookie Solution using our configurator. Check here to learn more about cookies and when a cookie notice is needed. Start here for more general information on our cookie management platform. You can find full detailed settings and […]

The post How to Configure Your Privacy Controls and Cookie Solution (beginner’s guide) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Welcome to our Privacy Controls and Cookie Solution Configurator!

  • Intuitive Interface: Our interface makes configuring your Privacy Controls and Cookie Solution straightforward and user-friendly.
  • Personalized Guidance: Follow a step-by-step process that recommends the best settings for your specific needs.
  • Simple Customization: Easily tailor every aspect of your privacy notice with just a few clicks.

This guide is intended to walk you through the configuration of our Privacy Controls and Cookie Solution using our configurator.

  • Check here to learn more about cookies and when a cookie notice is needed.
  • Start here for more general information on our cookie management platform.
  • You can find full detailed settings and customization in this advanced guide.

Getting Started

To begin configuring your cookie notice go to Dashboard > [your website / app] then click on Generate now (or Edit, if you have already generated a banner) under the Privacy Controls and Cookie Solution area. This will take you directly to the configuration panel.

*If you don’t have a iubenda account yet, or you’ve not generated any document with iubenda, you can try our solution from here.

With our new configurator, you’ll be required to go through some steps to set up the main features of your site / app.

Let’s see them.

Territorial scope

Firstly, you will be prompted to choose where you are based and where your users are based to set the territorial range of your site/app.
Here you can pick one of the predefined options about your users’ location or select a custom list of Countries.

After you’re done, just click on Confirm and Proceed.

Compliance settings

Our configurator preselects the compliance settings that may apply to your specific case based on your choices.
You can still adjust the predefined settings by switching the toggles.

💡 Our system provides you with some explanations and suggestions when making choices that can result in compliance issues based on the choices you have made previously.

warning

In this example, if you have selected that you or your users are in Europe and you disable the GDPR setting, the configurator indicates a likely compliance issue.

Our automated configurations are set up to comply with the strictest requirements of the main international legislations and regulations but you can modify every single setting by clicking on EDIT at the bottom of each box.

When you click EDIT at the bottom of each compliance item, you will have full access and control over all settings and banner behavior related to that scope. 

Let’s see, for example, the GDPR configuration:

Firstly, you can choose where to apply the GDPR, Worldwide or for EU users only.

Then, you can adjust the consent collection settings and manage banner elements and behavior.

Again, if some compliance issue arises, our configurator will show you an alert.

Similarly, this applies to the other compliances settings.

If you’re interested in learning more about the specific requirements of the different compliance areas and how they apply to your case, you can check:

Customizing style & text 

In this section, you’ll find the preset configuration of the aspect and all the graphic elements of your cookie banner/consent banner.

💡 Any changes you make will be instantly shown in the preview area on the right side of the page. You can also switch to different views (desktop, tablet, mobile), display the banner in other languages (if you have them enabled) or preview the differentiated per-country copy (if some compliance setting is applied only to a subset of users).

❗ Make sure to select the correct region from the dropdown menu to ensure the preview displays correctly and according to each compliance item and territorial scope. As shown below:

You can manage and customize every style element of the banner. 

Click on EDIT at the bottom of each box to: 

  • Change the banner position and add an optional “lightbox” effect via the background overlay feature within the Format and position configuration
  • Edit font size and customize the banner with a custom content copy in the Text Section
  • Change banner visuals such as banner and buttons color or choose between Dark and Light themeor from a set of preset Themes, customize the header with your brand colors and logo using the Theme configuration
  • Remove the iubenda branding in the Cookie Policy and Consent Preferences modals with the White label option (within the Theme configuration)
  • Customize the privacy widget and its position, or provide a link of your choice to allow your users to access and edit their privacy preferences easily

If you haven’t generated a Cookie Policy yet, the configurator will ask you to add one later, generate one with iubenda or use your own. We highly suggest that you implement a privacy and cookie policy and link it to the Privacy Controls and Cookie Solution as soon as possible. Find here how to generate one with iubenda.

Advanced settings

Clicking on Advanced Settings will open up a complete list of advanced options that will allow you to customize everything from banner animation, cookie policy link text, buttons and banner content to banner css, cookie expiration time and callbacks.
You can find practical instructions in our advanced Privacy Controls and Cookie Solution configuration guide.

Conclude and go to the next step

After going through all the previous steps, you’ll have a full view and a recap of your choices. 
You can always go back and change the settings on the corresponding section.

When you’re done and ready to move on, click Complete the configuration
And you’re done!

Clicking Complete the configuration takes you to the implementation page where you can copy your Privacy Controls and Cookie Solution code snippet. You can then embed the banner on your website using the generated snippet – pasting it into the <head> tag of your website’s HTML as the first element.

You can, alternatively, use one of our plugins: currently, we have plugins available for WordPressJoomla!PrestaShopand Magento.

Remote Configuration Feature

The remote configuration feature makes it easier to update your Privacy Controls and Cookie Solution settings by applying most changes directly to your website—no re-embedding needed.

What’s New?

With the latest update, the new snippet now includes all components of the Privacy Controls and Cookie Solution. This means every change in the banner, including Custom CSS, TCF tile, and US laws support, is automatically applied without re-embedding.

When saving your configuration, you’ll be notified if any changes still require re-embedding.

Please note:

  • Users already using remote configuration (V1) will see a banner in their embedding section about the update.
  • Legacy users can enable full remote configuration by selecting the “Enable Remote Configuration” checkbox in the configurator.

New configurations will have full remote configuration enabled by default.

Manage cookie consent with the Privacy Controls and Cookie Solution

Generate a cookie banner/consent banner

See also

The post How to Configure Your Privacy Controls and Cookie Solution (beginner’s guide) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Where Can I Find My Cookie Policy and Site Ids? https://www.iubenda.com/en/help/3812-where-can-i-find-my-cookie-policy-and-site-ids-2/ Wed, 22 Mar 2017 11:31:56 +0000 http://help.iubenda.com/?p=3812&lang=en It’s actually not necessary to know the specific cookie policy and site ids as this data is inserted by default into the iubenda Privacy Controls and Cookie Solution. If, however, for some reason you’d like to find your site and policy ids, you can find within the embed code here: Dashboard > [Your website] > […]

The post Where Can I Find My Cookie Policy and Site Ids? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
It’s actually not necessary to know the specific cookie policy and site ids as this data is inserted by default into the iubenda Privacy Controls and Cookie Solution.

If, however, for some reason you’d like to find your site and policy ids, you can find within the embed code here:

Dashboard > [Your website] > Privacy Controls and Cookie Solution > Embed

Look for “siteId” and “cookiePolicyId” within the code snippet.

For further information on the Privacy Controls and Cookie Solution, consult this introductory guide.

The post Where Can I Find My Cookie Policy and Site Ids? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Delete a Privacy Policy https://www.iubenda.com/en/help/3810-how-to-delete-a-privacy-policy-2/ Wed, 22 Mar 2017 11:28:35 +0000 http://help.iubenda.com/?p=3810&lang=en In order to delete a privacy policy, please access your iubenda dashboard, select the site or app that you’d like to delete the policy for by clicking on it or on the “Manage”button. Then click on “Delete” at the bottom of the Privacy & Cookie Policy window. Dashboard > [select the site you’d like to […]

The post How to Delete a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
In order to delete a privacy policy, please access your iubenda dashboard, select the site or app that you’d like to delete the policy for by clicking on it or on the “Manage”button. Then click on “Delete” at the bottom of the Privacy & Cookie Policy window.

Dashboard > [select the site you’d like to delete the policy for] > click “Delete” at bottom window (as pictured below)

Click on the Delete link at the bottom of the Privacy & Cookie Policy window

Please note: this operation is permanent and cannot be reversed.

Pro/Ultra license

If the policy is connected to a Pro or Ultra license, the remaining value of the license will be credited back to your account and can be used for future purchases.

See also

The post How to Delete a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Must I Repeat the Process of Adding Services for Every Language in Which I Generate the Policy? https://www.iubenda.com/en/help/3803-must-i-repeat-the-process-of-adding-services-for-every-language-in-which-i-generate-the-policy/ Wed, 22 Mar 2017 11:02:19 +0000 http://help.iubenda.com/?p=3803&lang=en If you own a multilingual site or app it is not necessary to do so. For any previously generated privacy policy (for example in English) iubenda allows you to add a translation in one of the available languages (Dutch, US English, UK English, French, German, Italian, Portuguese, Brazilian Portuguese, Russian, Danish and Spanish).   The […]

The post Must I Repeat the Process of Adding Services for Every Language in Which I Generate the Policy? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you own a multilingual site or app it is not necessary to do so.

For any previously generated privacy policy (for example in English) iubenda allows you to add a translation in one of the available languages (Dutch, US English, UK English, French, German, Italian, Portuguese, Brazilian Portuguese, Russian, Danish and Spanish).

 

The translation will present the same data controller and the same list of services of the “original” version, except for any custom services that you may have written, which, as it was written by you, will have to be recreated by you for the new language. You may choose to use tools like DeepL or Google Translate to help you here (though we recommend that you consult with a native to make sure that the translations are ok).

The translation can be added by clicking on the “Add language” button in the “Manage languages” box, in the right column of the privacy policy edit page:

Add one or more languages to your documents

Alternatively, you can add one or more languages to your documents on your site/app page (dashboard > [your website]):

Add one or more languages to your documents

Any change made in any language of the privacy/cookie policy will be automatically added to the other languages (except, as anticipated a little earlier, any custom services).

Related articles

The post Must I Repeat the Process of Adding Services for Every Language in Which I Generate the Policy? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on a Jimdo website https://www.iubenda.com/en/help/3798-how-to-use-iubenda-privacy-and-cookie-policy-on-a-jimdo-website/ Wed, 22 Mar 2017 10:40:20 +0000 http://help.iubenda.com/?p=3798&lang=en Caution Jimdo has recently introduced some limitations for free plans, preventing you from including HTML code into your pages and editing your footer. As a result, these guidelines apply to JimdoPro and JimdoBusiness plans only. You have 2 options to integrate our privacy policy on Jimdo Pro/Business: direct link direct text embedding Direct link Go […]

The post How to use iubenda privacy and cookie policy on a Jimdo website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Caution

Jimdo has recently introduced some limitations for free plans, preventing you from including HTML code into your pages and editing your footer. As a result, these guidelines apply to JimdoPro and JimdoBusiness plans only.

You have 2 options to integrate our privacy policy on Jimdo Pro/Business:

  • direct link
  • direct text embedding

Direct link

Go to the Jimdo dashboard and click on your site, open the menu, and go to “Settings > General > Footer”:

Jimdo - Dashboard

Use the direct link integration method to create a text link to your policy in HTML similar to the following.
Note: “12345678” is just a sample, your policy will have a different value

<a href="https://www.iubenda.com/privacy-policy/12345678" target="_blank">Privacy Policy</a>

Insert this HTML (again, don’t copy & paste this example, but use your privacy policy link) into the “Copyright Notice” field and uncheck “Privacy Policy” in “Footer Content” to prevent the link to the default Jimdo policy page being shown:

Jimdo - iubenda direct link

Click on “Save” and you are done.

Direct text embedding

First, you’ll need to create a new page where you’ll embed the text generated by iubenda. To do so, go to the Jimdo dashboard, select your site and click the “Edit Navigation” button that appears when you hover the header:

Jimdo - Edit navigation

Click on “Add a new page”, name it “Privacy Policy”, click on the “Hide page” button (the one with the one-eye icon, used to prevent the item from being visible in the main navigation menu) and then “Save”:

Jimdo - Privacy Policy

Now click on the newly created “Privacy Policy” menu item (it’s ticked because users will not see it in the header), you should have a blank page:

Jimdo - Privacy Policy

Click on “Add Element > More Elements and Add-ons > Widget / HTML”:

Jimdo - Privacy Policy

Copy & paste the iubenda code and click on “Save”:

Jimdo - iubenda direct text embedding

Now that you have a page that includes the iubenda policy, all you have to do is adding a link to the footer: similarly to the previous method, we’ll insert a link in the “Copyright Notice” field.

Copy this line of HTML code:

<a href="/privacy-policy">Privacy Policy</a>

Paste it in the “Copyright Notice” field and uncheck “Privacy Policy” in “Footer Content” (“Settings > General > Footer”) to avoid showing the link to the default Jimdo policy page:

Jimdo - Privacy Policy link

Click on “Save” and you are done.

Note: If you are a JimdoBusiness user, instead of a link in the “Copyright Notice” field and unchecking “Privacy Policy” in “Footer Content”, you can consider a 301 redirect (“SEO > URL Redirects”) from the default privacy page (/j/privacy) to the one you just created (/privacy-policy). For more information visit the Jimdo Support Center.

See also

The post How to use iubenda privacy and cookie policy on a Jimdo website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to integrate iubenda’s Privacy Policy on Shopify https://www.iubenda.com/en/help/3796-shopify-privacy-policy-2/ Wed, 22 Mar 2017 10:14:12 +0000 http://help.iubenda.com/?p=3796&lang=en ⚠️ Caution Please be aware that the built-in feature within Shopify, which allows you to add a Privacy Policy under Shopify admin > Settings > Policies, does not support the inclusion of scripts. As a result, it is not suitable for embedding our solutions. We recommend avoiding the use of this built-in feature and instead […]

The post How to integrate iubenda’s Privacy Policy on Shopify appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
⚠ Caution

Please be aware that the built-in feature within Shopify, which allows you to add a Privacy Policy under Shopify admin > Settings > Policies, does not support the inclusion of scripts. As a result, it is not suitable for embedding our solutions.

We recommend avoiding the use of this built-in feature and instead following the methods outlined in the guide below.

If you run a Shopify store, you need to create a Privacy (and Cookie) Policy to let your customers know how you use their personal information. It’s a good practice to use a Shopify Privacy Policy Generator.

Once you’ve generated your Privacy Policy with iubenda, you have three ways to integrate it on your Shopify website. You can either:

Widget

Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the code under the Add a widget to the footer tab.

iubenda Privacy Policy - Add a widget to the footer of your Shopify store

Access your Shopify store’s admin panel and go to Online Store > Themes. Once there, click on Actions on the right, then Edit Code as pictured:

Shopify + iubenda: Edit code

This will redirect you to the page that allows you to modify your theme files: look under Sections and click on footer.liquid

Shopify footer.liquid

Look for the closing </footer> tag and paste your privacy policy embed code anywhere before it.

Shopify + iubenda: Privacy Policy widget

In the example pictured above, we’ve placed the code between the <div><small></small></div> tags to create a new line. When copying the privacy policy’s embed code, we’ve also chosen the “No style” option to get a text link instead of the default button.

Next, click Save at the top right, check your store to make sure that you like the placement of the link and adjust if needed. And that’s it, you’ve now integrated your iubenda privacy policy with your Shopify site!

Privacy Policy link on Shopify

Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the privacy policy URL you find under the Use a direct link tab.

iubenda Privacy - Add a direct link to the footer of your Shopify store

Access your Shopify store’s admin panel and go to Online Store > Themes. Once there, click on Actions on the right, then Edit Code as pictured:

Shopify + iubenda: Edit code

This will redirect you to the page that allows you to modify your theme files: look under Sections and click on footer.liquid

Shopify footer.liquid

Look for the closing </footer> tag and paste your Privacy Policy link anywhere before it.

Shopify + iubenda: Privacy Policy link

In the example pictured above, we’ve placed the <a href="https://www.iubenda.com/privacy-policy/12345678">Privacy Policy</a> link between the <div><small></small></div> tags to create a new line.

Next, click Save at the top right, check your store to make sure that you like the placement of the link and adjust if needed. And that’s it, you’ve now integrated your iubenda privacy policy with your Shopify site!

Privacy Policy link on Shopify

Direct text embedding

The direct text embedding option makes your privacy policy look as if it were natively a part of your own site. Access your iubenda dashboard, click on [Your website] > Privacy and Cookie Policy > Embed and copy the code under the Embed the text in the body tab.

iubenda Privacy Policy for Shopify - Embed the text in the body

Access your Shopify store’s admin panel and go to Online Store > Pages. Once there, click on Add page:

Shopify - Add page

Name the page “Privacy Policy”, click on the Show HTML button and paste your iubenda snippet:

Shopify + iubenda: Privacy Policy page

Click on Save and you’re done!

Privacy Policy page on Shopify
Terms and Conditions for eCommerce (and how they protect your business)

Terms and Conditions (also called ToS – Terms of Service, Terms of Use or EULA – End User License Agreement) set the way in which your product, service or content may be used, in a legally binding way. Not only are crucial for protecting you from potential liabilities, but – especially in cases of eCommerce stores – they often contain legally mandated information such as users’ rights, withdrawal or cancellation disclosures.

A valid Terms and Conditions document is generally required whenever complex issues are at stake, such as in the case of eCommerce, where sensitive information such as payment data is processed. In these cases, the Terms and Conditions typically contains legal information related to conditions of sale and disclosures on methods of payment, shipping, delivery, withdrawals, and cancellation conditions etc. – as commonly required by consumer protection regulations.

Read Terms and Conditions for eCommerce (and how they protect your business) to learn more or create your document in minutes with our Terms and Conditions Generator.

Create a privacy policy for Shopify

Start generating

See also

The post How to integrate iubenda’s Privacy Policy on Shopify appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Add Android and iOS Mobile Permissions for Device Data https://www.iubenda.com/en/help/3744-how-to-add-android-and-ios-mobile-permissions-for-device-data-2/ Mon, 13 Mar 2017 19:14:54 +0000 http://help.iubenda.com/?p=3744&lang=en 1. Introduction to mobile permissions Both the Android and iOS ecosystem have permissions for device data that the user needs to grant before apps can access that data. In particular the Android/Google Play world needs those permissions to be shown in a privacy policy in an app, and, in addition, on the Play Store page. […]

The post How to Add Android and iOS Mobile Permissions for Device Data appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

1. Introduction to mobile permissions

Both the Android and iOS ecosystem have permissions for device data that the user needs to grant before apps can access that data. In particular the Android/Google Play world needs those permissions to be shown in a privacy policy in an app, and, in addition, on the Play Store page.

Below you’ll find the explanation of how you can easily integrate these permissions into your privacy policy.

Since iubenda is platform agnostic (functions across various platforms), the mobile permissions service describes mobile permissions in general and therefore also has permissions coming from the iOS world like HomeKit, Reminder, Motion Sensors etc. This is also useful if you create an app on both platforms.

2. Getting started with iubenda

To adapt your Android/iOS app to the requirements of the App Store/Google Play Store, you need to prepare a privacy policy stating in detail which personal data are collected and managed from the app, including any information relating to the collection of data from the device.

Begin to generate your own privacy policy for your mobile app by clicking on Start Generating > Mobile App:

start generating policies for mobile apps

Next, click Generate now under “Privacy and Cookie Policy”, then begin selecting all services used by your app (eg. Google Analytics, AdMob, Contact form etc.). For more information, see this guide on how to generate a policy (which includes information on choosing services).

How to add services for your mobile app

List the permissions requested by your app

In addition to the other services added above, now’s the time to also enable the clause “Device permissions for Personal Data access”.

This service will allow you to select and list the possible permissions that your application may request from the user in your privacy policy, such as access to the camera, microphone, contact list, geolocation, calendar etc.

3. Android permissions in particular

Android permissions are the ones described in the Android/Google documentation as being “dangerous” permissions. Since requesting sub-permissions like GET_ACCOUNTS is part of the granted group permission like CONTACTS, that’s what our disclosure focuses on.

There is one exception to the rule here: You will find 4 different location disclosures with self-explanatory titles:

  • Precise location permission (continuous)
  • Precise location permission (non-continuous)
  • Approximate location permission (continuous)
  • Approximate location permission (non-continuous)

Following this example, look for the group permission names within the generator and then check if the disclosure printed out in the privacy policy follows your actual data handling. Here’s the table from the Google permission documentation for you:

Permission GroupPermissions
CALENDARREAD_CALENDAR
WRITE_CALENDAR
CAMERACAMERA
CONTACTSREAD_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATIONACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONERECORD_AUDIO
PHONEREAD_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORSBODY_SENSORS
SMSSEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGEREAD_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE

4. iOS permissions in particular

For iOS permissions you can use the same disclosures as above found under 3. Android, in addition to these Apple has certain permissions that aren’t currently part of Android:

  • Reminders permission
  • HomeKit permission
  • Motion sensors permission
  • Bluetooth sharing permission
  • Social media accounts permission

5. Integration

Once the privacy policy has been generated, remember to comply with the platform (Google or Apple) and data protection authority guidelines.

Google requires:

  • a link to the privacy policy directly from within the app;
  • that you also link to the policy from the Play Store page and also link to your marketing website (if you have one).

Apple specifically requires:

  • a link to the privacy policy in the App Store Connect metadata field;
  • an easily accessible link to your policy from within the app.

Remember: If your app processes user data while offline, be sure to provide users with an in-app offline method of accessing the privacy policy in order to be legally compliant.

In regards to iubenda’s mobile app integration methods, the direct link or direct text embedding methods are best. Whichever embed method you choose, remember that you’re legally required to choose a location that is easily accessible and visible to users. Check out the guide devoted to our integration methods for more information on how to integrate your privacy policy into your app.

Consent

With recent updates in data protection regulations, in particular, the GDPR, if you process user data based on consent, you are legally required to maintain legitimate records of consent. Click here to get a quick idea of what this entails and how our Consent Database can help you to be compliant. Otherwise, for a more detailed explanation, you can read the section on valid “Records of consent” in our GDPR guide here.

Does your app target children? If so, you should read this guide as under the major global legislations, special conditions apply to the processing of personal data belonging to children.

See also

For further details on privacy policies for Android/iOS apps on the app stores and its requirements, please refer to our guides here:

The post How to Add Android and iOS Mobile Permissions for Device Data appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to add Matomo clauses to iubenda’s Privacy and Cookie Policy https://www.iubenda.com/en/help/3592-how-to-add-matomo-clauses-to-iubendas-privacy-and-cookie-policy/ Thu, 26 Jan 2017 17:43:41 +0000 http://help.iubenda.com/?p=3592&lang=en Whether you’ve already generated your privacy policy or are just getting started, we’ve got the help, guides, and examples you need to get fully set up and successfully integrate your privacy policy onto your Matomo site. → Already generated your privacy policy? Jump to How to add Matomo clauses on your privacy and cookie policy Do I need […]

The post How to add Matomo clauses to iubenda’s Privacy and Cookie Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Whether you’ve already generated your privacy policy or are just getting started, we’ve got the help, guides, and examples you need to get fully set up and successfully integrate your privacy policy onto your Matomo site.

→ Already generated your privacy policy? Jump to How to add Matomo clauses on your privacy and cookie policy

Yes, you do, and here’s why:

Under most countries’ laws, you are legally required to have a valid privacy policy in place to inform users about your data processing activities and how you use their data.

Failing to do so can result in significant penalties, the legal invalidation of the data you’ve collected (for example, email contact list), and harm your website’s reputation.

Furthermore, third parties like Matomo explicitly require you to have a privacy policy in place in line with applicable law. Failure to do so can put you in breach of their terms.

When figuring out which essential services to add to your Policy, remember that your privacy policy should be individual to your particular needs and should contain, at the very least:

  • What personal data do my site process, and the reasons why? (Remember IP addresses can be considered personal data).
  • Do I share the data with third parties? This data can include everything from social widgets to payment processors (not sure what services you use? try our site scanner, and it’s free!)
  • What rights do your users have in regards to their data?
Here’s an example of what a privacy policy could look like:

Privacy Policy

You can quickly generate a privacy policy with iubenda. This video will show you just how quick and easy it is to generate a Privacy and Cookie Policy with iubenda.

 

Try it out with our free plan today!

How to add Matomo clauses to iubenda’s Privacy and Cookie Policy

Once you’ve generated your Privacy and Cookie Policy with iubenda, follow our three-step guide below! 

  1. Add Matomo to your iubenda privacy policy
  2. Adding the opt-out link to the Matomo clause
  3. Language modifications

Add Matomo to your iubenda privacy policy

First, add “Matomo” to your privacy policy from the selection of services provided in your iubenda dashboard.

To do this, click on Add service within your privacy and cookie policy generator.

How to add Matomo clauses to iubenda's Privacy and Cookie Policy

Then, using the search bar provided, type Matomo then add it to your policy. 

You can always use our scanner by clicking the Scan website and auto-detect services bar at the top of the page.

How to add Matomo clauses to iubenda's Privacy and Cookie Policy

You’ve successfully added Matomo to your policy! 

Adding the opt-out link to the Matomo clause

Several legislations and corresponding practices require the Matomo opt-out link; among them is France’s DPA (CNIL).

If you want to add your opt-out link, you need to link to the opt-out on another page of your site, but clearly describe the process needed to do so. It’s paramount that this process isn’t perceived as a way to circumvent or hide the opt-out link. Follow the steps below to add the opt-out link to your iubenda privacy policy. 

1. Find your Matomo iframe opt-out code.

Your Matomo opt-out iframe can be found in your Matomo installation under Settings icon > Privacy > Users opt-out

<iframe frameborder="no" width="600px" height="200px" src="https://example.com/index.php?module=CoreAdminHome&action=optOut&language=en"></iframe>

This code needs to be placed on a new page on your site, which you will link to from your iubenda privacy policy. Name the page whatever you like, but ideally, it will be the only thing present.

2. Add a custom service with the necessary disclosures

In this step, it is important to make clear what this section helps the user to accomplish. 

Therefore use a title similar to “How to: User opt-out of Matomo Web Analytics”. 

Next, you’ll want to describe what the users need to know in the service/clause. See an example of this below:

How to: User opt-out of Matomo Web Analytics

The User may opt out of the tracking done via Matomo Analytics by following the link below and then clicking the opt-out option on the presented page. Please note that the opt-out works by applying a cookie to the User’s browser, which signals to Matomo not to register the particular User. 

This means that the User needs to opt out again when visiting this site in another browser or another device.

<a href=”{YOUR LINK HERE}”>Opt out of Matomo Analytics on this page</a>

Please follow the final step below if your website and privacy policy are provided in languages other than English. 

Language modifications 

Adding the iframe provided in the Matomo admin will automatically provide you with the English copy. 

Here is a preview of the copy: 

“You may choose to prevent this website from aggregating and analyzing the actions you take here. Doing so will protect your privacy but will also prevent the owner from learning from your actions and creating a better experience for you and other users.”

“You are not opted out. Uncheck this box to opt-out.”

The Opt-out will appear on your website as shown below:

How to add Matomo clauses to iubenda's Privacy and Cookie Policy

This text must be properly and clearly translated into your site’s and privacy policies language. 

If the language of your website is one of the 57 languages supported by Matomo and its translation has a high completion percentage, the copy may already have been translated. 

For languages with a high completion percentage, like French (99%) and German (100%), you just need to replace the language code in the iframe src URL. 

Note

💡Not sure what privacy documents you need for your Matomo site? Do this quick quiz to see which laws apply to you and your business. 

See also:

The post How to add Matomo clauses to iubenda’s Privacy and Cookie Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The Owner Field Within the Generator https://www.iubenda.com/en/help/3486-the-owner-field-within-the-generator/ Mon, 09 Jan 2017 16:39:45 +0000 http://help.iubenda.com/?p=3486   For the Privacy and Cookie Policy Generator The owner field has a default suggestion that reads like this: Individual, company or any other entity responsible for the website or application.E.g. iubenda s.r.l – Via San Raffaele 1, 20121 Milan In addition to this very simple owner statement, you can use some html tags such […]

The post The Owner Field Within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 

For the Privacy and Cookie Policy Generator

The owner field has a default suggestion that reads like this:

Individual, company or any other entity responsible for the website or application.
E.g. iubenda s.r.l – Via San Raffaele 1, 20121 Milan

In addition to this very simple owner statement, you can use some html tags such as bold, italic, etc.

More than pure stylistic options, this opens up additional disclosure options for you. You can add whatever information you need to, such as for example, an appointed person/Data Protection Officer. You can see an example on this screenshot:

Owner field screenshot/example

The owner’s contact email will be added automatically to this very same section, pre-populated from the email form field below the owner field (as seen in the image above).

CPRA / CCPA related information

Toll-free number indication
If the CPRA (CCPA amendment) applies to your business, your business interacts directly with consumers and it doesn’t operate exclusively online, then you must indicate “two or more designated methods” for submitting CPRA requests. One of these methods must be a toll-free telephone number. In such cases, you can easily add the required number via the Owners field.

DPO & EU Representative information

If you’d like, you can easily append DPO details or information about your official EU Representative in the Owner Field. See the following example using html, (feel free to copy and paste the code in and replace the information with your own details:

Your Company Ltd.
Via Torino, 2 - 20123 Milan (Italy)

<strong>DATA PROTECTION OFFICER (DPO)</strong>
ePrivacy Consultants
represented by Dr. John Doe
Viale Bianco 21, 20354 Milan, Italy
contact: privacy@contactemail.net

This will give you the following result:

DPO in owner field example

Note

Please remember, the owner field must include valid identifying information.

For the Terms and Conditions Generator

For Terms and Conditions, the required information for the Owner’s field may vary based on your country of origin or the type of business that you do. However, as with the Owner’s field in the Privacy Policy, the important thing here is to ensure that the information included in this field makes you legitimately identifiable.

Note

If you already have a correctly completed Privacy Policy on the same site/app that you’re creating the Terms and Conditions document for, it’s likely that you may have already included some of the identifying information required for the Terms and Conditions’ Owner’s field. This is because within the Generator, the Owner’s field and its related data is shared between the Privacy Policy and the Terms & Conditions.
However, since the Terms may also have additional industry or country-specific requirements, we strongly recommend that you carefully read the sections below.

The most commonly required information is the following (more country-specific information is included in the section below):

  • The Owner’s identity, including legal trading status, if applicable. This must be the legally valid name of the Owner, for example, the Owner’s registered trading name.
  • The Owner’s contact details. Generally, email address, telephone number and, if available, the other means of online communication.
  • The geographical address of the Owner’s place of business. This can be the address to which the consumer can send complaints or return purchased products etc., where applicable.
  • Relevant codes of conduct. In Business-to-Consumer (B2C) contracts, the service provider should indicate relevant codes of conduct and information on how those codes can be consulted electronically. Likewise, where such codes of conduct exist for Business-to-Business (B2B) contracts, they should also be indicated in a similar fashion.
  • Whether or not the concluded contract will be filed by the Owner and whether it will be accessible.

Since Terms and Conditions are legally binding contracts, it’s important to state legitimate contact details here. Also, do consider that, in many cases, under Consumer Law, customers must be able to contact you if the need arises.

Country specific requirements

In addition to the above, please apply the following considerations if based in the countries listed below.

Germany

The Owner must also state (where applicable):

  • The managing director’s identity.
  • The identity of the members of the board.

France

The Owner must also state (where applicable):

  • The legal status of the company.
  • Where applicable, the number of applications to the commercial and companies registry or to the job directory.
  • Where the company is subject to a public authorization system (e.g for the use of digital currency, long-distance sales, financial services, etc.), the name and address of the authority delivering this authorization.
  • The company’s VAT ID if applicable.

If the company is a member of a regulated profession, the Owner must state the professional title and the Member State in which the title was assigned, and the name of the professional body in which they are enrolled.

Additionally, the Owner’s contact information must allow direct communication.

Article 19 of the loi n° 2004-575 du 21 juin 2004 pour la confiance en l’économie numérique; article L.221-5 of the Consumer Code; article 1127-1 of the Civil code.

Italy

The Owner must also state (where applicable):

  • Whether the company is subject to direction (controlled) by another company.
  • The companies’ Registry where the company is registered and the related registration number.
  • The company’s tax code and VAT number.

Article 7 of the Legislative Decree No. 70/2003, articles 48 -1 and 49 of the Consumer Code.

The United Kingdom

The Owner must also state:

  • The company’s VAT number.
  • Where available, the fax number.

The Consumer Contracts Regulations 2013, the Data Protection Act 1998 and the Human Rights Act 1998.

Spain

The Owner must also state (where applicable):

  • Information on registration to the Spanish Commercial Registry (Registro Mercantil), or, registration to any other public register for purposes related to acquiring legal status, or advertising.
  • If subject to a public authorization system, the name of the authority or regulatory body in charge of supervision.
  • If a member of a regulated profession (such as an attorney), the Owner must state the professional college, the college number, the official and professional academic title, the Member State in which they practice their profession, and the applicable professional rules and how they might be accessed.
  • The fiscal identification number – Spanish CIF (Certificado de Identificación Fiscal).

Article 10, Ley 34/2002, of the 11th of July, de servicios de la sociedad de la información y de comercio electrónico

Belgium

The Owner must also state (where applicable):

  • The company’s identity
  • The Banque Carrefour des Entreprises (BCE) number. The BCE is the Belgian Companies Register.
  • The commercial name of the company

Volet VI “Pratiques du marché et protection du consommateur” of the Belgian Code of Economy, 31st of May 2014.

The USA

  • The UETA does not provide a checklist of information that is required prior to the formation of contracts, electronic contracts are simply assimilated to a written contract.

The Uniform Electronic Transaction Act is a United States Uniform Act, adopted by 47 states, Washington, New York and Illinois have other similar legislation.

Brazil

The Owner must also state (where applicable):

  • The company’s registration number in the National Register of Individuals or the National Register of Legal Entities of the Ministry of Finance.

All information must be in Portuguese.

Article 2 of Decree No. 7.962, of March 15, 2013.

See also

The post The Owner Field Within the Generator appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to collect cookie consent on AMP pages https://www.iubenda.com/en/help/3182-cookie-consent-amp-pages/ Wed, 02 Nov 2016 11:39:27 +0000 http://help.iubenda.com/?p=3182&lang=en If you’re using or planning to use Google’s Accelerated Mobile Pages (AMP) to load your web pages faster on mobile, you might be wondering how to set-up in a way that allows you to comply with the GDPR and avoid penalties. That said, collecting cookie consent on AMP pages requires some extra work. You’ll need […]

The post How to collect cookie consent on AMP pages appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
If you’re using or planning to use Google’s Accelerated Mobile Pages (AMP) to load your web pages faster on mobile, you might be wondering how to set-up in a way that allows you to comply with the GDPR and avoid penalties.

That said, collecting cookie consent on AMP pages requires some extra work. You’ll need to:

  1. host on your HTTPS site an HTML file with your cookie management solution configuration,
  2. implement user controls adding the <amp-consent> element to your AMP pages, and
  3. block components with data-block-on-consent attribute, or use the data-block-on-consent-purposes attribute if you want to enable per-category consent (more info here: amp.dev/documentation).
Consent string and third party vendors

To retrieve the consent string on AMP, third party vendors can use context.initialConsentValue

Considerations for the HTML file

AMP does not allow the loading of iframes from the same domain, therefore, uploading this file on the same domain as your AMP page will result in the cookie notice not being displayed when you load AMP pages from that domain.

However, in practice, Google loads AMP pages directly from their (Google’s) domain, when a user accesses the page by clicking on a search result. Therefore same domain conflict is generally not an issue as it only affects non-production use cases.

In any case, to avoid this issue, you can simply host the HTML file on a different domain or subdomain (e.g. main domain is www.yourdomain.com, but you host the file on amp.yourdomain.com). This approach also works if you redirect from a subdomain to your main domain, for example, if the file is hosted on the main domain (one easy trick is to use www/non-www redirection to do this without adding extra subdomains).

Also note that the AMP iframe needs to be served via HTTPS.

How iubenda can help

For a step-by-step guide (complete with sample codes, a demo and WordPress tips) and more information on how to block cookies before user consent on Accelerated Mobile Pages, read How to integrate iubenda Privacy Controls and Cookie Solution with AMP.

Besides AMP, you may also find useful these other options for mobile:

  • If you want to collect consent within your mobile app, our mobile SDK is available upon request as a native component for both iOS and Android, and is fully customizable, allowing you to match the look and style of your app.
  • If you want to collect consent via your mobile web pages, our Privacy Controls and Cookie Solution integrates easily: being responsive, there’s no need to set up a separate solution for mobile pages.

The post How to collect cookie consent on AMP pages appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Create a Privacy Policy https://www.iubenda.com/en/help/463-generate-privacy-policy/ Wed, 22 Jun 2016 12:00:55 +0000 http://help.iubenda.com/?p=463 Want to create a privacy policy? Generating and setting up your privacy policy with iubenda is incredibly easy. In this post, we’ll show you how to generate your own custom privacy policy. If you need any additional help, please feel free to message us via the chat window (you can find it by clicking on […]

The post How to Create a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Want to create a privacy policy? Generating and setting up your privacy policy with iubenda is incredibly easy.

In this post, we’ll show you how to generate your own custom privacy policy. If you need any additional help, please feel free to message us via the chat window (you can find it by clicking on the green help button on the right and then clicking on the live chat button at the top). We’re happy to answer any of your questions.

👋 Before you start, if you haven’t already, you’ll need to sign-up here.

Once you’re signed up, it’s time to get started.

How to generate your privacy policy

The process is simple and pretty straightforward:

  1. Create and customize your privacy policy: It’s important to create a document that reflects all your data processing activities. Your policy will never look like another company’s one, because it should fit your unique business situation. Make sure to generate a comprehensive privacy notice that mentions all the legally-required disclosures and all the technologies that collect data on your website.
  2. Add the privacy policy to your site: After you have created your document, it’s time to install it on your website. Following legal requirements and common practice, the link to your privacy cookie policy should be visible and easily accessible. With a generator like iubenda, there are various integration methods you can pick from to make this easier for you!
  3. Update and refine your policy when needed: This is one of the top reasons why using a generator, because it allows to dynamically integrate your policy and update it at any time. While privacy laws and your website change, you will have to add new clauses or technologies. Do that in no time with iubenda.

💡 If you already have a similar site/policy, you don’t have to start from scratch: you can take advantage of the site duplication feature.

 

1. Create and customize your privacy policy

Your privacy policy needs to be adapted to your site’s or app’s data collection practices. You do that by adding a service.

Services generally fall into two categories:

  • Services related to your own data collection activities (eg. contact forms)
  • Services related to third-party data collection activities (eg. Google Analytics)
how to create a privacy policy

We’ve added a Site Scanner within the services window of the generator which allows you to quickly inspect your site in real-time and identify which services you need to add to your policy. Do note that although our scanner is powerful, it can only scan for technologies that are directly integrated on your pages. You will, therefore, still need to add manually the clauses that relate to data processing activities like newsletter sending.

When figuring out which basic services to add to your policy, it may help to ask yourself the following questions:

What user data do I collect myself and how do I collect it?

Eg. newsletter forms, contact forms, comment systems.

Which third-party services do I use on my site/app?

Most likely these services also process user data in some way and therefore must be included in your policy. Some common ones are:

  • Social media widgets (e.g Facebook like/share button, Twitter tweet button, Pinterest “pin it” button);
  • External account access services: services that let you access the user’s account on another platform (e.g. Facebook account access, Twitter account access);
  • Payment processors (e.g. Stripe, PayPal);
  • Tracking and analytics (e.g Google Analytics, Piwik, WordPress Stats). Please note: if using tracking, you’ll likely need to include a cookie notice and implement a cookie solution on your site);
  • Email marketing software & newsletter management services (e.g Constant Contact, MailChimp, Mad Mimi, AWeber):
  • Digital marketing ad services (e.g Google Adsense, Google Ads, AdButler).

For which purposes do I collect these data?

In most cases, the purpose of the data collection is standard and automatically included within the services added, however, there are some instances when you generate your privacy policy where you’re required to add additional disclosures. Some common ones are:

  • Selling goods and services online
  • Direct Email Marketing (DEM) purposes ( monetizing your newsletter or promoting third-party products and services)

You can also easily add custom services by simply filling out the built-in form.

You can read more about what you’re legally required to disclose and obtain consent for in our Getting Started Guide.

🇺🇸 Are you or your customers based in the US?

Check our guide on How to Activate US Compliance within the Privacy Cookie Policy Generator

2. Add the privacy policy to your site

When the privacy policy is ready it needs to be added to the site. This is done by using the embedding code we provide.

create privacy policy

You can make the privacy policy available on your site/app in the following ways:

  1. as a button with a modal window (included in the standard free version);
  2. as a direct link (e.g. for App Stores);
  3. or as a direct site embed (that shows your privacy policy as a part of your website).

The video below shows how you can easily add the privacy policy to your website:

 

Additional links you might find useful here are:

3. Update and refine your policy when needed

We constantly monitor the major legal regulations and automatically update your policy to keep it valid and up-to-date, however, should you need to manually update your personal information, contact details, custom clauses or add additional services, you can simply log back into your iubenda dashboard and make changes anytime.

generate privacy policy

Create a privacy policy for your website/app

Start generating

See also

The post How to Create a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda Privacy Controls and Cookie Solution – Introduction and Getting Started https://www.iubenda.com/en/help/1177-cookie-solution-getting-started/ Wed, 22 Jun 2016 11:35:38 +0000 http://help.iubenda.com/?p=1177   Here you will learn everything you need to know about our cookie management solution: Introduction to Cookie Law and cookie policy What is the iubenda Privacy Controls and Cookie Solution? How to create a cookie policy How to add the cookie banner How to request consent to EU users only How and when to […]

The post iubenda Privacy Controls and Cookie Solution – Introduction and Getting Started appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 

Here you will learn everything you need to know about our cookie management solution:

  •  
 

⚙ Take a look at this demo to see how the iubenda Privacy Controls and Cookie Solution works.

Introduction to Cookie Law and cookie policy

The ePrivacy Directive 2002/58/EC (or Cookie Law) was established to put guidelines in place for the protection of electronic privacy, including email marketing and cookie usage, and it still applies today.

💡The Cookie Law actually applies not only to cookies but more broadly speaking to any other type of technology that stores or accesses information on a user’s device (e.g. pixels tags, device fingerprinting, unique identifiers etc.). For simplicity, all such technologies, including cookies, are commonly defined as trackers. However, in this guide, the term cookie(s) and tracker(s) will be used interchangeably.

You can think of the ePrivacy Directive as currently “complementing” the GDPR in a sense, rather than being repealed by it.

Strictly speaking, if you use cookies you need to consider Cookie Law compliance before you look to the GDPR. That’s because the Cookie Law is what is called in legal jargon a “lex specialis” which means that it takes precedence over the GDPR.

Directives, generally speaking, set certain agreed-upon goals and guidelines in place with Member States being mandated to implement these directives into national legislation..

Regulations, on the other hand, are legally binding across all Member States from the moment they are put into effect and they are enforced according to union-wide established rules.

With that said, the ePrivacy Directive is, in fact, going to be repealed soon by the ePrivacy Regulation. The ePrivacy Regulation is expected to be finalized in the near future and will work alongside the GDPR to regulate the requirements for the use of cookies, electronic communications, and related data/privacy protection.

The Regulation is expected to maintain values similar to the Directive with much of the same guidelines applying.

Who is subject to the Cookie Law?

The implementation of the Cookie Law depends on the legislation under which the site/app operates.

In general, the Cookie Law will apply to you if:

  • you or your users are based in the EU; and
  • you use cookies or similar technologies on your site/app.

What does the Cookie Law require?

Under the Cookie law, organizations that target users from the EU must inform users about data collection activities and give them the option to choose whether it’s allowed or not.

This means that if your site/app (or any third-party service used by your site/app) uses cookies or similar technologies, you must first obtain valid consent prior to the installation of those cookies, except where they fall into the exempt category.

In practice, you’ll need to:

  • show a cookie banner/consent banner at the user’s first visit;
  • implement a cookie policy that contains all required information;
  • allow the user to provide consent. Prior to consent, no cookies — except for exempt cookies — can be installed.

For further details on the Cookie Law, we invite you to read our documentation and the official statements from the country you might be affiliated with or targeting. Great guidance can be accessed through the Article 29 Working Party (which is a group comprised of various data protection regulators that aim to simplify Europe’s diversity):

Here are the links to each countries specific application of the ePrivacy directive:

The iubenda Privacy Controls and Cookie Solution allows you to manage all aspects of the Cookie Law, in particular:

  • easily inform users via cookie banner/consent banner and a dedicated cookie policy page (which is automatically linked to your privacy policy and integrates what’s necessary for Cookie Law compliance);
  • obtain and save cookie consent settings;
  • automatically block scripts that may install cookies/trackers on the website until the user gives consent via the auto-blocking feature; and
  • keep track of consent and save consent settings for each user for up to 12 months from the last site visit.

You can collect consent via multiple mechanisms including continued browsing, scrolling, and/or specific clicking actions. Keep in mind though that allowed consenting actions may differ depending on the Member State law.

Below you will find all necessary steps to use iubenda to make sure you comply with the Cookie Law.

How to generate a cookie policy with iubenda

  • Go to the dashboard and select the privacy policy for which you want to generate a cookie policy (Pro License required).
  • Click on Edit in “Privacy and Cookie policy”, you will notice a “Cookie Policy” box in the right column: Activate cookie policy
  • Click on Activate cookie policy: your cookie policy will be generated automatically based on the configuration of your privacy policy.

Click on Generate now under Dashboard > [Your website/app] > Privacy Controls and Cookie Solution:

Cookie Solution - Generate cookie banner/consent banner

This will take you directly to the configuration panel of your cookie banner/consent banner:

Cookie Solution configurator

Once saved, you’ll get a similar code snippet:

<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>
<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Simply copy and paste it into the head tag of your website’s HTML as the first element. Alternatively, you can use one of our plugins: currently we have plugins available for WordPress, Joomla!, PrestaShop and Magento.

Cookie banner/consent banner example

Important

Don’t use the code shown above, it’s just a sample code. Instead, use the code attached to your cookie policy, which you can obtain by following the steps listed above. For information on how to configure or customize the banner or to better understand how to access all of the available options, please read the documentation on the cookie banner/consent banner.

💡 Using advertising services?

If you rely on advertising vendors, you may need to enable the IAB Transparency and Consent Framework (TCF). The latest version is TCF 2.3, and it can be activated later without changing your banner layout. 👉 Learn more about enabling TCF 2.3 with iubenda.

Remote Configuration Feature

The remote configuration feature makes it easier to update your Privacy Controls and Cookie Solution settings by applying most changes directly to your website—no re-embedding needed.

What’s New?

With the latest update, the new snippet now includes all components of the Privacy Controls and Cookie Solution. This means every change in the banner, including Custom CSS, TCF tile, and US laws support, is automatically applied without re-embedding.

When saving your configuration, you’ll be notified if any changes still require re-embedding.

Please note:

  • Users already using remote configuration (V1) will see a banner in their embedding section about the update.
  • Legacy users can enable full remote configuration by selecting the “Enable Remote Configuration” checkbox in the configurator.

New configurations will have full remote configuration enabled by default.

The Privacy Controls and Cookie Solution also allows you to indicate whether or not you’d like to apply GDPR protections to the following:

  • All your users. In this case, consent will be requested to all users of your site. This is the default setting.
  • Only your EU users. In this case, consent will be requested to EU users only.

Here’s an example: a US-based e-commerce site has different sections available to users in the US and in Europe. They want to apply GDPR protections (i.e. show the cookie banner/consent banner) to just their EU-based users.

This is possible by checking the Request consent to EU users only located in Privacy Controls and Cookie Solution > Edit > GDPR. Once you check this option (in code gdprAppliesGlobally:false), you’ll be able to automatically detect the user country (in code countryDetection:true).

Here’s the Privacy Controls and Cookie Solution snippet you’ll get:

<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>
<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "gdprAppliesGlobally": false,
        "countryDetection": true,
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

If you choose to request consent to EU users only, but prefer to implement your own country detection system, you’ll have to set gdprApplies:false on pages where consent is not required.

For more details about consent collection settings, see our advanced guide.

Important

If you are EU-based, it is mandatory that you apply the protections to all users and not just users based in the EU.

How and when to preemptively block codes/cookies

According to the Data Protection Working Party, a European think tank and advisory body on data protection and privacy, few categories of cookies are exempt from the consent requirement. Therefore, all other codes that install or can install cookies must be preemptively blocked before consent is obtained.

For more information and a technical guide on how and when to block codes, see our introduction to the prior blocking of scripts and the guide on manual tagging.

How to store proofs of user preferences

In most cases, cookies may process personal data, and record-keeping requirements arising from the GDPR apply. Many Data Protection Authorities across the EU have therefore strengthened their requirements and aligned their rules on cookies and trackers with the requirements of the GDPR.

The Cookie and Consent Preference Log is now available in our Privacy Controls and Cookie Solution.
Simply integrate this feature with one click, and you can easily store and manage GDPR proofs of your users’ consent preferences.

To activate the Cookie and Consent Preference Log, simply upgrade to the 50,000 page views Privacy Controls and Cookie Solution plan or higher.

💡 Not sure if you need the Cookie and Consent Preference Log? Take this 1 minute quiz to find out

You don’t need to configure anything as, once activated, the feature is included by default whitin the Privacy Controls and Cookie Solution. Just click on Log under Dashboard > [Your website/app] > Privacy Controls and Cookie Solution:

cookie preference log

In this section, you can view and manage the logs of cookie preferences collected:

cpl-dashboard

*Cookie preference logs are built into every new plan. Even the free version.

Manage cookie consent with the Privacy Controls and Cookie Solution

Generate a cookie banner

The post iubenda Privacy Controls and Cookie Solution – Introduction and Getting Started appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Access the iubenda Dashboard https://www.iubenda.com/en/help/304-how-to-use-the-iubenda-dashboard/ Wed, 22 Jun 2016 09:30:00 +0000 http://help.iubenda.com/?p=304 It’s very simple and straight forward to add your first privacy policy. Just click on one of the “Start generating” buttons anywhere on the website (there is always one visible at the top-right of every page): Once you have generated the privacy policy, it can always be accessed and edited from the user dashboard. You […]

The post How to Access the iubenda Dashboard appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
It’s very simple and straight forward to add your first privacy policy. Just click on one of the “Start generating” buttons anywhere on the website (there is always one visible at the top-right of every page):
Generate now button at top bar of the website

Once you have generated the privacy policy, it can always be accessed and edited from the user dashboard.

Edit you privacy policy at anytime from within your dashboard

You can edit your privacy policy (or any of the products added to your account such as the Privacy Controls and Cookie Solution etc.) at any time and at no additional charge. You can even delete one site and use that license for an entirely different project. You can read more about licenses here or by using the search-bar above.

The post How to Access the iubenda Dashboard appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Add Services to Your Privacy Policy https://www.iubenda.com/en/help/20-services-privacy-policy/ Tue, 21 Jun 2016 10:00:47 +0000 http://help.iubenda.com/?p=20   Introduction Aside from the general disclosures and identifying information (outlined here), the Privacy Policy must also list the personal data collected, together with the purpose of its collection. With iubenda, you can easily declare which services or programs your website uses to collect data. Each service generally contains details of the type data collected, […]

The post How to Add Services to Your Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 

Introduction

Aside from the general disclosures and identifying information (outlined here), the Privacy Policy must also list the personal data collected, together with the purpose of its collection.

With iubenda, you can easily declare which services or programs your website uses to collect data. Each service generally contains details of the type data collected, the name of the provider as well as the purposes of collection.

Remember that even a cookie is considered personal data. You can consult our introductive article to Cookie Law for additional information on the subject.

 

What is a Service?

We group a description of and about personal data (such as a Cookie or IP Address), the purpose of its collection (such as Analytics or Advertising) and the providers (such as Google or even your own website) into what we call services.

Each service corresponds to a portion of a privacy policy, and provides all the relevant information to the end users of your website.

Services generally fall into two categories:

  • Services related to your own data collection activities (eg. contact forms)
  • Services related to third-party data collection activities (eg. Google Analytics)

When figuring out which basic services to add to your policy, it may help to ask yourself the following questions:

  • What user data do I collect myself and how do I collect it? (eg. newsletter forms, contact forms, comment systems)
  • Which third-party services do I use on my site/app? (eg. social widgets, analytics, payment processing services)

Read more about defining your services here.

How do I build the Privacy Policy for my website?

To build the privacy policy, you must select every service that your website uses. As mentioned above, it might use services provided by third-parties (such as Google Analytics or Google Adsense), or services provided by your own website, such as a newsletter or registration. More on how to do that here.

Once every service has been added, you can continue the generating process and integrate the Privacy Policy within your website.

Note

You can access your dashboard and make changes to your privacy policy (like adding other services or modifying those already included) at any time at no extra charge:

  • If you’re using the free plan you will have access to all services included under that plan and can simply upgrade to a PRO account to access services marked as “PRO”; you will not be charged extra for adding or editing services.
  • If you have one or more PRO license(s) you can do whatever you wish for the duration of your license(s).

How do I know which Personal Data my website collects?

To get an idea of the personal data collected on your website, scroll down the list of services by clicking on the “Add services” button. If you find something familiar, just click on the “add” button.

Typical examples of personal data collection are for analytics (e.g. to know how many visits your website gets), data collection for advertising purposes (for the inclusion of banners etc), the collection of email addresses to keep your users up to date, registration forms etc.

If you’re not clear on what services you use on your website, you can use the Site Scanner within the services window of the generator which allows you to quickly inspect the site in real-time. Do note, however, that while our scanner is powerful, it can only scan for technologies that are directly integrated on your site’s pages. You will, therefore, still need to manually add the clauses related to data processing practices like newsletter sending.

Note: with over 1700 third-party integrations and clauses, it’s very likely you’re covered. If not so, you can alert us on our forum or use the Create custom service option (PRO feature):

How to add a custom service

See also

The post How to Add Services to Your Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Add a Custom Service and Customize to Your Needs https://www.iubenda.com/en/help/386-how-to-add-a-custom-service-and-customize-to-your-needs/ Tue, 21 Jun 2016 09:00:46 +0000 http://help.iubenda.com/?p=386 When you find that a clause or service you require is not available from the generator you can do two things: At the time of writing, iubenda has over 1700 third-party integrations and clauses. And yet a legitimate first question is always going to be “will we be able to create a privacy policy with your […]

The post How to Add a Custom Service and Customize to Your Needs appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

When you find that a clause or service you require is not available from the generator you can do two things:

  • alert us in our user forums
  • individually add a custom service to your privacy policy

At the time of writing, iubenda has over 1700 third-party integrations and clauses. And yet a legitimate first question is always going to be “will we be able to create a privacy policy with your software to meet all our needs?”.

We have anticipated many data collection practices and the third-party (“service”) integrations are among our most valuable features. But there will always be things that we don’t have, can’t integrate or that are highly personal.

As an example I’d like to offer a recent chat inquiry:

So we have an app that is linked to our client’s online accounting software. From the app they can send receipts directly to accounting. The app requires usage of the phone camera and asks the user to allow access to photos. We have a database where we store the users first name, last name, email, password and accounting id. We also store the receipts in our database. Will we be able to create a privacy policy with your software?

We’ve built iubenda for exactly this reason: to be a framework for apps and websites to build their comprehensive and individually applicable privacy policies upon.

Our policies are highly customizable, yet follow the strictest major global regulations. We offer our users both security in the knowledge that our clauses are expertly crafted by our international legal team, and the flexibility to fully personalize as needed.

How you add a custom service to your privacy policy

The “custom service” is simply a clause that contains details of an additional data collection activity that you participate in, written in your own words (again, it’s only ever really necessary if you can’t find the particular service among our 1700+ pre-made clauses).

As with the other pre-made services, the custom service will also automatically be integrated into the privacy policy text.

To add a custom service: Dashboard > [your website] > edit/add privacy policy > add service > create custom service

After having clicked the above pictured “Create custom service” you will be taken to the input prompts where you’ll fill out the details about a particular set of data collection. We’ve described the mandatory fields below.

  • Service name. Here you enter the title of your custom service. Try to make it precise but brief. For example, if the custom service is in relation to a bespoke comment plugin you have on your site, a good title would be the displayed name of the actual plugin or if no such name exists, a short description such as “Website-name Comment Plugin”.
  • Privacy Policy. This is where you’ll describe the types of data you are collecting, who this data is being shared with and if it’s a third party service (if there is a third party involved, you’ll need to include their headquarters – e.g. Germany – and privacy policy).

By checking the “Specify service translations” box, you can localize the custom service and use a different name and description based on the languages in which you are generating your policy.

Optional Fields

Purpose

This field allows you to assign a purpose to your custom service with a simple click. This field makes it easier for you to categorize the purpose of the data collection activities of that particular service, and it therefore helps you to be even more precise and comprehensive when writing your custom clauses. It includes a drop-down list of over 40 purposes to help you in determining which purposes apply.

Privacy and Cookie Policy Generator - Assign Purposes

Another great benefit of applying this option is that it allows the custom services it’s applied to, to be displayed alongside all other services in your policy (instead of being positioned in a separate section).

Custom clause added to a purpose category in main privacy policy

The default value of “No specific purpose” will apply if a purpose is not assigned. If you did not assign a purpose to your custom service, you’ll find the data collection practices outlined in a highlighted area of the privacy policy called “Further Information about Personal Data“.

Further information about Personal Data

Show this service on

Here you can choose where the service will be shown, either the privacy policy, the cookie policy or both.

Storage duration

Here you can specify the storage duration of the cookies/trackers related to the service. You can choose not specify the cookie lifetime, set a maximum storage duration across all cookies and trackers or define a storage duration for each cookie/tracker. You can learn more about cookie lifetime here.

NOTE: in order for the cookie lifetime to be visible, make sure you have selected in the point above that the service is shown in the cookie policy or both.

The result? Your iubenda cookie policy will show the cookie lifetime of the various cookies attached to the service

That’s it. With a PRO license you can add as many custom services as you need.

About services in general

If you need more information about services in general, please see the short video introduction below:

 

 

See also

The post How to Add a Custom Service and Customize to Your Needs appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Edit a Privacy Policy https://www.iubenda.com/en/help/2739-edit-privacy-policy/ Mon, 13 Jun 2016 17:00:10 +0000 http://help.iubenda.com/?p=2739&lang=en As a matter of fact, changes are often required and can be done anytime. For example, anytime you use a new third party service or anytime you change any other data collection practices you should update your privacy policy to reflect the actual practices on your site. Or again, you may have to update the […]

The post How to Edit a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
As a matter of fact, changes are often required and can be done anytime.

For example, anytime you use a new third party service or anytime you change any other data collection practices you should update your privacy policy to reflect the actual practices on your site. Or again, you may have to update the (company) name and address of the data controller.

 

You can access your iubenda dashboard and make changes to your privacy policy at any time at no extra charge:

  • If you’re using the free plan you will have access to all services included under that plan and can simply upgrade to a PRO account to access services marked as “PRO”; you will not be charged extra for adding or editing services.
  • If you have one or more PRO license(s) you can do whatever you wish for the duration of your license(s).

Moreover, there’s no need to repeat the integration process as the changes will be applied remotely.

Why is everyone updating their privacy policy (and do I need to do the same)?

You may have seen an increase in notices about privacy policy updates, particularly if you’re based in California, United States. This is likely due to required changes in Californian consumer rights under the CPRA (CCPA amendment). If you’re a business that targets or could potentially have Californian users you need to:

  • update your privacy policy to include the required disclosures; and
  • inform your users about the update to your privacy policy.
You can read more about the CPRA and it’s requirements here.

How to change the URL of the site or the name of the app

It can become necessary to edit the title of an iubenda generated document, either because you’ve changed your site’s URL, renamed your app or because you need to switch licenses from one Privacy Policy to another.

For information on how to duplicate an existing site please see here.

See also

The post How to Edit a Privacy Policy appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Can I remove the “iubenda hosts this page” disclaimer https://www.iubenda.com/en/help/2848-remove-iubenda-disclaimer/ Mon, 13 Jun 2016 16:20:04 +0000 http://help.iubenda.com/?p=2848&lang=en The wording “iubenda hosts this page and collects some personal data about users” cannot be removed from the privacy and cookie policies generated with our online service because iubenda itself is configured as a third-party service integrated into your website or app and, as such, by law must be mentioned. If you want more information […]

The post Can I remove the “iubenda hosts this page” disclaimer appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The wording “iubenda hosts this page and collects some personal data about userscannot be removed from the privacy and cookie policies generated with our online service because iubenda itself is configured as a third-party service integrated into your website or app and, as such, by law must be mentioned.

If you want more information on the data collected by iubenda, you can consult this guide: What iubenda tracks and what it doesn’t track.

To avoid having to insert this wording in my documents, can I copy/paste the privacy/cookie policy text into my site?

It is not possible to copy/paste the documents generated through our online service as our terms of service do not allow it. You can read more about this here: Can I copy and paste the privacy policy’s text into my website?

Listed below you can find the integration methods available for the documents generated through the iubenda online service:

See also

The post Can I remove the “iubenda hosts this page” disclaimer appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Add Another Language to Your Documents https://www.iubenda.com/en/help/137-add-language/ Mon, 13 Jun 2016 16:15:09 +0000 http://help.iubenda.com/?p=137 Common questions regarding languages are: Choosing a language for your document To generate the privacy policy/terms and conditions in the language you need, just select the language you’d like to use from the Language drop-down menu listed under “Choose a language for your documents“. If you need to add more languages, you can also do […]

The post How to Add Another Language to Your Documents appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Common questions regarding languages are:

  • How can I use a language other than English in my document?
  • Can I add a language to an existing privacy policy/terms and conditions? Does this translated document automatically update and incorporate the same settings as the original?
  • How can I remove a language?

Choosing a language for your document

To generate the privacy policy/terms and conditions in the language you need, just select the language you’d like to use from the Language drop-down menu listed underChoose a language for your documents“. If you need to add more languages, you can also do it later from your project settings. (Available in: Czech, Danish, Dutch, US English, UK English, French, German, Greek, Italian, Polish, Portuguese, Brazilian Portuguese, Russian, Spanish, or Swedish):

Choose a language for your privacy policy/terms and conditions

Adding a language

For any previously generated document (for example in English) iubenda allows you to add a translation in one of the available languages.

The translation will have the same information as the “original” version, except for any custom services/clauses that you may have written, which, as it was written by you, will have to be recreated by you for the new language. You may choose to use tools like DeepL or Google Translate to help you here (though we recommend that you consult with a native to make sure that the translations are ok).

The translation can be added by clicking on the Add language button in the “Manage languages” box, in the right column of the privacy policy/terms and conditions edit page:

Add a language to a previously generated document

Alternatively, you can add one or more languages to your documents on your site/app page (Dashboard > [your website]):

Add one or more languages to your documents

Any change made in any language of the privacy policy/terms and conditions will be automatically added to the other languages (except, as anticipated a little earlier, any custom services).

Add language-specific names to your site/app

If your documents are translated into multiple languages, you can specify a different name of your site/app for each language you have enabled. On your site/app page (Dashboard > [your website]) click the Settings icon and, on the Site/app info tab, under Site/app name select Different for each language.

Removing a language

To remove one or more languages from your documents, go to your site/app page (Dashboard > [your website]), click on the Add language icon (+), and disable the language(s) you want to remove.

Remove a language from your documents

See also

The post How to Add Another Language to Your Documents appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Policy for iOS and macOS Apps https://www.iubenda.com/en/help/401-privacy-policy-for-ios-and-macos-apps/ Mon, 13 Jun 2016 16:00:21 +0000 http://help.iubenda.com/?p=401 Since the release of iOS 8, Apple has implemented many requirements that need to be met in order to avoid having your app application rejected. One of the major requirements (that often results in Apps being rejected where conditions are not met) is that of data privacy. Data privacy is more important than ever across […]

The post Privacy Policy for iOS and macOS Apps appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Since the release of iOS 8, Apple has implemented many requirements that need to be met in order to avoid having your app application rejected. One of the major requirements (that often results in Apps being rejected where conditions are not met) is that of data privacy.

Data privacy is more important than ever across various companies and platforms; with major fines and sanctions being handed down for non-compliance, companies are paying attention – and Apple is no exception: Apple’s App Store Review Guidelines have been updated to better accommodate recent changes in Data Protection Law.

From October 3, 2018 App Store Connect requires a privacy policy for all new apps and app updates before they can be submitted for distribution on the App Store or through TestFlight external testing.

From October 3, 2018 App Store Connect requires a privacy policy for all new apps and app updates.

Article 5.1 of Apple’s App Store Review Guidelines provides an overview of Apple’s privacy guidelines (and grounds for rejection where these conditions are not met). Article 5.1.1 on Data Collection and Storage further specifies as follows:

5.1.1(i) Privacy Policies: All apps must include a link to their privacy policy in the App Store Connect metadata field and within the app in an easily accessible manner. The privacy policy must clearly and explicitly:

  • Identify what data, if any, the app/service collects, how it collects that data, and all uses of that data.
  • Confirm that any third party with whom an app shares user data (in compliance with these Guidelines) — such as analytics tools, advertising networks and third-party SDKs, as well as any parent, subsidiary or other related entities that will have access to user data — will provide the same or equal protection of user data as stated in the app’s privacy policy and required by these Guidelines.
  • Explain its data retention/deletion policies and describe how a user can revoke consent and/or request deletion of the user’s data.

In addition, your app’s privacy policy link or text will only be editable when you submit a new version of your app. Read the App Store’s privacy clause here.

Starting with iOS 14.5, new requirements will go into effect, that will make data collection and processing more transparent for users. You must:

  • Answer privacy questions in App Store Connect, to explain how you handle users’ data and which third-parties are involved. This will provide users with relevant information on:
    • the types of data you or third-party partners collect, unless the data meets all the criteria for optional disclosure;
    • how their data may be used;
    • your privacy policy.
  • Use the AppTrackingTransparency framework to obtain the users’ permission to track them or to access their device’s advertising identifier. The AppTrackingTransparency framework will:
    • Present an app-tracking authorization request to the user: the prompt contains a purpose string that explains why you’d like to track the user.
    • Provide the tracking authorization status. Unless you receive permission from the user to enable tracking, the device’s advertising identifier value will be all zeros (meaning that you cannot not track the user).

Privacy policy requirements for iOS/macOS apps

A lot of people ask for sample privacy policies for apps. The exact required contents of a privacy policy depend upon the applicable law and may need to address requirements across geographical boundaries and legal jurisdictions.

For this reason, it’s always advisable that you approach your (legally mandated) privacy policy with the strictest applicable regulations in mind. You can read more about determining your law of reference here or read our in-depth Legal Overview Guide here.

Let’s start with the legal minimum requirements. These are the most basic elements that a privacy policy should have:

  • Who is the app owner?
  • What data is being collected? How is that data being collected?
  • What is the Legal basis for the collection? (e.g consent, necessary for your service, legal obligation etc.) – This is more specifically related to the GDPR and EU Law, however, even if you fall outside of GDPR obligations, it’s likely that under many other legislations, you’ll still need to say why you’re processing the personal data of users.
  • For which specific purposes are the data collected? Analytics? Email Marketing?
  • Which third parties will have access to the information? Will any third party collect data through widgets (e.g. social buttons) and integrations (e.g. Facebook Connect)?
  • What rights do users have? Can they request to see the data you have on them, can they request to rectify, erase or block their data? (under European regulations most of this is mandatory)
  • Description of process for notifying users and visitors of changes or updates to the privacy policy
  • Effective date of the privacy policy

Example privacy policy for iOS/macOS apps

Here’s an example of privacy policy for an iOS app, created with our generator.

Terms and Conditions for Mobile Apps

Terms and Conditions (also called ToS – Terms of Service, Terms of Use or EULA – End User License Agreement) set the way in which your product, service or content may be used, in a legally binding way. Not only are crucial for protecting you from potential liabilities, but (especially in cases where something is being sold to consumers) they often contain legally mandated information such as users’ rights, withdrawal or cancellation disclosures.

In general, you’ll likely need to set Terms and Conditions if you have an app that participates in some form of commerce (whether selling to users directly or facilitating trading). Additionally, some specific instances where they might be needed are where you:

  • need to make legally required disclosures related to consumer rights (especially withdrawal and cancellation rights);
  • have different user levels (eg. registered vs non-registered);
  • your platform allows users to sell or trade with other users;
  • facilitate or otherwise process payments and/or other sensitive user data;
  • want to set the rules for user behavior and state grounds for termination of accounts;
  • participate in affiliate programs;
  • provide a software or service which can potentially cause harm if misused;
  • would like to have some legally enforceable control over, and set rules about, how your app may be used.

Particular emphasis should be given to account termination clauses, payment conditions and the limitation of liability clauses (and disclaimers).


Our Term and Conditions Generator helps you to easily generate and manage documents that are engineered to meet the specific requirements of all major app stores and up to date with the main international legislations.

How to add a privacy policy to your iOS/macOS app

iubenda makes solving this issue easy: With hundreds of available clauses, our privacy policies contain all elements commonly required across many regions and services, while applying the strictest standards by default – giving you the option to fully customize as needed.

Our policies are created by lawyers, monitored by our lawyers and hosted on our servers to ensure that they are always up-to-date with the latest legal changes and third-party requirements.

The process is straightforward and intuitive, simply:

  1. click to add your services;
  2. fill out your web/app owner and contact details;
  3. embed.

Click here to read the full guide on how to generate a Privacy Policy.

1. Add your services

  • If you use Twitter or other auth (=OAuth) services for user management, then add the respective service by clicking “Add a service” then start typing the name of the service you’d like to add. Remember to include all services processing personal information. If you handling user registration yourself, don’t forget to add the “Direct Registration” service.
  • Select each applicable service from the list of suggestions that show up and customize by simply adding the specific types of personal data you collect. Our lawyer-crafted clauses automatically include the relevant user-rights disclosures and service definitions based on your input here.
  • If you’d like to add a custom service clause, simply click the “Create custom service” button and fill out the built-in form.
How to create a custom service

2. Fill out your app owner and contact details

Enter:

  • name and full address;
  • email address.

Congratulations! Your policy has been created. Simply check that all the details are correct, then embed.

3. Embed

As we said above, you have to include a link to your privacy policy within the app and in the App Store Connect metadata field.

Within the app

For apps, the direct link or direct text embedding methods are best. Apple specifically requires “a link” to the privacy policy, so the direct link method is sufficient in meeting Apples’s requirements, however if your app processes user data while offline, be sure to provide users with an in-app offline method of accessing the privacy policy in order to be legally compliant.

Whichever embed method you choose, remember that you’re required to choose a location that is easily accessible and visible to users.

App Store Connect metadata field

When your app is ready, you have 2 options to choose from: you can either beta test it by using TestFlight or submit it for review. In both cases – in addition to the app’s internal link – you’ll have to include a link to your privacy policy in the App Store Connect metadata field. Here’s how to meet this requirement:

TestFlight Beta Testing

In App Store Connect, under “My Apps > TestFlight”, you will find “Test Information”, among which you will also find the privacy policy URL. Fill in the url for the translated privacy policy for each language that your app is translated into (iubenda offers 9 privacy policy languages out of the box):

App Store Connect / TestFlight Beta Testing - Privacy Policy URL
App submission

In App Store Connect, under “My Apps > App Store”, you will find “App Information”, among which you will also find the privacy policy URL. As mentioned above, fill in a privacy policy URL for each language that your app is translated into:

App Store Connect - Privacy Policy URL

Once your application is approved, you will find your privacy policy linked under “Information” on the Application landing page that App Store generates for you:

Learnji on the App Store - Privacy Policy link

Create a privacy policy for your iOS/macOS app

Start generating

See also

The post Privacy Policy for iOS and macOS Apps appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to integrate iubenda’s Privacy Policy on your site and app https://www.iubenda.com/en/help/231-ways-to-use-iubenda-privacy-policy-on-your-site-and-app/ Mon, 13 Jun 2016 15:00:45 +0000 http://help.iubenda.com/?p=231 Legacy user? See the old guide here → iubenda’s privacy policy offers three integration options which can be used for different purposes:   Where can I find the embedding options? Head to your dashboard and click on the website that you’d like to get the embed code for. Next, click the “Embed” button in the […]

The post How to integrate iubenda’s Privacy Policy on your site and app appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? See the old guide here →

iubenda’s privacy policy offers three integration options which can be used for different purposes:

  1. Standard embedding option (widget in the footer)
  2. Direct link option
  3. Direct text embedding via JavaScript or API option
 

Where can I find the embedding options?

Head to your dashboard and click on the website that you’d like to get the embed code for. Next, click the “Embed” button in the Privacy and Cookie Policy section.

This is what you will find for websites:

Integration options for the Privacy and Cookie Policy

This is what you will find for apps:

Integration options for the Privacy and Cookie Policy in Apps

1. Standard embedding option (all plans)

The standard and our simplest integration method is the one where you include the iubenda button/link on your site. This will open the privacy policy in a modal window on your site when the link is clicked. This option is not suitable for apps.

More on Adding iubenda to Your Site (Standard Embedding Option).

The direct link option is appropriate if you do not mind that the policy not be displayed on your site as the link displays the policy on page on iubenda.com. This is very useful option for app stores.

This option works perfectly with apps.

The privacy policy is designed in a responsive fashion and will therefore adapt to your screen size. On mobile apps the policy displays both the simplified version (on top) and the legal version (below).

More on Adding iubenda to Your Site (Direct Link Option).

3. Direct text embedding option (Advanced and Ultimate plans)

The direct text embedding option is the one option that will make your privacy policy look as if it were part of your own site.

This option works perfectly for apps as well.

The privacy policy is designed in a responsive fashion and will, therefore, adapt to your screen size. Keep in mind that with this option, you can completely remove all of iubenda’s styling from the privacy policy and use your own. On mobile apps, the policy displays both the simplified version (on top) and the legal version (below).

More on Adding iubenda to Your Site (Direct Text Embedding and API).

Adding iubenda to WordPress

If you are using WordPress, here’s a guide to help you with getting set up with iubenda’s privacy policy.


See also

The post How to integrate iubenda’s Privacy Policy on your site and app appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Adding iubenda’s Privacy Policy to Your Site: Standard Embedding https://www.iubenda.com/en/help/216-privacy-policy-standard-embedding/ Mon, 13 Jun 2016 14:00:53 +0000 http://help.iubenda.com/?p=216 Available for: all plans The standard (and our simplest) integration method consists of including the iubenda button or the link in the pages of your site, typically in the footer. This will open the privacy policy in a modal window (lightbox) when the link is clicked. This option is not recommended for apps. If you […]

The post Adding iubenda’s Privacy Policy to Your Site: Standard Embedding appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Available for: all plans

The standard (and our simplest) integration method consists of including the iubenda button or the link in the pages of your site, typically in the footer. This will open the privacy policy in a modal window (lightbox) when the link is clicked.

This option is not recommended for apps. If you are developing for mobile apps, you’ll want to take a look at either the direct link or direct text embedding option.

 

To add the iubenda button to your site, simply copy the iubenda generated code provided to you. You can find and change the integration options at any time by heading to your dashboard and click on the website that you’d like to get the embed code for. Next, click the <>EMBED button in the Privacy and Cookie Policy section:

iubenda_embed

After customizing as you’d like, you can copy the relevant code from the generator. The code looks like this:

privacy policy embed section

Where and how do I put the iubenda embedding code on my site?

It depends on two factors:

  • Where you want the button to appear – The best idea is to add it to your site’s footer so that it is always visible and accessible (as required by law). The footer is easy to find and is typically found towards the end of your html document. It appears in an html element similar to <footer>{YOUR IUBENDA CODE}</footer> or <div id="footer">{YOUR IUBENDA CODE}</div>
  • Which system you’re using – The system you’re using may sometimes complicate the reachability of your footer but in most cases this minor difficulty is avoided. If you use a CMS like WordPress, for example, we suggest that you consult this guide.

What does this look like?

Here is a working example. Click on the button to open the policy:

Privacy Policy

How to modify and localize the button text

If you want the iubenda button to display something other than “Privacy Policy”, you’ll need to apply the changes yourself.

iubenda 'Privacy Policy' button

To modify the title of the privacy policy button (that displays when you use the standard embedding option) and adjust it to your language of choice, please do the following:

  1. Change the anchor/link;
  2. Edit the content of the Title tag.

You can find them within the privacy policy’s embedding code, as shown below:

'Privacy Policy' button localization

Here’s “privacy policy” translated in the languages available within our generator:

  • Dutch: Privacybeleid
  • English (US & UK): Privacy policy
  • French: Politique de confidentialité
  • German: Datenschutzerklärung
  • Italian: Privacy policy
  • Portuguese & Brazilian Portuguese: Política de privacidade
  • Russian: Политика конфиденциальности / конфиденциальность
  • Spanish: Política de privacidad

More configurations

data-iub-z-index
By adding this HTML attribute to the a tag within the embedding code (example: data-iub-z-index="10002") it is possible to configure the z-index of the modal window in which the Privacy Policy appears. The default value is 10000.

data-iub-overflow
In order to avoid the scroll of the page when the policy is shown, in particular conditions the overflow property on the html element of the host page may be modified (the original values are restored at the closing of the policy). In some implementation and in certain browsers this change could lead to the blocking of the scrolling within the host page. By adding this HTML attribute to the a tag within the embedding code with value false (namely:data-iub-overflow="false") you can avoid that the overflow property be modified.

Other integration options

iubenda’s privacy policy offers two other integration options:

If you would like to have additional questions answered regarding the embedding of your privacy policy in this way, please don’t hesitate to post it to our support forum.

See also

The post Adding iubenda’s Privacy Policy to Your Site: Standard Embedding appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Adding iubenda’s Privacy Policy to Your Site: Direct Link https://www.iubenda.com/en/help/228-privacy-policy-direct-link/ Mon, 13 Jun 2016 13:30:25 +0000 http://help.iubenda.com/?p=228 Legacy user? See the old guide here → Available in all paying plans: Starter, Essentials, Advanced and Ultimate. The direct link option is ideal if you don’t require your policy be displayed on your site. The link connects users to a page on iubenda.com where your privacy policy is shown. This option is very useful […]

The post Adding iubenda’s Privacy Policy to Your Site: Direct Link appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? See the old guide here →

Available in all paying plans: Starter, Essentials, Advanced and Ultimate.

The direct link option is ideal if you don’t require your policy be displayed on your site. The link connects users to a page on iubenda.com where your privacy policy is shown.

This option is very useful to app stores: on mobile apps the policy displays both the simplified version (on top) and the extended version (at the bottom).

 

You can find the link in your privacy policy’s settings by clicking the “Embed” button:

Embed

Once you’re in, you must select “Use a direct link” as shown below (and add it in the appropriate place):

Direct link

Where do I put the iubenda privacy policy link?

That depends entirely on you. But the rule of thumb is your site’s footer. It’s a good way for it to be seen from every page which will ensure you’re compliant with privacy requirements.

Here’s a guide for WordPress. If you would like more assistance, consider posting your query on our support forum.

Other integration options

Iubenda’s privacy policy offers two other integration options:


See also

The post Adding iubenda’s Privacy Policy to Your Site: Direct Link appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Adding iubenda’s Privacy Policy to Your Site: Direct Text Embedding and API https://www.iubenda.com/en/help/78-privacy-policy-direct-text-embedding-api/ Mon, 13 Jun 2016 13:00:08 +0000 http://help.iubenda.com/?p=78 Legacy user? See the old guide here → Available for: Advanced plan and Ultimate plan The direct text embedding option makes your privacy policy look as if it were natively a part of your own site. On mobile apps the policy displays both the simplified version (on top) and the legal version (below) per default. […]

The post Adding iubenda’s Privacy Policy to Your Site: Direct Text Embedding and API appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? See the old guide here →

Available for: Advanced plan and Ultimate plan

The direct text embedding option makes your privacy policy look as if it were natively a part of your own site. On mobile apps the policy displays both the simplified version (on top) and the legal version (below) per default.

 

We offer multiple ways for embedding a privacy policy (with or without styling) into the body of one of your pages. You can:

  • copy and paste the JavaScript into your page, or
  • call our API from your backend.
Privacy policy - Direct Text Embedding

Note: uncheck the Simplified privacy policy option to directly show the complete version.

Caution

If you use html <base> tags to define your base URL, please note that your anchor links will also refer to the base URL. This is because doing so forces the set base URL as default and sets anchor links to [base]#anchor instead of [current page]#anchor. This could cause some internal linking issues when using the direct embedding method for your privacy policies. To fix this, you can either:

  • remove the base tags
  • grab the anchor and rewrite its link in javascript
    e.g.
    document.addEventListener("click", function(e) { if (e.target.tagName && e.target.tagName === 'A' && e.target.href.indexOf('#california_info') > -1) { window.open(window.location.href.split('#')[0] + '#california_info', '_self'); e.preventDefault(); } });
  • or use another embedding method.

JavaScript

Direct text embedding example (with style)

Click on the button below for an example. You’ll notice that the document fits your page in terms of size and style of text. You can also edit HTML and CSS to make it more in line with the appearance of your site/app.

Unchecking the “Simplified privacy policy” option the privacy policy will be displayed directly in its full version.

Direct embedding with style

Direct text embedding example (with no style)

By activating the “Use plain HTML with no styling (only shows the legal version)” option, the document will be displayed without any styles applied.

Direct embedding with no style

API

Full privacy policy embedding

These are the API URLs available to embed the full privacy policy from your backend:

  • https://www.iubenda.com/api/privacy-policy/:public_id
  • https://www.iubenda.com/api/privacy-policy/:public_id/only-legal
  • https://www.iubenda.com/api/privacy-policy/:public_id/no-markup

:public_id is the ID of your privacy policy provided by your privacy policy embedding options.

The JSON API doesn’t include the CSS provided by iubenda’s default privacy policies.

Example

curl --include --request GET 'https://www.iubenda.com/api/privacy-policy/:public_id'

Responses:

  • Everything OK, response status 200:
    { :success => true, :content => "… privacy policy content …" }
  • Required privacy policy is not found, response status 404:
    { :success => false, :error => "Privacy Policy not found." }
  • Required privacy policy is not Pro, response status 403:
    { :success => false, :error => "To access this privacy policy via API, convert it to Pro" }
  • Application error, response status 500:
    { :success => false, :error => "Application Error. Please contact info@iubenda.com for support" }

Embedding only dynamic sections

If you already have your own privacy policy and prefer to use iubenda for dynamic parts only (clauses and services), you can use these API URLs.

Clauses and services:

  • https://www.iubenda.com/api/privacy-policy/:public_id/section/data-processing-detailed-info/only-legal
  • https://www.iubenda.com/api/privacy-policy/:public_id/section/data-processing-detailed-info/no-markup

Custom clauses and services:

  • https://www.iubenda.com/api/privacy-policy/:public_id/section/further-data/only-legal
  • https://www.iubenda.com/api/privacy-policy/:public_id/section/further-data/no-markup

:public_id is the ID of your privacy policy provided by your privacy policy embedding options.

To get your URLs just click on the Embed dynamic sections only checkbox you’ll find under “Options”:

Privacy and Cookie Policy - Embed dynamic sections only
Caution

The services section alone is not a complete privacy policy: the law has specific requirements for privacy policies which include valid identifying details and info on users’ rights. Read What Should Be in a Privacy Policy to find out the most basic elements that a privacy policy should have.

Other embedding options

iubenda’s privacy policy offers two other integration options:

If you would like to have additional questions answered regarding the embedding of your privacy policy in this way, please don’t hesitate to post it to our support forum.

See also

The post Adding iubenda’s Privacy Policy to Your Site: Direct Text Embedding and API appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Can I Integrate the Cookie Policy Within My Website Using the Direct Text Embedding and API? https://www.iubenda.com/en/help/2690-can-i-integrate-the-cookie-policy-within-my-website-using-the-direct-text-embedding-and-api/ Mon, 13 Jun 2016 12:30:05 +0000 http://help.iubenda.com/?p=2690&lang=en Similar to the privacy policy and its embedding options, you can also integrate the cookie policy using the direct text embedding option. This option will make your cookie policy look as if it were part of your own site. We offer multiple ways of embedding a cookie policy into the body of one of your […]

The post Can I Integrate the Cookie Policy Within My Website Using the Direct Text Embedding and API? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Similar to the privacy policy and its embedding options, you can also integrate the cookie policy using the direct text embedding option. This option will make your cookie policy look as if it were part of your own site.

We offer multiple ways of embedding a cookie policy into the body of one of your pages. You can use JavaScript or call our API from your backend. There are 4 options:

  • Styled cookie policy
    • Embed via JavaScript
    • Embed via API from your backend
  • Clean HTML cookie policy with no styles
    • Embed via JavaScript
    • Embed via API from your backend

In order to achieve the direct integration of the cookie policy we need to use the same code used for the privacy policy and change it by adding /cookie-policy to the end of the privacy policy URL.

Cookie policy - Direct text embedding

Direct text embedding (with style)

Click on the button below for an example. You’ll notice that the document fits your page in terms of size and style of text. You can also edit HTML and CSS to make it more in line with the appearance of your site/app.

Unchecking the “Simplified privacy policy” option the cookie policy will be displayed directly in its full version.

Direct text embedding with style

Cookie Policy

In this case we used the following code:

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/embedding_privacy_policy/with_style.html]


Direct text embedding (with no style)

By activating the “Use plain HTML with no styling (only shows the legal version)” option, the document will be displayed without any style.

Direct text embedding with no style

Cookie Policy

In this case we used the following code:

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/embedding_privacy_policy/without_style.html]


API Documentation

The following API URLs are available:

  • www.iubenda.com/api/privacy-policy/:public_id/cookie-policy
  • www.iubenda.com/api/privacy-policy/:public_id/cookie-policy/no-markup

:public_id is the id of your privacy policy provided by your privacy policy embedding options.

The response type is application/json and all the URLs are available in both http and https.

Example

curl --include --request GET 'http://www.iubenda.com/api/privacy-policy/:public_id'/cookie-policy

Responses:

Everything OK, response status 200:

{ :success => true, :content => "… Privacy policy content …" }
 

Required cookie policy is not found, response status 404:

{ :success => false, :error => "Privacy Policy not found." }
 

Required privacy policy is not Pro, response status 403:

{ :success => false, :error => "To access this Privacy policy via API, convert it to Pro." }
 

Application error, response status 500:

{ :success => false, :error => “Application Error. Please contact info@iubenda.com for support." }

The post Can I Integrate the Cookie Policy Within My Website Using the Direct Text Embedding and API? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Can I Copy and Paste the Text of the Legal Documents into My Website? https://www.iubenda.com/en/help/407-copy-and-paste/ Mon, 13 Jun 2016 11:59:35 +0000 http://help.iubenda.com/?p=407 To insert the privacy policy/terms and conditions in your site/app you can use one of our integration options, such as the direct text embed which will allow you to seamlessly integrate the text of the documents within your pages, maintaining their style. Our terms of use do not otherwise allow the copy and pasting of […]

The post Can I Copy and Paste the Text of the Legal Documents into My Website? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
To insert the privacy policy/terms and conditions in your site/app you can use one of our integration options, such as the direct text embed which will allow you to seamlessly integrate the text of the documents within your pages, maintaining their style. Our terms of use do not otherwise allow the copy and pasting of the text of the documents.

Here’s why can’t you just copy & paste the text created by the generator – even if you have bought a license:

  • The text talks to our servers and auto-updates. By embedding the JavaScript code and text into your page (as opposed to copy-pasting), the legal text is still able to talk to our servers. This means that you can update your privacy policy/terms and conditions from iubenda’s dashboard without meddling in your own site and also take advantage of the features we keep adding. Moreover, we regularly send updates to all of the legal documents if we feel it’s necessary to answer to changes in legislation.
  • The privacy policy and the terms and conditions need to change with time. Websites and apps are “living creatures”. The documents must therefore be correctly kept up to date; as a matter of fact, you can change anything at any time as long as you have your license. By copy-pasting text into your website you make the act of updating it much more difficult.

See also

The post Can I Copy and Paste the Text of the Legal Documents into My Website? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on a Magento website https://www.iubenda.com/en/help/567-how-to-use-iubenda-privacy-and-cookie-policy-on-a-magento-website/ Mon, 13 Jun 2016 11:30:37 +0000 http://help.iubenda.com/?p=567 There are two ways to do this: Standard “footer widget” option The “Embed text in body” option (Pro accounts) Using the standard embedding (footer widget) option: To install your policy, go to your Magento admin area. (This part of the tutorial assumes that you’re using Magento 2. If you’re using an older version of Magento […]

The post How to use iubenda privacy and cookie policy on a Magento website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
There are two ways to do this:

Using the standard embedding (footer widget) option:

To install your policy, go to your Magento admin area.

(This part of the tutorial assumes that you’re using Magento 2. If you’re using an older version of Magento this tutorial shows you how to access the footer, simply follow the tutorial to access the footer section and jump to this part of the tutorial).

On the panel on the left, click on Content then Configuration under the “Design” section.
magento admin content configuration panel

Now click on Edit under the “Action” column for your main website. This will take you to the “Default Store View” configuration page.

Scroll down until you see the “Footer” area. Now we need to paste the code.

The “copyright” text area does not allow html tags so you’ll need to paste your iubenda code into the text area labeled “Miscellaneous HTML”. This will place your code just before the end of the BODY tag.
In the example below, I’ve placed the iubenda code between <center> </center> tags, so that the link appears centered on the page.
How to paste the iubenda code into the magento footer
Now click on Save Configuration at the top right of the window, and you’re done!

This will display your copyright link just above the copyright notice as pictured:

IUBENDA FOOTER WIDGET INSTALLED ON A MAGENTO SITE

Using the “Embed text in body” option (Pro accounts):

To install your policy, go to your Magento admin area.

(This part of the tutorial assumes that you’re using Magento 2. If you’re using an older version of Magento this tutorial should help you to find the page content editor. Simply follow the tutorial to access the page management area and jump to this part of the tutorial)

On the panel on the left, click on Content then Pages under the “Elements” section.

Magento content pages panel

Next, find privacy policy in the list, and click on Select, then Edit.
magento edit page link

Now, click on Content to open up the editor.

At this point, you may see a WYSIWYG text-editor interface. Simply click on Show/Hide Editor to get to html-view.

Now, you can replace the default text with the iubenda code:

  • Copy the iubenda code from the “Embed text in body” tab ( if you haven’t already)

iubenda embed text in body code snippet

  • Now in the editor on Magento, simply replace the default text with the code you’ve just copied

Click on Save Page at the top right of the window, and you’re done!

Now when you click on the “Privacy Policy” link in your site’s default footer menu, your iubenda privacy policy will display natively as follows:

Iubenda text embed privacy policy display

See also

The post How to use iubenda privacy and cookie policy on a Magento website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on a WordPress website https://www.iubenda.com/en/help/370-how-to-use-iubenda-privacy-and-cookie-policy-on-a-wordpress-website-2/ Mon, 13 Jun 2016 11:00:42 +0000 http://help.iubenda.com/?p=370 This is a guide for integrating iubenda with WordPress. The WordPress.com platform does not allow for the inclusion of JavaScript. Therefore if you use WordPress.com, please read this guide instead.   Streamline your iubenda implementation on WordPress with our 1-Click Embedding feature. Discover all the details in our guide. What you need In order to […]

The post How to use iubenda privacy and cookie policy on a WordPress website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
This is a guide for integrating iubenda with WordPress.

The WordPress.com platform does not allow for the inclusion of JavaScript. Therefore if you use WordPress.com, please read this guide instead.

 

Streamline your iubenda implementation on WordPress with our 1-Click Embedding feature. Discover all the details in our guide.

What you need

In order to follow this guide, you need:

  • A WordPress blog or a website powered by WordPress, with access to the Admin panel (usually something like www.yourwebsite.com/wp-admin or www.yourwebsite.com/blog/wp-admin )
  • The embedding code of the privacy policy you want to integrate – you can find this by going here: dashboard > [Your website/app] > <>Embed. The embedding code looks like this:
    Privacy policy sample embed code
WordPress privacy settings page

With the release of the WordPress 4.9.6 Privacy and Maintenance Release, the WordPress backend now includes a dedicated Privacy section which can be found under Settings > Privacy.

This gives you an additional, easy-to-setup way to include your privacy via the direct text embed method.

html editor

To do this, you’ll need to click on Create New Page, then select code view or html view in the text editor:

Next, delete the WordPress starter text, then paste in the iubenda direct text embed code (find this under the tab of the same name, in the integration section of your dashboard).And you’re done!

You can read the full direct text embed tutorial here.

Note: Direct page embed is a Pro/Ultra feature. If you don’t have a Pro/Ultra account, simply using the standard embedding method via a Footer Widget as demonstrated below, will be enough.

Caution

The WordPress privacy page is only automatically linked to via your site’s registration and login pages. Since most privacy laws (including the GDPR) require that your privacy policy be easily accessible throughout your entire website, you’ll need to manually link to your privacy page via your main menu, footer menu, or, via an integration method such as the footer widget method directly below.

How to integrate the privacy policy via the footer widget

 

To begin, access the admin panel of your WordPress website or blog by typing an address similar to the following: www.yourwebsite.com/wp-admin  or  www.yourwebsite.com/blog/wp-admin. (you must be logged into your WordPress site in order to access the admin panel)

On your admin panel, access the Widgets section, available from here:

The widget section will look like this:

Depending on your chosen theme, you will encounter different sections on the right of the screen, referring to the Sidebar or to the Footer. Each of the boxes on the right allows you to insert content in the respective sections of your WordPress website. You must therefore choose which of these sections you want to place the privacy policy link into. The most common choice is the Footer, although placing it in the Sidebar is also a possibility. In any case, you can modify this preference at any time.

After selecting the section, you must drag the Text box from the left to the section on the right, as shown in the screenshot below:

The widget will then open this way:

The iubenda embedding code must be pasted here as follows:

Widget WordPress

Hit save.

On your website you should now see something like this:

If you see the privacy policy link, everything is functioning properly.

Does my site need terms and conditions?

Though not always legally required, a Terms and Conditions document is pragmatically required. It governs the contractual relationship between you and your users and is therefore essential for protecting your content from a copyright perspective as well as protecting you from potential liabilities.

The Terms and Conditions document is a legally binding agreement, therefore not only is it important to have one, but it’s also necessary to ensure that it’s clear, easily understandable, precise and that users can both easily see it and agree to it in an unambiguous way (for example, clicking a checkbox with a visible link to the document before being allowed to create an account or comment).

You’ll likely need a Terms and Conditions document if any of the following apply to you:

  • You have different user levels (eg. registered vs non-registered);
  • You want to set the rules for user behavior (including comments) and state grounds for termination of accounts;
  • Your users are allowed to upload content;
  • You participate in some kind of commerce, including affiliate programs;
  • You’d like to protect your blog and it’s content by stating how it can be used.

Read What Are the Terms and Conditions and When Are They Needed? to learn more or create your document in minutes with our Terms and Conditions Generator.

See also

The post How to use iubenda privacy and cookie policy on a WordPress website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on a Joomla! website https://www.iubenda.com/en/help/546-how-to-use-iubenda-privacy-and-cookie-policy-on-a-joomla-website/ Mon, 13 Jun 2016 10:30:57 +0000 http://help.iubenda.com/?p=546 This is a guide for integrating iubenda with Joomla. Quick solution: Since Joomla does not permit the inclusion of Javascript into its pages, you may want to use the direct link option. What you’ll need to add iubenda to your Joomla site In order to follow through with this guide, you will need: How to integrate the privacy policy […]

The post How to use iubenda privacy and cookie policy on a Joomla! website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

This is a guide for integrating iubenda with Joomla.

Quick solution: Since Joomla does not permit the inclusion of Javascript into its pages, you may want to use the direct link option.

What you’ll need to add iubenda to your Joomla site

In order to follow through with this guide, you will need:

  • A Joomla powered site, with access to the Admin panel (usually you will find the log in at an address such as http://www.example.com/administrator)
  • The embedding code of the privacy policy you want to integrate. You can find this code while generating or editing your privacy policy. The embedding code looks similar to this:
<a class="iubenda-black iubenda-embed" title="Privacy Policy" href="//www.iubenda.com/privacy-policy/XYZ">Privacy Policy</a><script type="text/javascript">(function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src = "//cdn.iubenda.com/iubenda.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);</script>

How to integrate the privacy policy with Joomla

Start by accessing the admin panel of your Joomla website: http://www.example.com/administrator.

At this point there are a couple of possibilities:

Joomla pre V3

Integrating iubenda with Joomla preV3 hinges on a plugin called “custom HTML advanced module” on your Joomla account that allows for the integration of custom html into the template files.

  1. Install the “custom HTML Advanced module
  2. Add the iubenda embedding code to the part of the template in which you’d like the privacy policy button to appear (probably the footer).
  3. This guide by Olark details the process.

Joomla V3

The process for Joomla V3 is slightly different.

1. Install the”custom HTML Advanced module” by accessing the Extension Manager.

joomla-iubenda

2. Upload and install the extension into your Joomla site: choose Extensions from the menu bar, then Module Manager from the dropdown menu. When you are on the Module Manager page, you can add a new custom html module or rename/reuse an existing custom html module.

joomla-iubenda2

3. Name the module after iubenda or ‘privacy policy’. Then select a position from the dropdown list. Turn “Show Title” to hide. Choose one of the available positions in the footer, since this is where you’ll want your button to appear (I’ve chosen Footer [footer]). Once you have chosen a position, copy and paste the iubenda button code into the “Custom HTML” field.

4. Make sure the module is showing on all pages because your privacy policy should ultimately show on all pages in the footer.

joomla-iubenda3

5. When the iubenda embedding code is in place (placed into the Custom HTML textarea) and the module activated on all pages, click Save & Close to finish. Then refresh your page to see if it worked.

Result

On your website you should see something like this:

joomla-iubenda-successful

If you see the privacy policy link, then everything works just fine.

See also

The post How to use iubenda privacy and cookie policy on a Joomla! website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Policy for tvOS Apps (Apple TV) https://www.iubenda.com/en/help/1528-privacy-policy-for-tvos-apps-apple-tv/ Sun, 12 Jun 2016 17:00:09 +0000 http://help.iubenda.com/?p=1528&lang=en In order to submit your Apple TV app, you need to fill in the required privacy policy field (called “Apple TV Privacy Policy”) as seen in the following screenshot: For submissions using your iubenda policy, you will need to copy in the entire text at the time of writing. Doing so is contrary to our […]

The post Privacy Policy for tvOS Apps (Apple TV) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
In order to submit your Apple TV app, you need to fill in the required privacy policy field (called “Apple TV Privacy Policy”) as seen in the following screenshot:

Privacy Policy for tvOS/Apple TV App

For submissions using your iubenda policy, you will need to copy in the entire text at the time of writing.

Doing so is contrary to our terms of service because it uses iubenda in a way that was not intended for this reason we ask you to get in touch and request permission to do so, which we will grant you after hearing you out.

If you base your operations in Germany, you might want to read through the information published by the German data protection authorities. Others may find it interesting as well.

See also

The post Privacy Policy for tvOS Apps (Apple TV) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on an ePages website https://www.iubenda.com/en/help/1419-how-to-use-iubenda-privacy-and-cookie-policy-on-a-epages-website/ Sun, 12 Jun 2016 16:30:23 +0000 http://help.iubenda.com/?p=1419 Important ePages has recently introduced limitations that actually prevent the integration of our policies. This guide will be updated as soon as it’s possible to edit the footer and/or include HTML code on the pages. iubenda can be used in 3 ways: free iubenda button direct link direct text embedding (see how it works) Iubenda […]

The post How to use iubenda privacy and cookie policy on an ePages website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Important

ePages has recently introduced limitations that actually prevent the integration of our policies. This guide will be updated as soon as it’s possible to edit the footer and/or include HTML code on the pages.

iubenda can be used in 3 ways:

  • free iubenda button
  • direct link
  • direct text embedding (see how it works)

Iubenda works the same way on ePages. You can take advantage of iubenda’s free version by using our button, you can add a direct link to your ePages site that will then lead your users to your iubenda-hosted privacy policy, or you can directly embed the privacy policy text into your ePages privacy policy page.

1. The free iubenda button

You can add the button to your footer by logging into your ePages admin and clicking on “Design”.

Then scroll down to the footer and click the plus icon to add an element.

Now you will find a modal window with options. Choose “User-defined page elements > Text (HTML)”.

In the edit page element settings choose the code editor and copy-paste your privacy policy code, created in your iubenda dashboard. Click “Apply” to finalize the iubenda privacy policy button in your ePages footer.

2. The direct link

As an alternative to the above solution which opens a modal window when the button is clicked, you can use a simple link which will open a page hosting your iubenda privacy policy. The instructions are the same as above with the exception that you will add a link to your ePages footer instead of a html element. The link is retrievable from your iubenda dashboard.

Instructions:

  • log in to your ePages admin and click on “Design”;
  • scroll down to the footer and click the plus icon;
  • choose “User-defined page elements > Link”;
  • add the iubenda link and call it “Privacy Policy”;
  • if your site has various languages get the links for each language;
  • Done.

3. The direct text embedding

The best solution for your ePages site is the direct text embedding option, which allows you to directly embed the iubenda privacy policy into your site in 11 different languages. Let’s see how it works.

Instructions:

  • log in to your ePages admin and click on “Content/Categories”;
  • navigate to the “Datasheet view”;
  • click on the existing privacy policy link;
  • in the long description form use the source editor;
  • paste the direct embedding code obtained from your iubenda dashboard;
  • if you have various languages, repeat the process in the forms for each language;
  • Done.

Screenshots to illustrate direct text embedding:

The post How to use iubenda privacy and cookie policy on an ePages website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Make Your Legal Documents Available for Offline Viewing https://www.iubenda.com/en/help/337-legal-documents-offline-viewing/ Sun, 12 Jun 2016 16:00:54 +0000 http://help.iubenda.com/?p=337 Our privacy policy and terms & conditions are very flexible and fast to implement in mobile apps. One very valid request is not entirely straight forward, however. How can you make iubenda’s legal documents available for offline viewing? This is such a request from an existing user: Our app collects user data while the mobile device […]

The post Make Your Legal Documents Available for Offline Viewing appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Our privacy policy and terms & conditions are very flexible and fast to implement in mobile apps. One very valid request is not entirely straight forward, however. How can you make iubenda’s legal documents available for offline viewing?

This is such a request from an existing user:

Our app collects user data while the mobile device isn’t connected to the internet. According to german law, we need to have the privacy policy offline available for the user. Simply putting a link to the privacy policy into the app isn’t enough. Is it possible to just copy and paste the text into our app?

You have two ways to include your privacy policy and terms & conditions for offline viewing in your app:

The direct link works perfectly for the app stores and even in-app. However if you need to make your text viewable offline we suggest you do it in the cleanest way possible by incorporating the text into your view.

How to incorporate iubenda for offline viewing

iubenda’s direct text embedding features an option to call the text from our API.

You should therefore:

  • call the API instead of the JavaScript solution;
  • cache the request for offline viewing.

See also

The post Make Your Legal Documents Available for Offline Viewing appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Can We Just Copy the Complete Text to Our Site? https://www.iubenda.com/en/help/458-can-we-just-copy-the-complete-text-to-our-site/ Sun, 12 Jun 2016 15:30:47 +0000 http://help.iubenda.com/?p=458 You have to use the “direct text embedding” option which allows you to seamlessly integrate the privacy policy with your site or app. Direct Text Embedding Option We Don’t Want People to Know We’ve Used a Generator You cannot copy-paste the text, here are 4 reasons why .

The post Can We Just Copy the Complete Text to Our Site? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
You have to use the “direct text embedding” option which allows you to seamlessly integrate the privacy policy with your site or app.

You cannot copy-paste the text, here are 4 reasons why .

The post Can We Just Copy the Complete Text to Our Site? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Remove iubenda Branding https://www.iubenda.com/en/help/166-remove-iubenda-branding/ Sun, 12 Jun 2016 15:00:36 +0000 http://help.iubenda.com/?p=166 Legacy user? See the old guide here → If you don’t want people to know you’ve used a generator, there are a few simple settings to make use of when preparing your privacy policy for inclusion on your site that will remove iubenda’s branding to the extent possible (no reference will be made to the […]

The post How to Remove iubenda Branding appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? See the old guide here →

If you don’t want people to know you’ve used a generator, there are a few simple settings to make use of when preparing your privacy policy for inclusion on your site that will remove iubenda’s branding to the extent possible (no reference will be made to the fact that the policy has been generated).

There are two primary areas that show the iubenda branding, which can be fully removed with our Ultimate plan:

  1. the iubenda button
  2. the privacy policy itself has a branding strip at the bottom that helps the user to understand its source
 

To remove the iubenda branding on a privacy policy with a Ultimate plan, follow the steps below:

1) Go to Dashboard > [your website]
If you’ve already generated your privacy policy, you’ll see the <>EMBED button as pictured, in the Privacy and Cookie Policy section (if you haven’t already generated your policy, you can read the tutorial here or click here to start generating). Clicking on the <>EMBED button pictured will take you directly to the embed section.

Embed button for the Privacy and Cookie Policy Generator

2) Once in the embed section, simply select the “White label” checkbox on the upper left (as pictured below).

Activate White label option to remove iubenda branding

This removes the iubenda branding from both the button and the branding strip at the bottom of the actual policy.

branded policy screenshot

The result is a perfectly clean privacy policy with no unnecessary iubenda branding (see the arrows).

Policy without branding strip at bottom

The left arrow above highlights the section that we cannot remove: as a service provider that hosts this page, we are required to make this known to your users.

Changing the button into text

You can also change the display of the link from button to plain text. To do this, simply click the “no style” option (at bottom left of this section) as pictured.

use no style option to change button into simple text

(Please note: This removes the “Lightbox” effect which allows the user to read the policy while staying on the same page and instead works as a regular simple link, taking the user to another page to view the policy).

See also

The post How to Remove iubenda Branding appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Prior Blocking of Cookies: Manual Tagging (with Practical Examples) https://www.iubenda.com/en/help/1229-manual-tagging-blocking-cookies/ Sun, 12 Jun 2016 13:30:30 +0000 http://help.iubenda.com/?p=1229 In short In addition to displaying a cookie banner, you must also block cookies before consent. Manual tagging is one of the options available. By making a small change to the code of the scripts that may install cookies, you allow our Privacy Controls and Cookie Solution to prevent their execution where consent has not […]

The post Prior Blocking of Cookies: Manual Tagging (with Practical Examples) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
In short

In addition to displaying a cookie banner, you must also block cookies before consent. Manual tagging is one of the options available.

By making a small change to the code of the scripts that may install cookies, you allow our Privacy Controls and Cookie Solution to prevent their execution where consent has not yet been given.

The iubenda Privacy Controls and Cookie Solution allows for the management of all aspects of Cookie Law compliance: a cookie banner for notifying your users, a cookie policy for extended information, blocking of scripts prior to the granting of consent by the user and proofs of users’ preferences.

💡 Simplify your cookie-blocking process with auto-blocking!

Did you know that there’s a simpler option available for the prior blocking of cookies and trackers? Our auto-blocking feature automates the process, saving you time and effort.

If you prefer to manually tag your scripts that install or may install cookies, you can still follow the guide below for step-by-step instructions and practical examples. However, we highly recommend considering the auto-blocking feature for a more streamlined approach.

👉 Click here to learn more about auto-blocking and how it can simplify your cookie-blocking process

How to install the iubenda Privacy Controls and Cookie Solution

For an installation guide, please see our introduction to the Privacy Controls and Cookie Solution. For WordPress, please read our dedicated post for WordPress that teaches you how to use the iubenda Privacy Controls and Cookie Solution plugin for WordPress to automate the blocking of scripts.

Which cookie-installing scripts should be blocked?

This depends on the legal jurisdiction applicable to your site. In Europe, you’re legally required to block cookie scripts until user consent is obtained. All cookies must be blocked, however, there are exemptions, the so-called strictly necessary cookies.

In the case of Italy, the category of exempt cookies are:

  • Technical cookies, preference, session and optimization cookies;
  • Statistical cookies run by first-party solutions (eg. Matomo/Piwik or other solutions hosted/run by you);
  • Statistical cookies by third parties (eg. Google Analytics), but only where the data is anonymized and is not used for profiling (even indirectly).

Regarding Google Analytics

In Italy, the condition for Google Analytics to be eligible for “no prior consent necessary” is IP anonymization – however in France, Google Analytics doesn’t seem to be eligible for exceptions, and while they recommend using Matomo/Piwik – it is the anonymization of the user’s IP that allows for analysis to be carried out in a disaggregated fashion.

Google Consent Mode

To help advertisers manage cookies for analytics and advertising purposes, Google has introduced Consent Mode, a feature that allows you to avoid prior blocking for Google Analytics and Google Ads (including Google Ads Conversion Tracking and Remarketing).

Learn how to implement it with our Privacy Controls and Cookie Solution.

It’s important to note that where the GDPR applies, intended use factors into whether or not consent is required as even statistical data can fall under “profiling” or “monitoring” depending on how the data is being used.

To proceed:

  • Google Analytics: follow the guide for the anonymization of Google Analytics IP (just add an additional line to its configuration definition);
  • According to the information we have, Webtrekk and many other analytics tools are already up to standards and do not require further configuration.

Regarding other tools that guarantee the non-usage of cookies

If other third-party tools guarantee not to use cookies, perhaps by providing specific configuration options, they too can be considered to be exempt from prior blocking.

This is the case namely with YouTube, which provides a specific feature to prevent the user from being tracked through cookies.

Using Google Tag Manager to dramatically simplify the application of cookie regulations

Google Tag Manager is a free tool that helps to simplify the application of cookie regulations. It’s compatible with the iubenda Privacy Controls and Cookie Solution. You can consult our Google Tag Manager guide here.

Google Tag Manager allows you to avoid tagging scripts as described below, although this is limited to a certain category of scripts – scripts that are not positional/do not define a position. It, therefore, does not handle embed scripts such as those related to advertising banners, youtube video widgets, facebook like buttons etc. Although this method is not a cure-all, we strongly recommend that you use it.

How to implement script blocking for those scripts that may install cookies

Modifications to script

For all other scripts that install or may install cookies, you need to proceed with changes to the code to implement the blocking capability.

To enable blocking of scripts that may install cookies, you must change these scripts so that the iubenda Privacy Controls and Cookie Solution can prevent their execution where consent has not yet been given.

To do this:

  1. apply the class _iub_cs_activate to the script tags, and
  2. change the type attribute from text/javascript to text/plain

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/_iub_cs_activate.js]

The src can remain unchanged, but it is advisable to replace it with data-suppressedsrc or with suppressedsrc. Replacing src is in some cases necessary, as the browser, even though the script is blocked, may download and/or interpret the resource and consequently install cookies.

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/safemode/tag-options/suppressedsrc.html]

Note: for script re-activation, the iubenda Privacy Controls and Cookie Solution handles src re-activation by controlling the previously described attributes in the following order: data-suppressedsrc, suppressedsrc and src (if it is left unchanged).

To activate the Javascript inline tag, you must instead apply the class _iub_cs_activate-inline.

[git:pre_js-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/_iub_cs_activate-inline.js]

Note: The class _iub_cs_activate-inline should only be used in place of _iub_cs_activate if the blocked script uses document.write and/or document.writeln, regardless of whether the script is inline or an external resource.

JavaScript modules

Thanks to the custom attributes suppressedtype and data-iub-type, our Privacy Controls and Cookie Solution can also block/activate scripts other than text/javascript (e.g. module):

<script type="module">
   console.log('this is a module, e.g. "this" is undefined:', this);
</script>

To block it:

<script suppressedtype="module" type="text/plain" class="_iub_cs_activate">
   console.log('this is a module, e.g. "this" is undefined:', this);
</script>

or (equivalent alternative):

<script data-iub-type="module" type="text/plain" class="_iub_cs_activate">
   console.log('this is a module, e.g. "this" is undefined:', this);
</script>

If you’ve enabled the per-category consent feature you’ll need to specify the categories of the scripts/iframes with a special comma-separated data-iub-purposes attribute, e.g. data-iub-purposes="2" or data-iub-purposes="2, 3" (it’s rare, but a single activator can serve different purposes).

We remind you that the purposes are grouped into 5 categories (Necessary, Functionality, Experience, Measurement, Marketing), each having an id (1, 2, 3, 4, 5):

  1. Necessary (id 1). Purposes included:
    • Backup saving and management
    • Hosting and backend infrastructure
    • Managing landing and invitation pages
    • Platform services and hosting
    • SPAM protection
    • Traffic optimization and distribution
    • Infrastructure monitoring
    • Handling payments
    • Registration and authentication provided directly by @{this_application}
    • Collection of privacy-related preferences
    • Building and running @{this_application}
  2. Functionality (id 2). Purposes included:
    • Contacting the User
    • Interaction with live chat platforms
    • Managing web conferencing and online telephony
    • Managing support and contact requests
    • Interaction with support and feedback platforms
    • Tag Management
    • Registration and authentication
    • User database management
    • Connecting data
    • Handling activities related to productivity
    • Selling goods and services online
  3. Experience (id 3). Purposes included:
    • Content commenting
    • Interaction with data collection platforms and other third-parties
    • Displaying content from external platforms
    • Interaction with external social networks and platforms
    • Interaction with online survey platforms
    • RSS feed management
    • Social features
    • Access to third-party accounts
    • Tools for social media
  4. Measurement (id 4). Purposes included:
    • Analytics
    • Beta testing
    • Content performance and feature testing (A/B testing)
    • Heat mapping and session recording
    • Managing data collection and online surveys
  5. Marketing (id 5). Purposes included:
    • Advertising
    • Advertising service infrastructure
    • Commercial affiliation
    • Managing contacts and sending messages
    • Remarketing and behavioral targeting

Let’s take the Twitter follow button for example:

<a href="https://twitter.com/iubenda" class="twitter-follow-button" data-show-count="false">Follow @iubenda</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Since the Twitter follow button is part of the “Interaction with external social networks and platforms” purpose included in the “Experience” category (3), the code will become:

<a href="https://twitter.com/iubenda" class="twitter-follow-button" data-show-count="false">Follow @iubenda</a>
<script async type="text/plain" class="_iub_cs_activate" data-iub-purposes="3" data-suppressedsrc="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

With the exception of strictly necessary cookies (which don’t need consent), you must add the data-iub-purposes attribute to all your scripts if you use per-category consent so that the Privacy Controls and Cookie Solution can properly identify the scripts for release. When the per-category feature is enabled scripts/iframes without the data-iub-purposes attribute or with at least one purpose rejected will remain blocked, so please be sure to add it in each instance.

Callback

Alternatively, in the case where cookies are activated by portions of Javascript code, it’s possible to proceed via callback to the instance csConfiguration.

[file:pre_html-code@https://raw.githubusercontent.com/iubenda/cookie-law-solution-codesnippets/master/callback/onConsentRead.html]

Note: onConsentGiven, specified above, is still available for compatibility reasons with earlier versions; its value will in any case be overridden by onConsentRead if the latter is used.

Modifications of scripts, iframe and img for dependency management

In some cases, in order to properly re-activate a blocked tag it is necessary to wait for the availability of a variable or a javascript object. To properly manage dependencies you’ll find the data-iub-cs-wait-for attribute.

[git:pre_html-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/safemode/tag_options/iub_cs_wait_for.html]

img and iframe tags

Various img and iframe tags could install cookies as well. In these cases it’s necessary to add the class _iub_cs_activate (just like for the script tags described above), assign the original value of the src tag to a new attribute called data-suppressedsrc or suppressedsrc and assign the value "about:blank" to src (see the example below to visualize these rules).

<iframe id="player" class="_iub_cs_activate" width="640" height="390" frameborder="0" suppressedsrc="https://www.youtube.com/embed/erVv_Gm7CC4" src="about:blank"></iframe>

Note: the value data:text/html;base64,PGh0bWw+PGJvZHk+U3VwcHJlc3NlZDwvYm9keT48L2h0bWw+ previously indicated in this guide (it’s the codified base64 version of: Suppressed, which will then be shown by most browsers before the consent instead of the actual output of the script) does not affect the correct blocking and the subsequent activation of the tag, but its use may result in errors in displaying some Android web views.

At this address you’ll find a code/encode tool in order to generate any other base64 version of any other string.

noscript tags

At present the noscript tag that may install cookies in cases in which the user has disabled JavaScript in his browser, is in an implementation phase. In order to be prepared for these cases as well we suggest to eliminate noscript tags from the document or to use backend solutions instead, that could after discovering the presence of the cookie _iub_cs-local, selectively include or exclude the noscript tags from the documents.

Practical examples

Below are examples of commonly used scripts and guidance on how to modify them as to comply with cookie law.

4w Marketing

Before

After:

1. define the callBack for onConsentGiven on the instance _iub.csConfiguration

[file:pre_html-code@https://gist.githubusercontent.com/s2imon/bd683a02635b39eced38/raw]

2. include the entire script that loads the banner in a div with “display:none” set – Example


AddThis

Button:


AddToAny


AdRoll


Altervista

Altervista and his ad providers join and support the Transparency and Consent Framework. More info on the Altervista Wiki.


Amazon

Banner

Login


Bing Tracker


Booking (affiliate)


CodePen


Criteo

  • Before
  • After – The URL resource is first built entirely into the block code and then inserted into the src property of the script tag.

Customerly


Disqus


Elevio


Facebook

Pixel

Like button

Like box

Page plugin


Foursquare


Freshchat


Note: snippets must be blocked in a specific order if there are more Ads Conversion per page

  • The first snippet must be blocked with the _iub_cs_activate-inline class
  • All subsequent snippets must be blocked with the _iub_cs_activate class

In doing so, the first conversion snippet will be:

[file:pre_html-code@https://raw.githubusercontent.com/iubenda/cookie-law-solution-codesnippets/master/adwords_after_iub.js]

While the subsequent conversion snippets will become:

[file:pre_html-code@https://raw.githubusercontent.com/iubenda/cookie-law-solution-codesnippets/master/adword_after_iub_standard_block.html]

All the snippets on the page can be blocked with the _iub_cs_activate class. Example:

[file:pre_html-code@https://raw.githubusercontent.com/iubenda/cookie-law-solution-codesnippets/master/adword_after_iub_standard_block.html]


Google AdSense


Google Analytics

The following is only implemented when using the features of Google Analytics that allow for the tracking of a unique user. In all other cases it is suggested to anonymize the IP.

gtag.js


Google Calendar


Google Maps (iframe)



Google Publisher Tag

Please note: if you run personalized ads using Google services, you’re required to ensure that explicit consent to ad personalization is collected before displaying personalized ads for end-users based in the EAA. More info here.


Google Track (with img tag)


Headway


Intercom


Kissmetrics


MediaMond


Mixpanel


MyLiveChat


OpenX banner

Note: if there are many OpenX banners on the page, you can speed up the activation using the inlineDelay option (for more information, see the iubenda Installation and Customization guide). We recommend to avoid values less than 200 milliseconds.


Optimizely


PayPal (Buy Now button)


ShareThis


Smart Adserver

Note: use asynchronous (AJAX) tags.

head

body


SoundCloud


Spotify

Listen

Follow


Stripe


TradeTracker


TripAdvisor

When Per Purpose Consent is Disabled

Badge, Read Review, and Write Review Widgets

Before:

<div id="DIV-ID" class="CLASS-DIV">
  <ul id="UL-ID" class="CLASS-UL">
    <li id="LI-ID" class="CLASS-LI">
      <a target="_blank" href="http://www.tripadvisor.co.uk/"><img src="http://www.tripadvisor.co.uk/img/cdsi/partner/tripadvisor_logo_DIMENSIONS.png" alt="TripAdvisor"/></a>
    </li>
  </ul>
</div>
<script src="http://www.jscache.com/wejs?wtype=TYPE&amp;uniq=UNIQ&amp;locationId=LocationId&amp;icon=knifeAndFork&amp;lang=en_UK&amp;display_version=2"></script>

After:

1. Add to the basic configuration of the iubenda script the reloadOnConsent as displayed below:

<script>
  _iub.csConfiguration ? _iub.csConfiguration : _iub.csConfiguration = {}
  _iub.csConfiguration.reloadOnConsent = true;
</script>

//insert it into <head> tag after iubenda configuration

2. Define isConsentGiven in order to control the cookies:

<script type='text/javascript'>
      function isConsentGiven() {
          if('consentIsGiven' in window && (consentIsGiven === true || consentIsGiven === false)) return consentIsGiven;
          if(!('_iub' in window && 'csConfiguration' in _iub)) return false;
          var siteId = _iub.csConfiguration.siteId || '';
          var cookiePolicyId = _iub.csConfiguration.cookiePolicyId || '';
          var cs = document.cookie.split(';');
          var consentIsGiven = false;
          for (var i = 0; i < cs.length; i++) {
              while (cs[i].charAt(0) == ' ') cs[i] = cs[i].substring(1);
              if(cs[i].indexOf('_iub_cs-s'+ siteId) == 0||cs[i].indexOf('_iub_cs-'+ cookiePolicyId) == 0) {
                  consentIsGiven = true;
                  break;
              }
          }
          window.consentIsGiven = consentIsGiven;
          return consentIsGiven;
      }
    </script>

3. Replace the original TripAdvisor element with the following resources, as indicated:

For the Badge Widget or Read Review Widget:

[git:pre_html-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/trip_advisor/tripadvisor_badge_after.html]

<script>
      if(isConsentGiven()){ //per ogni elemento di TripAdvisor
        document.write('<div id="DIV-ID" class="CLASS-DIV"><ul id="UL-ID" class="CLASS-UL"><li id="LI-ID" class="CLASS-LI"><a target="_blank" href="http://www.tripadvisor.co.uk/"><img src="http://www.tripadvisor.co.uk/img/cdsi/partner/tripadvisor_logo_DIMENSIONS.png" alt="TripAdvisor"\/><\/a><\/li><\/ul><\/div>');
        document.write('<script src="http://www.jscache.com/wejs?wtype=TYPE&amp;uniq=UNIQ&amp;locationId=LocationId&amp;icon=knifeAndFork&amp;lang=en_UK&amp;display_version=2"><\/script>');
      }
    </script>

For the Write Review Widget:

(Consider that for this widget, additional changes include using a suppressed image source and a specific script URL for TripAdvisor.)

<script>
      if(isConsentGiven()){
        document.write('<div id="DIV-ID" class="CLASS-DIV"><ul id="UL-ID" class="CLASS-UL"><li id="LI-ID" class="CLASS-LI"><a target="_blank" href="http://www.tripadvisor.co.uk/"><img class="_iub_cs_activate" src="data:text/html;base64,PGh0bWw+PGJvZHk+U3VwcHJlc3NlZDwvYm9keT48L2h0bWw+" suppressedsrc="http://www.tripadvisor.co.uk/img/cdsi/img2/branding/150_logo-11900-2.png" alt="TripAdvisor"\/><\/a><\/li><\/ul><\/div>');
            document.write('<script src="http://www.jscache.com/wejs?wtype=cdswritereviewlg&amp;uniq=YOUR-UNIQ&amp;locationId=YOUR-LOCATION&amp;lang=en_UK&amp;border=false&amp;langversion=2"><\/script>');
        }
    </script>

When Per Purpose Consent is Enabled

Badge, Read Review, and Write Review Widgets

Before:

<div id="DIV-ID" class="CLASS-DIV">
  <ul id="UL-ID" class="CLASS-UL">
    <li id="LI-ID" class="CLASS-LI">
      <a target="_blank" href="http://www.tripadvisor.co.uk/"><img src="http://www.tripadvisor.co.uk/img/cdsi/partner/tripadvisor_logo_DIMENSIONS.png" alt="TripAdvisor"/></a>
    </li>
  </ul>
</div>
<script src="http://www.jscache.com/wejs?wtype=TYPE&amp;uniq=UNIQ&amp;locationId=LocationId&amp;icon=knifeAndFork&amp;lang=en_UK&amp;display_version=2"></script>

After:

1. Add to the basic configuration of the iubenda script the reloadOnConsent as displayed below:

<script>
  _iub.csConfiguration ? _iub.csConfiguration : _iub.csConfiguration = {}
  _iub.csConfiguration.reloadOnConsent = true;
</script>


//insert it into <head> tag after iubenda configuration

2. Define isConsentGivenByPurpose function in order to check whether consent has been given for specific purposes based on cookies.

<script type='text/javascript'>
function isConsentGivenByPurpose() {
  if('consentIsGiven' in window && (consentIsGiven === true || consentIsGiven === false)) return consentIsGiven;
  if(!('_iub' in window && 'csConfiguration' in _iub)) return false;
  var siteId = _iub.csConfiguration.siteId || '';
  var cookiePolicyId = _iub.csConfiguration.cookiePolicyId || '';
  var cs = document.cookie.split(';');
  var consentIsGiven = false;
  for (var i = 0; i < cs.length; i++) {
      while (cs[i].charAt(0) == ' ') cs[i] = cs[i].substring(1);
      var siteCookiePattern = new RegExp('^_iub_cs-s' + siteId + '=', 'i');
      var policyCookiePattern = new RegExp('^_iub_cs-' + cookiePolicyId + '=', 'i');
      if(siteCookiePattern.test(cs[i]) || policyCookiePattern.test(cs[i])) {
        try {
          var cookieContent = cs[i].split('=');
          var cookieValue = JSON.parse(decodeURIComponent(cookieContent[1]));

          var checkPurposes = true;

          for (var a = 0; a < arguments.length; a++) {
            var purposeItem = cookieValue.purposes[arguments[a]];
            if (checkPurposes && !purposeItem) {
              checkPurposes = !!purposeItem;
            }
          }

          consentIsGiven = checkPurposes
        } catch (e) {
          consentIsGiven = true;
        }
        break;
      }
  }
  window.consentIsGiven = consentIsGiven;
  return consentIsGiven;
}
</script>

3. For the Badge Widget, Read Review Widget or Write Review Widget, replace the original TripAdvisor element with the following resource:

(Consider that, for the Badge Widget and Review Badge Widget, it’s necessary to pass the appropriate purpose identifier (e.g., 2) to the isConsentGivenByPurpose function.)

<script>
if(isConsentGivenByPurpose(2)){
document.write('<div id="DIV-ID" class="CLASS-DIV"><ul id="UL-ID" class="CLASS-UL"><li id="LI-ID" class="CLASS-LI"><a target="_blank" href="http://www.tripadvisor.co.uk/"><img src="http://www.tripadvisor.co.uk/img/cdsi/partner/tripadvisor_logo_DIMENSIONS.png" alt="TripAdvisor"\/><\/a><\/li><\/ul><\/div>');
document.write('<script src="http://www.jscache.com/wejs?wtype=TYPE&amp;uniq=UNIQ&amp;locationId=LocationId&amp;icon=knifeAndFork&amp;lang=en_UK&amp;display_version=2"><\/script>');
};
}
</script>

Twitter

Follow Button

Share Button

Embedded Tweet


UserVoice


Vimeo


Viralize


YouTube

The following applies only in cases where you do not use the option that lets you include YouTube videos without installing cookies to visitors of the site.

See also

The post Prior Blocking of Cookies: Manual Tagging (with Practical Examples) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Use Google Tag Manager to Simplify the Blocking of Cookies https://www.iubenda.com/en/help/1235-google-tag-manager-blocking-cookies/ Sun, 12 Jun 2016 11:49:40 +0000 http://help.iubenda.com/?p=1235 Caution If you’re looking to simplify the blocking of cookies and trackers using Google Tag Manager together with the auto-blocking feature, it’s important to note that the related snippet cannot be loaded directly via GTM. However, you can still refer to the following guide to streamline the cookie-blocking process using GTM. Below we’ll explain how […]

The post How to Use Google Tag Manager to Simplify the Blocking of Cookies appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Caution

If you’re looking to simplify the blocking of cookies and trackers using Google Tag Manager together with the auto-blocking feature, it’s important to note that the related snippet cannot be loaded directly via GTM. However, you can still refer to the following guide to streamline the cookie-blocking process using GTM.

Below we’ll explain how to integrate Google Tag Manager with the iubenda Privacy Controls and Cookie Solution for CCPA, GDPR and per-category consent.

Important

Using Google Tag Manager is highly recommended given that it drastically simplifies the adoption of the Cookie Law requirements. However, it’s only effective for scripts that aren’t “positional”. “Non-positional” scripts are all scripts that don’t visualize a specific element at a given place in the page. In short, you can use this solution for all analytics tools, but not for AdSense banners, Youtube videos or social buttons or widgets of any kind.

Some quick definitions

Google Tag Manager - Container, tag and trigger

See the official Google documentation for more information on Google Tag Manager. With that said, let’s start the tutorial!

Create an account and set up a container

To start with Google Tag Manager, you’ll need to create a free account and to set up a container.

create an account and a container

Create the tag

Once the container has been created we can move on to the creation of the tag. Once again, the tag represents the script that will only be activated according to determined rules, in our case the user’s consent to the use of cookies.

The tag that we will create will be related to Google Analytics 4:

Google Tag Manager - Creating a tag

Click on the Tag configuration window as seen in the image below:

Google Tag Manager - Creating a tag

Select the Google Analytics: GA4 Configuration tag type.

Google Analytics GA4 Configuration Tag Type
Next, enter the Measurement ID (e.g, G-A2ABC2ABCD) for your GA4 property.

Google Analytics GA4 Configuration measurement ID

Now, you can set up the rules for the activation of the tag. Let’s see how to do it.

Set up rules for the activation of the tag

After having filled in the above parameters, we must set the triggers (the rules that will allow the scripts to fire):

  1. iubenda_consent_given or, if you’ve enabled the per-category consent feature on your Privacy Controls and Cookie Solution, iubenda_consent_given_purpose_1...5
  2. iubenda_preference_not_needed
  3. iubenda_ccpa_opted_out
  4. If you have enabled USPR, iubenda_consent_given_purpose_s, iubenda_consent_given_purpose_sh, iubenda_consent_given_purpose_adv, and iubenda_consent_given_purpose_sd8
Google Tag Manager and Consent Mode

If you’re implementing Google Consent Mode, skip this step and jump to installation.

1.1 iubenda_consent_given

Click on the “Triggering” section below:

Google Analytics GA4 Configuration Triggering

and then click on the little plus sign on the top right to add a new Trigger. Now, in the trigger configuration window, select Custom Event (quick note here: please be sure NOT to select “All Pages” as a trigger).

Google Tag Manager - Custom event

For event name please input the following value: iubenda_consent_given. This will activate the trigger on All Custom Events labeled Consent Given.

Save the trigger by clicking on Save:

Create trigger

1.2 iubenda_consent_given_purpose_1…5

If you’ve enabled the per-category consent feature on your Privacy Controls and Cookie Solution, instead of the iubenda_consent_given event, you’ll have to create a custom event for each purpose you display on your cookie banner/policy (with the exception of the “Necessary” purpose).

If you’re not sure which purpose/category the services running on your site belong to, you can simply reference the subheadings they fall under in your iubenda cookie policy.

Here are the 5 purposes (and the custom event values):

  1. Necessary (no need to create a custom event)
  2. Functionality (iubenda_consent_given_purpose_2)
  3. Experience (iubenda_consent_given_purpose_3)
  4. Measurement (iubenda_consent_given_purpose_4)
  5. Marketing (iubenda_consent_given_purpose_5)

Since Google Analytics is part of the “Analytics” category included in the “Measurement” purpose, you’ll have to create a custom event with the following value: iubenda_consent_given_purpose_4. This will activate the trigger on All Custom Events labeled Consent Given Purpose 4.

Create trigger

For US state privacy laws use the following events:

  1. iubenda_consent_given_purpose_s: Sale of my personal information
  2. iubenda_consent_given_purpose_sh: Sharing of my personal information
  3. iubenda_consent_given_purpose_adv: Processing of my personal information for targeted advertising
  4. iubenda_consent_given_purpose_sd8: Processing of my precise geolocation data

Once done, save the trigger as usual.

2. iubenda_preference_not_needed

Use the same procedure to create another custom event called iubenda_preference_not_needed, invoked whenever a preference is not needed (for example when gdprApplies:false, or gdprAppliesGlobally:false, countryDetection:true and the user is based outside the EU):

Google Tag Manager - iubenda_preference_not_needed trigger configuration

3. iubenda_ccpa_opted_out

If the CCPA applies to you and – like in this case – the tag/service is considered a sale, it should be disabled when the user opts out. To do so, you’ll have to create an exception called iubenda_ccpa_opted_out.

Before creating this event, you’ll have to define a filter for it. Click on Variables, then New (next to User-Defined Variables). Name it iubenda_ccpa_opted_out, click on the Variable Configuration box and choose Data Layer Variable, use iubenda_ccpa_opted_out as Data Layer Variable Name and select Version 2 as Data Layer Version. Then click on Save.

Google Tag Manager - iubenda_ccpa_opted_out variable configuration

Now that you’ve defined the variable, create a new trigger called iubenda_ccpa_opted_out. Under Trigger Configuration:

  • choose Custom Event as Trigger Type;
  • input .* as Event name and select Use regex matching;
  • under This trigger fires on choose Some Custom Events, select iubenda_ccpa_opted_out, equals and true
Google Tag Manager - iubenda_ccpa_opted_out trigger configuration

and click Save.

In the end, your Google Analytics: GA4 Configuration tag will look like this:

Google Tag Manager - Google Analytics GA4 tag configuration

Click on Save to save the tag.

There’s no harm in adding both the iubenda_consent_given and iubenda_consent_given_purpose_4 triggers, even if you don’t use the per-category consent feature. Setting both now will prevent you from editing all your tags if you decide to enable that feature in the future.

By setting up this rule, Google Tag Manager will activate the Google Analytics GA4 Configuration tag that we’ve created above, only when this rules are true. That means that it will fire every time Google Tag Manager receives an event with the value iubenda_consent_given or iubenda_consent_given_purpose_4 or iubenda_preference_not_needed.

Note
  • The previous example assumes that you’re firing the tag on all pages of your site, if you’d like to have a tag fire on just one page (eg. Shopping Cart page) see the advanced section here.
  • On adding multiple containers on the same page: Google recommends to keep the number of containers on the page minimal for the best performance. If you take advantage of it (e.g. creating a container for each purpose when using per-category consent), ensure that you use the same dataLayer name on all containers as explained here.
  • Remember, if you’d like to track more than one event on the same page (eg. Tracking page views as well as a form submission), you’ll need to create the additional tags and specify the tracking type. See the specifics in the advanced section here.

Install Google Tag Manager on your own site

To install Google Tag Manager please visit the GTM admin, copy the code that Google provides and insert it into all the pages of your own website as per the instructions provided – if you’re using a CMS that pulls the page header from one header template file (eg. header.php), then simply pasting it in that file should be enough.

Google Tag Manager - Installation
Google Tag Manager - Installation

Note: you’ll need to remove your own Google Analytics code.

Google Analytics will be activated automatically by the Google Tag Manager script only after the user/visitor consents to the use of cookies.

Install the iubenda script

Go to your iubenda dashboard > [your website] > Privacy Controls and Cookie Solution, click on the Embed button to get to the embed section:

Cookie Solution - Embed the banner

and retrieve the code to your cookie banner (if you haven’t already activated the Privacy Controls and Cookie Solution, then simply click on Activate, set up then head to the embed section to retrieve the code as described).

Now, your code will look something like the following:

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

It has to be edited as follows:

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        },
        "callback": {
                  onPreferenceExpressedOrNotNeeded: function (preference) {
                    dataLayer.push({
                      iubenda_ccpa_opted_out: _iub.cs.api.isCcpaOptedOut(),
                    });

                    // preferences parameter may be undefined if both GDPR and LGPD do not apply
                    // we may need the line below to find USPR preferences instead of relying
                    // on preferences parameter
                    var otherPreferences = _iub.cs.api.getPreferences();

                    if (otherPreferences) {
                      var usprPreferences = otherPreferences.uspr;
                      if (usprPreferences) {
                        for (var purposeName in usprPreferences) {
                          if (usprPreferences[purposeName]) {
                            dataLayer.push({
                              event: 'iubenda_consent_given_purpose_' + purposeName,
                            });
                          }
                        }
                      }
                    }

                    if (!preference) {
                      dataLayer.push({
                        event: 'iubenda_preference_not_needed',
                      });
                    }
                    else if (preference.consent === true) {
                      dataLayer.push({
                        event: 'iubenda_consent_given',
                      });
                    }
                    else if (preference.consent === false) {
                      dataLayer.push({
                        event: 'iubenda_consent_rejected',
                      });
                    }
                    else if (preference.purposes) {
                      for (var purposeId in preference.purposes) {
                        if (preference.purposes[purposeId]) {
                          dataLayer.push({
                            event: 'iubenda_consent_given_purpose_' + purposeId,
                          });
                        }
                      }
                    }
                  }		
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

We have therefore added a callback that, at the moment consent is given by the user, calls the code by Google Tag Manager to unlock the event we’ve set up for the activation of Google Analytics.

Now that we’ve adapted the code for the integration with Google Tag Manager, we’ll include it into our pages before the closing of the BODY tag.

If you’re all done, jump directly to Publish otherwise, read on for Advanced Configuration (these settings allow you to accelerate the activation of the tags, fire tags only on specific pages and set multiple tracking types on the same page by adding additional parameters to your GTM configuration).

Advanced Configurations

In this section, we’ll be using “Variables” and “Trigger Exceptions” to get even more specific. Google Tag Manager allows variables to be created and for exceptions to be set into the trigger conditions of the tag.

You can think of exceptions as “blocking triggers”. For example, if you’d only like your Google Analytics tag to fire on your shopping cart page, you can set an exception to the firing rule that states that the tag does not fire on any page that is not your shopping cart page; setting this exception, blocks the tag from firing on pages other than the shopping cart page. Similarly, you can set a trigger to only fire if conditions related to a particular variable are met.

In this way, both variables and exceptions allow for greater flexibility in your tag management (you can read what Google has to say about exceptions here and variables here).

As mentioned above, if you’d only like your Google Analytics tag to fire on your shopping cart page, you can set an exception to the firing rule that states that the tag does not fire on any page that is not your shopping cart page. Here’s how to do this:

Create a Page URL variable (click on “Variables” in the left panel, then “New Variable”). Next click within the variable configuration box to choose the variable type, then select URL.

Select built-in page url variable

Now click save and name the variable something related to the page you want the tag to fire on. In our example, we’ve named the variable “Shopping Cart”.

Next, create the new blocking trigger or Exception you’d like to add (click on “Triggers” in the left panel, then “New”). Try to name your exception something relevant. In this example we’ve named ours: “is NOT shopping cart”

Next click within the trigger configuration box to choose the trigger type, in this case “Page View”.

  • Now select the “Some Pages” option.
  • Indicate the variable (in this case the “Shopping Cart” variable we just created) as the associated variable and configure: “does not equal”* and type in your page url as an activation condition (eg. https://shoppingcart.yourwebsite.com)
    *One other option here is to select “starts with” (instead of “does not equal”) if you want the tag to fire on pages that start with the shopping cart url etc. You can configure the settings here in the way that best fits your particular site.
Exception configuration

Click Save.

Lastly, go back to your tag and in addition to the “iubenda consent given” activator, you also need to associate the exception that we just created. You can do this by clicking on the pencil in the “Triggering” section,

add form trigger to tag

then click on the “Add Exception” link that appears.

Next select the exception we just created, save and you’re done! Now the tag will still only fire after consent to cookies is attained (as legally required) but will not fire on pages that are not your “Shopping Cart” page.

is not shopping cart exception

If you’d like to track more than one event on the same page (eg. tracking page views as well as a purchase form submission), you’ll need to create the additional tags and specify the varied tracking type. While setting multiple tracking types is simple to do in Tag Manager, in order to comply with the law, you must make sure that the other triggering events only occur after consent has been received. Here’s how to do this:

For this example, let’s assume that in addition to tracking page views in Google Analytics (as set in the tag we created in the first section), you’d like to track transactions as well.

In order to do that, we’ll need to create another Google Analytics tag, set the Track type as “Transaction”, and click save (you can name this something descriptive like “Universal Analytics Transactions”).

Google Analytics transaction Tag GTM

Next, create a first-party cookie variable (click on “Variables” in the left panel and add a new custom variable)

  • Specify the variable’s name in the following format: “_iub_cs-XXXXXX” (XXXXXX will have to be substituted with your own cookiePolicyId number).
  • Select the following option: “URI-Decode cookie”.
Create the variable

Hit the “Save” button and name this something like “Cookieiubenda”

Name the variable

Next, create the new trigger you’d like to add: eg. “Purchase Made”; type “Form submission”.

  • Now select the option that starts “Some” – so in the case of “Form submission” example above, we’ll need to select “Some Forms” (as see picture below).
  • Indicate the iubenda cookie (the variable you just created) as the associated variable and configure: “contains” and “consent”:true as an activation condition
Per-category consent

If you’ve set perPurposeConsent to true, the “Cookieiubenda” variable will not contain the value “consent”:true, but the values referred to the single accepted purposes (i.e. “1”:true, “2”:true, “3”:true, “4”:true etc). Adapt the suggested steps accordingly.

Trigger configuration

Lastly, go back to your “Universal Analytics Transaction” tag and associate the trigger that we just created. You can do this by clicking in the “Triggering” section and simply selecting the “Purchase Made” trigger that we just created.

add trigger to tag

Save and you’re done!

multiple triggers single tag

Note: if you’d like the transaction tracking to only occur on one page (eg. shopping cart page), see the tutorial on how to do this in the tutorial in the first tab of this section.

It’s possible to activate the Tags more quickly by modifying two additional parameters in GTM as such:

Create a first-party cookie variable (click on “Variables” in the left panel and add a new custom variable)

  • Specify the variable’s name in the following format: “_iub_cs-XXXXXX” (XXXXXX will have to be substituted with your own cookiePolicyId).
  • Select the following option: “URI-Decode cookie”.
create variable GTM

Next, create a new trigger: “Cookie Law not accepted”; type “Page View”, this new trigger will allow for the presence of iubenda’s cookie to be treated as an exception:

  • select “Some Page Views”
  • Indicate the iubenda cookie (the variable you just created) as the associated variable and configure: “does not contain” and “consent”:true as an activation condition (see picture below):
Trigger configuration GTM cookie exception

Lastly, go back to your tag and in addition to the “iubenda consent given” activator, you also need to associate the exception that we just created. You can do this by clicking on the pencil in the “Triggering” section,

Trigger configuration GTM cookie exception

then click on the “Add Exception” link that appears. Now select the trigger we just created and simply save.

GTM tag with Cookie Law not accepted exception
Note

When implementing this advanced configuration remember that were the cookiePolicyId to be modified, the modification would also have to be applied in the configuration. For a correct configuration, it is not necessary nor advantageous to include iubenda code through GTM.

Source: tagmanageritalia.it/guida-base-gestire-la-cookie-law-di-iubenda-con-google-tag-manager

Publish a container

If you previously jumped to the Advanced Section direction right after creating and configuring your Tag and Triggers, please be sure to install Google Tag Manager on your own site and install the iubenda script BEFORE continuing to the Publish section below.

After having set up the rules, you’ll want to publish the container to make the modifications LIVE on your website:

Google Tag Manager - Publish container

This is done by clicking the button called SUBMIT on the upper right side of the container overview page, then confirm.

These examples can be reused for any other scripts or JavaScript function.

See also

The post How to Use Google Tag Manager to Simplify the Blocking of Cookies appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Prior Blocking of Cookies: Google AdSense and Ad Manager https://www.iubenda.com/en/help/1182-google-adsense-ad-manager-blocking-cookies/ Sun, 12 Jun 2016 10:30:27 +0000 http://help.iubenda.com/?p=1182 Google AdSense Below is the original procedure, which allows for the addition of two script tags to your pages: To make sure that the Google AdSense banners don’t save any cookies before user consent, it’s necessary to make these changes: Define the function iubenda_adsense_unblock associating it to the callback onConsentGiven: You should insert the code […]

The post Prior Blocking of Cookies: Google AdSense and Ad Manager appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Google AdSense

Below is the original procedure, which allows for the addition of two script tags to your pages:

<script>
    google_ad_client = "ca-pub-00000000";
    google_ad_slot = "XXXXXXXXXX";
    google_ad_width = 728;
    google_ad_height = 90;
</script>
<script src="//pagead2.googlesyndication.com/pagead/show_ads.js"></script>

To make sure that the Google AdSense banners don’t save any cookies before user consent, it’s necessary to make these changes:

Define the function iubenda_adsense_unblock associating it to the callback onConsentGiven:

<script>
    function iubenda_adsense_unblock() {
        var t = 1;
        $('._iub_cs_activate_google_ads').each(function() {
            var banner = $(this);
            setTimeout(function() {
                var client = banner.data('client');
                var slot = banner.data('slot');
                var width = banner.data('width');
                var height = banner.data('height');
                var adsense_script = '<scr' + 'ipt type="text/javascript">\n' +
                    'google_ad_client = "' + client + '";\n' +
                    'google_ad_slot = "' + slot + '";\n' +
                    'google_ad_width = ' + width + ';\n' +
                    'google_ad_height = ' + height + ';\n' +
                    '</scr' + 'ipt>';
                var script = document.createElement('script');
                var ads = document.createElement('ads');
                var w = document.write;

                // override and replace with our version
                document.write = (function(params) {
                    // replace our placeholder with real ads
                    ads.innerHTML = params;
                    // put the old implementation back in place
                    // Aristos, add this check because called more than ones
                    //  and ends, with this symbol.
                    if (params.indexOf("</ins>") != -1)
                        document.write = w;
                });
                script.setAttribute('type', 'text/javascript');
                script.setAttribute('src', 'http://pagead2.googlesyndication.com/pagead/show_ads.js');
                script.setAttribute('async', 'async');
                banner.html(adsense_script).append(ads).append(script);
            }, t);
            t += 200;
        });
    }

    if ('callback' in _iub.csConfiguration) {
        _iub.csConfiguration.callback.onConsentGiven = iubenda_adsense_unblock;
    } else {
        _iub.csConfiguration.callback = {};
        _iub.csConfiguration.callback.onConsentGiven = iubenda_adsense_unblock;
    }
</script>

You should insert the code above just after configuring the iubenda Privacy Controls and Cookie Solution within your html.

Create div sections for each banner, giving them the attributes of the type data- and adding the class _iub_cs_activate_google_ads:

<div style="width: 728px; height:90px;" class="_iub_cs_activate_google_ads"
    data-client="ca-pub-00000000"
    data-slot="XXXXXXXXXX"
    data-width="728"
    data-height="90">
</div>

Google Ad Manager

In order to ensure that Google Ad Manager (previously DFP – DoubleClick for Publishers) can install cookies only after obtaining consent from the user, you have to use the method described below so that the iubenda Privacy Controls and Cookie Solution can interact with Google Ad Manager by blocking tracking when the iubenda preference cookie is not present in the user’s browser.

Code without modifications

Inclusion of the Google Ad Manager script:

<script async src="//securepubads.g.doubleclick.net/tag/js/gpt.js"></script>  
<script>var googletag = window.googletag || {cmd: []};</script>
<script>
    googletag.cmd.push(function() {
        googletag.pubads().set("adsense_background_color", "FFFFFF");
    });
</script>
<script>
    googletag.cmd.push(function() {
        googletag.defineSlot('/1010125/Prontoimprese/Ros/300x250Top-ProntoImprese-Ros', [
            [300, 250],
            [300, 600]
        ], 'div-gpt-ad-1330418177496-1').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
    });
</script>

The single Google Ad Manager banner elements:

<div id="div-gpt-ad-1330418177496-1">
    <script>
        googletag.cmd.push(function() {
            googletag.display("div-gpt-ad-1330418177496-1");
        });
    </script>
</div>

Necessary modifications for the correct functioning of the iubenda Privacy Controls and Cookie Solution

Add the _iub_cs_activate class and the data-iub-purposes="5" attribute (necessary for the per-category consent) to the Google Ad Manager script:

<script async type="text/plain" class="_iub_cs_activate" data-iub-purposes="5" src="//securepubads.g.doubleclick.net/tag/js/gpt.js"></script>  
<script>var googletag = window.googletag || {cmd: []};</script>
<script type="text/plain" class="_iub_cs_activate" data-iub-purposes="5">
    googletag.cmd.push(function () {
        googletag.pubads().set("adsense_background_color", "FFFFFF");
    });
</script>
<script type="text/plain" class="_iub_cs_activate" data-iub-purposes="5">
    googletag.cmd.push(function() {
        googletag.defineSlot('/1010125/Prontoimprese/Ros/300x250Top-ProntoImprese-Ros', [[300, 250], [300, 600]], 'div-gpt-ad-1330418177496-1').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
    });
</script>

Each Google Ad Manager banner gets a _iub_cs_activate-inline and a data-iub-purposes="5":

<div id="div-gpt-ad-1330418177496-1" style="width: 728px; height: 90px">
    <script type="text/plain" class="_iub_cs_activate-inline" data-iub-purposes="5">
        googletag.cmd.push(function () {
            googletag.display("div-gpt-ad-1330418177496-1");
        });
    </script>
</div>

See also

The post Prior Blocking of Cookies: Google AdSense and Ad Manager appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda All-in-one Compliance – WordPress plugin https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide/ Sun, 12 Jun 2016 10:00:38 +0000 http://help.iubenda.com/?p=1215 Let us introduce you to our new All-in-one Compliance for GDPR / CCPA Cookie Consent WordPress plugin. A totally revamped solution that allows you to manage all of the iubenda compliance solutions to give you access to everything you need! The iubenda plugin is an all-in-one, extremely easy-to-use 360° compliance solution that quickly scans your site and […]

The post iubenda All-in-one Compliance – WordPress plugin appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Let us introduce you to our new All-in-one Compliance for GDPR / CCPA Cookie Consent WordPress plugin. A totally revamped solution that allows you to manage all of the iubenda compliance solutions to give you access to everything you need!

The iubenda plugin is an all-in-one, extremely easy-to-use 360° compliance solution that quickly scans your site and auto-configures to match your specific setup. It supports multiple legislation and minimizes the need for code copy-pasting.

 All-in-one Compliance for GDPR / CCPA Cookie Consent

Functionality

  • Our WP cookie plugin automatically scans your site and auto-configures the solutions needed to match your site’s specific needs.
  • Provides a fully customizable cookie banner/consent banner, manages cookie consent, and stores legally required GDPR consent proofs for cookies.
  • Manages CCPA notice with working DNSMPI link
  • Compatible with IABs TCF to maximize ad earning.
  • Allows you to generate a fully customizable privacy and cookie policy quickly.
  • Auto-detect user location and auto-applies the correct data privacy settings (needed if you have users from multiple regions like the US and the EU).
  • Capture, store and manage GDPR consent records for your webforms.
  • Allows the manual blocking of all other resources without direct intervention on the scripts.
  • Supports the WP Consent API for improved integration with other plugins and better compliance with privacy laws.
  • It displays a clean page (without a cookie banner/consent banner) to users who have already provided their consent.
  • It detects bots/spiders and serves them a clean page.
  • It supports the auto-assignment of categories when blocking scripts.
  • It supports AMP pages.
  • Effortlessly generate professional Terms and Conditions to protect you from liabilities and more.
  • Translate all documents with a single click (15 languages supported).

Our solutions are fully responsive (perfect for all screen sizes) and WCAG Level AAA Compliant.

  • AdRoll
  • AddThis widgets
  • Bing
  • CodePen
  • Criteo
  • Disqus
  • Elevio
  • Facebook Comments
  • Facebook widgets
  • Freshchat
  • Google AdSense
  • Google Analytics
  • Google Maps
  • Google Site Search
  • Google oAuth
  • Google+ widgets
  • Headway
  • Instagram widgets
  • Kissmetrics
  • LinkedIn widgets
  • Mixpanel
  • Neodata
  • Olark
  • Optimizely
  • Outbrain
  • PayPal widgets
  • Pingdom
  • Pinterest widgets
  • Segment
  • ShareThis widgets
  • Twitter widgets
  • UserVoice
  • Vimeo
  • YouTube

Requirements

  • WordPress 5.0 or higher
  • PHP 7.0.0 or higher

How to start

🎥 Watch how to set up iubenda on WordPress in just a few clicks:


To begin, you can either download the plugin from the WordPress plugin repository and add it manually to your WordPress installation or access the administration panel within WordPress and click on Plugins > Add New Plugin > iubenda | All-in-one Compliance for GDPR / CCPA Cookie Consent + more.
Then install and activate it.

Once activated, head to iubenda in your WP admin panel.

💡 The iubenda All-in-One Compliance WordPress plugin is free to use, but comes with some limitations. For example, it supports up to 1,000 page views per month. If your site exceeds this or requires additional features, you’ll need to upgrade to a paid plan. For full details on the Free Plan’s limitations, see here.

How to use

Once there, you’ll see a page like the one below in loading. Our WP plugin scans your site and provides a rating based on your site’s specific needs.

iubenda rating

On this page, you can find your site’s compliance elements summarized.
Then, click on “Help me get compliant” to proceed.

Now you can start from scratch with iubenda solutions, or if you already use some of our products, you can directly synchronize them with our plugin.

installation
👀 Already using our products?

If you already use iubenda products for the site you want to manage with our WP plugin, you can skip straight to -> Synchronize your iubenda account with the WP plugin.

New users – Configure your products from scratch

To set up the plugin, you will be asked to choose the language of your website and then click continue.

🔎 Multilanguage website?

Choose the main language of your site, you can easily add the other languages in the following steps. For more information you can read our guide on multilingual WordPress Sites.

Finally, you will need to enter the website and email address.

quick generator

Great, we’ve now created an account on iubenda.com and generated the essentials you need to proceed. You’ll receive an email to complete your account configuration, but you can still continue to configure the plugin.

Set up your Cookie banner/consent banner (and add the privacy policy button)

You’re now ready to set up your cookie banner/consent banner. In this step, you can select the main elements of the banner, such as the:

  • Banner’s position and theme;
  • The legislation with which you need to comply. Doubts? Find here what you need to comply with;
  • Enable IAB TCF options (recommended if you run ads on your site);
  • Enable Google AMP support;
  • Automatically block scripts detected by the plugin and set.
🔎 Want to customize more?

After the first set up, you can customize all the aspect and behavior of the cookie banner/consent banner with our Privacy Controls and Cookie Solution configurator. For more info read here

cookie banner setup

After setting up your Privacy Controls and Cookie Solution, you can add your privacy policy button, choosing the style and the button position.

synchronize products

When you’re done, click on Integrate.

You have now completed the basic configuration of the cookie banner/consent banner and added the privacy policy button.
From the plugin dashboard, you will be able to configure and manage the products you have activated or add new ones.

To find out how to configure your products, you can read the specific section of this guide.

Synchronize your already set up iubenda products with the WP plugin

If you have already activated some iubenda products, on the first step of the configuration process, click on “I’ve already made the set up on iubenda.com.”

synchronize cookie solution

Then, paste the embed code of your Privacy Controls and Cookie Solution (required) and other products you have set up in your iubenda account, and that’s it. Our plugin will automatically synchronize your products within the plugin.

iubenda All-in-one plugin dashboard

Once you finish the first setup, you’ll have complete control of all the iubenda products you can manage and integrate within the plugin.

plugin dashboard

Learn how to configure the products available for the plugin below:

Privacy Controls and Cookie Solution

The simplified cookie banner/consent banner settings already ensure seamless operation, but you may want to customize your banner’s behavior and aspect thoroughly.
To do that, click on the configure button within the Privacy Controls and Cookie Solution area, then select Manual embed. Next, see the collapsible element below for advanced configuration options.

Next, you can configure the cookie banner/consent banner directly in our configurator here.
You can check our complete guide on the Privacy Controls and Cookie Solution for more information.

Finally, paste the embed code and click save settings in the bottom-right of the page.

Automated prior-blocking of scripts

Our WP plugin will also recognize and automatically detect and block the cookies indicated in the above block list on your site.

Important

Our WordPress plugin automatically blocks scripts that are generated on the server side (therefore returned by PHP by WordPress). Scripts that are inserted into the page via JavaScript after the loading process of that page are not and cannot be blocked automatically.

These scripts can be blocked by entering the source into the Custom Script boxes in the plugin console or by using the manual wrapping method illustrated in the example below and (in more detail) in this help post

Blocking custom scripts from within the console

The Custom Scripts field makes it easy for you to block scripts inserted into the page directly from within the plugin console. This dramatically reduces the need for direct edits to the site’s code.

Here’s how to do it:

  • In the left menu within your administration panel, click on iubenda.
  • Next, click on configure in the Privacy Controls and Cookie Solution area and scroll down to find the Blocked domains setting.Wordpress custom and iframe scripts fields
  • Enter your script or iframe sources as needed, assign their purpose (optional), and click the Save Changes button at the bottom-left of the page.

Usage Examples

Using these fields is pretty straightforward. Simply enter the script or iframe src attribute you’d like to block.

Script

If you wanted to block a social button (which inserts scripts into the page via JavaScript), you’d simply need to enter the script source, e.g. connect.socialwebsite.net/en_US/track.js into the scripts field.

iframe

Let’s say you wanted to block scripts inserted into the page via the following iframe

<iframe width="1280" height="720" src="https://www.videowebsite.com/embed/xxFhMChxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

What you’ll need to enter into the iframe field would be videowebsite.com/embed/ as this is the actual source of the scripts. Be careful NOT to enter the component id (videowebsite.com/embed/xxFhMChxx) to ensure that all scripts coming from the actual source are blocked.

Manual Use (wrapping method)

This method requires you to modify your site’s code directly. As explained below, you’ll need to go into the relevant section of your site’s code and add the scripts to be blocked.

For example, a conversion pixel for Google Ads would be handled this way:

[git:pre_html-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/adwords_wp_plugin.html]

If you’ve enabled the per-category consent feature, you’ll need to assign the purpose. Resuming the previous example, being part of the “Targeting & Advertising” purpose (id 5):

<!--IUB-COOKIE-BLOCK-START-PURPOSE-5-->
      <script type="text/javascript">
      ...
      </script>
      <script type="text/javascript" src="..."></script>
      <noscript>
      ...
      </noscript>
<!--IUB-COOKIE-BLOCK-END-PURPOSE-5-->

If there are HTML / IMG / IFRAME elements, you will need to do it this way:

<!--IUB-COOKIE-BLOCK-START-->
      <iframe src="...
      <img src="...
<!--IUB-COOKIE-BLOCK-END-->

To stop automatic parsing/replacing the iframe/scripts that contain a defined src:

<!--IUB-COOKIE-BLOCK-SKIP-START-->
      <script type="text/javascript">...</script>
<!--IUB-COOKIE-BLOCK-SKIP-END-->

Shortcodes are available for elements installed directly within WordPress posts (as opposed to elements integrated at the template level – for example, footer.php):

[iub-cookie-policy]
[/iub-cookie-policy]

iubenda and Google AMP – How to collect cookie consent in WordPress

If you’re using or planning to use Google’s Accelerated Mobile Pages (AMP) to load your web pages faster on mobile, you might be wondering how to set up your WordPress site in a way that allows you to collect cookie consent and avoid penalties. It requires some work, but luckily, iubenda can help: in fact, our All-in-one compliance plugin for WordPress is fully compatible with AMP.

For a step-by-step guide (complete with sample codes, a demo, and WordPress tips) and more information on how to block cookies before user consent on AMP, read How to integrate iubenda Privacy Controls and Cookie Solution with Google AMP (WordPress method included).

AMP and “templates” folder permissions

You’ve enabled the Google AMP support, but got an error message when you auto-generate the AMP configuration file? The cause is a problem with the “templates” folder permissions. Here’s how to fix it:

  1. Through your FTP client, enter the (previously uploaded) “iubenda-cookie-law-solution” folder and create (if missing) a subfolder called “templates” Templates folder (iubenda WordPress plugin)
  2. Set 664 permissions for the “templates” folder (the “Get info/Edit permissions” option is usually available via right click) Templates folder permissions (iubenda WordPress plugin)
  3. Repeat the “Google AMP support” enable procedure and save Google AMP support options (iubenda WordPress plugin)

Further information

For API calls and xmlrpc we suggest the following parameter ?iub_no_parse=1: this will place the iubenda script in a deactivated state and therefore avoids all parsing/replacing operations.

Privacy and Cookie Policy

Our plugin automatically synchronizes the privacy and cookie policy you set up with our generator without any code copypasting.

To start the configuration, click the Configure button under Privacy and Cookie Policy.

Then, click on “Setup your privacy and cookie policy on iubenda.com

pcp-configuration

This will take you to the Privacy and Cookie policy generator on iubenda.com. There, you can set up and edit your policy.

💡 Any changes you make on the generator automatically reflect your WordPress site’s privacy and cookie policy. So, when you’re done configuring your documents on iubenda.com, you can return to the plugin, click on Save Settings, and your privacy and cookie policy will be updated!

See this guide if you need help setting up your privacy policy in your iubenda dashboard.

We also provide some integration options: you can choose the button style and position. If you select the “Add to the footer automatically” option, the widget will be automatically displayed in the footer of every page of your WordPress site.

pcp-integration

Otherwise, if you want to customize the button’s position, by selecting the “Integrate manually” option, you’ll find the code to copy and ready to be used.

Manual Integration for Elementor Users

If you see the alert:

It seems you are using Elementor plugin, please use Elementor theme builder to add the iubenda legal widget manually to the footer” or “❗We were not able to add a ‘Legal’ widget/block to the footer as your theme is not compatible, you can position the ‘Legal’ widget/block manually from here

—either at the end of the setup wizard or in the Integration section of the Privacy and Cookie Policy Configurator—it means your theme isn’t fully compatible with our auto-adding feature. In that case, follow these clear steps to manually add the iubenda Legal Widget using Elementor:

  1. Open Your Footer Template:: In your WordPress dashboard, go to Templates and open the Footer template with Elementor.
  2. footer-elementor
  3. Find the iubenda Legal Widget: In the Elementor panel on the left, scroll or search for the iubenda Legal Widget.
  4. Drag and Drop the Widget: Click on the widget, then drag it into the footer area where you want your Privacy Policy and Cookie Policy links to appear.
  5. drag-elementor-iubenda
  6. Save and Publish: Once you’re satisfied with the placement, click Update to make the changes live on your site, the Privacy Policy and Cookie Policy links will appear automatically in your footer.

This “semi-automatic” procedure ensures that your legal links are added correctly, even if your theme is not fully compatible with the auto-adding feature.

Consent Database

Our All-in-One WordPress plugin also allows you to record, review, and maintain comprehensive GDPR records of consent for your web forms. The plugin detects and identifies all supported forms that are embedded in the website like Contact Form 7, WP Forms, WordPress comment, Elementor Forms, and WooCommerce and offers a super easy mapping of checkout forms.

To start, activate the Consent Database on iubenda.com in your iubenda dashboard and paste the API key where requested.

consent

Then, you’re ready to configure your Consent Database, following this complete guide.

Once you’re done, remember to click on Save settings at the bottom right of the page.

Terms and Conditions

With the All-in-One WordPress plugin, you can also manage and integrate your Terms and Conditions documents into your WordPress site.

To start, activate and configure your Terms and Conditions on the iubenda website. You can follow our step-by-step guide to the generation here.

Then, paste the embedding code and choose from the integration preferences provided.

t&c-configuration

Once you’re done, remember to click on Save settings at the bottom right of the page.

Further information

We often provide updated versions of our plugin, which are unstable during the testing phase as Beta versions are.

To install a Beta version of the plugin, the first thing to do is install an external plugin called “WP Rollback”, which allows you to select an unofficial version of our plugin.

WP Rollback installation

Please note: WP Rollback requires a WordPress version above 4.0.

As for other plugins, you can install WP Rollback by accessing the Plugin area in your WordPress admin panel and clicking on “Add new”; from here, you can search for “WP Rollback” and install it.

After the installation and activation, it will be necessary to go back to the page on which all the installed plugins are listed. Here you’ll notice that “Rollback” will have appeared next to every entry.

All that needs to be done now is to look for the “iubenda Privacy Controls and Cookie Solution” plugin and click on the “Rollback” entry. Here you’ll find all the different versions of the plugin; the currently used version will be labeled “installed version”, while the Beta versions will be marked as such.

To install and test the Beta version of the plugin, click on the Beta entry you wish to use. This will cause the current version of the Plugin to be overwritten by the Beta version; to revert the process, the same process will have to be undertaken, the difference being the selecting of the previous stable version and not the Beta one.

To signal a bug, please email us and provide a clear and detailed description of the problem.

Attaching the debug information from WordPress along with your support request is always helpful. To access the debug information, open the WordPress installation folder and look for the file wp-config.php.

Once inside, please look for the following line:

define('WP_DEBUG', false);

Modify it to:

define('WP_DEBUG', true);

Once the file is saved, open a page on your WordPress, and the debug information will start to appear. Keep our plugin active and send us any errors or messages WordPress shows.

New Feature: WP Consent API Integration

The iubenda WordPress plugin is now fully compatible with the WP Consent API! This integration enhances the plugin’s ability to work seamlessly with other consent management plugins that also support the WP Consent API, ensuring better compliance with privacy regulations.

What is WP Consent API?

The WP Consent API is a plugin that standardizes how consent information is communicated between different plugins. By using the WP Consent API, plugins can register and read the current consent category in a uniform way. This enables consent management plugins like iubenda to interact smoothly with other plugins, improving overall compliance with privacy laws.

How to Enable WP Consent API in iubenda Plugin

To enable WP Consent API integration in the iubenda plugin, follow these simple steps:

  1. Install and Activate the WP Consent API Plugin
    • In your WordPress dashboard, navigate to Settings → Plugins → Add New → search for WP Consent API and Activate the plugin.
  2. Enable WP Consent API in iubenda Plugin
    • In the iubenda plugin dashboard, go to Privacy Controls and Cookie Solution → Configure.
    • Ensure the checkbox (Integrate with WP Consent API (recommended)) for WP Consent API is visible and enabled. This will allow the iubenda plugin to work seamlessly with the WP Consent API.
wp consent api

Troubleshooting

Once everything is configured, you can verify the integration by checking the browser console for the expected behavior. There, you should see that the WP Consent API is correctly reading the consent signal for every purpose. You can also refer to the video below for a demonstration of how the integration works.

wp consent api

All-in-One Compliance Plugin

Download the WordPress plugin

Read the changelog

⚠ Caution

After installation, please be sure to set-up prior blocking, as this is legally mandatory under EU Law. You can find various methods of prior blocking along with full instructions in this guide.

See also

The post iubenda All-in-one Compliance – WordPress plugin appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution – Joomla! Plugin Installation Guide https://www.iubenda.com/en/help/1323-cookie-solution-joomla-plugin-installation-guide/ Sat, 11 Jun 2016 16:30:14 +0000 http://help.iubenda.com/?p=1323 The Joomla! plugin by iubenda allows you to automate the implementation of the cookie law rules, drastically reducing the necessity for direct interventions in the site’s code. Caution The plugin is downloadable directly from the official Joomla! Extensions Directory The plugin requires Joomla! 2.5 or above The plugin works better with versions of PHP 5.3 […]

The post Privacy Controls and Cookie Solution – Joomla! Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

The Joomla! plugin by iubenda allows you to automate the implementation of the cookie law rules, drastically reducing the necessity for direct interventions in the site’s code.

Caution
  • The plugin is downloadable directly from the official Joomla! Extensions Directory
  • The plugin requires Joomla! 2.5 or above
  • The plugin works better with versions of PHP 5.3 or later
iubenda Cookie Solution for Joomla!

Functionality

  • The plugin automatically adds the iubenda code to all the pages of a site (to the HEAD section).
  • Allows you to automatically or manually block scripts that can install cookies prior to consent, without the need of direct intervention on the code.
  • Asynchronously re-activates cookie scripts once consent is collected.
  • Handles the display of the cookie banner/consent banner and cookie policy, allowing you to fully customize the banner to match the look and colors of your site if needed.
  • Saves user preferences about the use of cookies and displays a clean page (without banner) to users who have already provided their consent.
  • Integrates with IAB’s Transparency and Consent Framework.
  • Features an easy-to-use interface for entering custom scripts and iframes.
  • Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised.
  • It supports the auto-assignment of categories when blocking scripts.
  • The remote configuration feature ensures that all changes made in the configurator are automatically applied to your website, eliminating the need to re-embed the code.
  • AdRoll
  • AddThis widgets
  • Bing
  • CodePen
  • Criteo
  • Disqus
  • Elevio
  • Facebook Comments
  • Facebook widgets
  • Freshchat
  • Google AdSense
  • Google Analytics
  • Google Maps
  • Google ReCaptcha
  • Google Site Search
  • Google Tag Manager
  • Google oAuth
  • Google+ widgets
  • Headway
  • Instagram widgets
  • Kissmetrics
  • LinkedIn widgets
  • Mixpanel
  • Neodata
  • Olark
  • Optimizely
  • Outbrain
  • PayPal widgets
  • Pingdom
  • Pinterest widgets
  • Segment
  • ShareThis widgets
  • Twitter widgets
  • UserVoice
  • Vimeo
  • YouTube

Instructions

If you’re installing the plugin for the first time, jump directly to the installation instructions here.

Otherwise, if you’ve previously installed an older version of the plugin directly from this site, you can update to the latest version of the plugin by following the steps below.

  1. First, delete the old version of the plugin — Click on Extensions > Manage, select the plugin and click on the Uninstall button at the top of the section.
  2. Go to the official Joomla! Extension Directory here and download the plugin.
  3. Install by following the installation steps below.

Installation

  • Download the free plugin here.
  • Access your Admin panel (http://example.com/admin123/) and log in
  • Go to your Extensions menu that is on the top of the screen in the Admin panel and click on Manage > Install
  • Drag and drop file zipped iubenda plugin file or click Browse for file and select the iubenda file from your computer.

Activation

  • Click on Extensions > Manage > Manage;
  • Search “iubenda” and enable the plugin.

How to add the cookie banner/consent banner and modify settings

  • Click on the item Extensions > Plugins;

  • Search “iubenda” and click on the plugin name (you can see what the interface looks like below):

    Cookie Solution - Joomla! plugin

  • Copy your Privacy Controls and Cookie Solution code from the Privacy Controls and Cookie Solution embed section of your iubenda account Embed Cookie Solution (If you haven’t already generated your Privacy Controls and Cookie Solution code within your iubenda account, you can read more about how to do that here: introduction to the iubenda Privacy Controls and Cookie Solution)

  • Click on Settings, paste that code into the plugin form and save: Cookie Solution - Joomla! plugin (Being PHP native, we recommend the primary, faster option for the parsing engine. If you’re experiencing some issues, try with the alternative based on a custom HTML DOM class)

Starting from your Joomla dashboard select the System icon on the left of your screen.

Next, find the “manage” menu and select Extensions.

In the search bar at the top of your screen type in “iubenda” and press the enter button on your keyboard.

After that, click on the X to the left of “iubenda Privacy Controls and Cookie Solution”.

That’s it! You’ve successfully activated your iubenda Privacy Controls and Cookie Solution on Joomla! 

How to add the cookie banner/consent banner and modify settings

Let’s start by copying your Privacy Controls and Cookie Solution code from the Privacy Controls and Cookie Solution embed section of your iubenda account. Under the title ‘Privacy Controls and Cookie Solution’ in your dashboard select the <> EMBED button.

Next, under the title ‘Embed the banner’, click on the COPY button on the right side of your code.

(If you haven’t already generated your Privacy Controls and Cookie Solution code within your iubenda account, you can read more about how to do that here: introduction to the iubenda Privacy Controls and Cookie Solution).

Then head over to your Joomla dashboard select the System icon on the left of your screen. 

Next, find the “manage” menu and select Plugins.

Search “iubenda” using the search bar at the top and press the enter button on your keyboard. After that, click on the plugin name “iubenda Privacy Controls and Cookie Solution”.

Next, click on the Settings menu next to the plugin menu at the top of your screen.

Scroll down till you find ‘iubenda code’ and paste your Privacy Controls and Cookie Solution code from your iubenda dashboard into the text box.

Being PHP native, we recommend selecting the primary, faster option for the parsing engine. If you’re experiencing some issues, try with the alternative based on a custom HTML DOM class.

Then, click on save & close in the top left of your screen and you’re done! 

Use

Once configured, the plugin will begin to show the banner on which your cookie policy will be shown/linked to users that visit your site for the first time without the need for any other further configurations. The plugin will also recognize and automatically detect and block the cookies indicated in the above block-list, that are present on your site.

Important

Our Joomla! extensions automatically block scripts that are generated on the server side (therefore returned by PHP by Joomla). Scripts that are inserted into the page via JavaScript after the loading process of that page are not and cannot be blocked automatically.

These scripts can be blocked by entering the source into the Custom Script boxes in the plugin console or by using the manual wrapping method illustrated in the example below and (in more detail) in this help post

Blocking custom scripts from within the console

The Custom Scripts field makes it easy for you to block scripts inserted into the page directly from within the plugin console. This greatly reduces the need for direct edits to the site’s code.

Here’s how to do it:

  • In your admin panel, go to Extensions > Plugins.
  • Next, search “iubenda”, click on the plugin name then the Settings tab at the top.
  • Scroll down to find the Custom scripts and Custom iframes fields at the bottom of the page.Joomla custom and iframe scripts fields
  • Enter your script or iframe sources as needed, assign the category (optional), and click the Save & Close button at the top of the page.

Usage Examples

Using these fields are pretty straightforward. Simply enter the script or iframe src attribute you’d like to block.

Script

If you wanted to block a social button (which inserts scripts into the page via JavaScript), you’d simply need to enter the script source, e.g. connect.socialwebsite.net/en_US/track.js into the scripts field.

iframe

Let’s say you wanted to block scripts inserted into the page via the following iframe

<iframe width="1280" height="720" src="https://www.videowebsite.com/embed/xxFhMChxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

What you’ll need to enter into the iframe field would be videowebsite.com/embed/ as this is the actual source of the scripts. Be careful NOT to enter the component id (videowebsite.com/embed/xxFhMChxx) to ensure that all scripts coming from the actual source are blocked.

Manual Use (wrapping method)

This method requires you to directly modify your site’s code. You’ll need to go into the relevant section of your site’s code and add the scripts to be blocked as explained below.

Here’s an example of how to make the plugin manually work for a Social button (which inserts scripts into the page via JavaScript).

<!--IUB-COOKIE-BLOCK-START-->
<script>
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s);
        js.id = id;
        js.src = "//connect.socialwebsite.net/en_US/sdk.js#xfbml=1&version=v2.3&appId=808061959224601";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'socialwebsite-jssdk'));
</script>
<!--IUB-COOKIE-BLOCK-END-->

If there are HTML / IMG / IFRAME elements, you will need to do it this way:

<!--IUB-COOKIE-BLOCK-START-->
      <iframe src="...
      <img src="...
<!--IUB-COOKIE-BLOCK-END-->

If you’ve enabled the per-category consent feature you’ll need to assign the purpose. Resuming the social button example, being part of the “Experience” purpose (id 3):

<!--IUB-COOKIE-BLOCK-START-PURPOSE-3-->
<script>
    ...
</script>
<!--IUB-COOKIE-BLOCK-END-PURPOSE-3-->

To stop automatic parsing/replacing the iframe/scripts that contain a defined src:

<!--IUB-COOKIE-BLOCK-SKIP-START-->
      <script type="text/javascript">...</script>
<!--IUB-COOKIE-BLOCK-SKIP-END-->
⚠ Caution

After installation, please be sure to set-up prior blocking, as this is legally mandatory under EU Law. You can find various methods of prior blocking along with full instructions in this guide.

See also

The post Privacy Controls and Cookie Solution – Joomla! Plugin Installation Guide appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Blocking Cookies Prior to Consent with the PHP Class https://www.iubenda.com/en/help/1976-php-class-blocking-cookies/ Sat, 11 Jun 2016 16:00:18 +0000 http://help.iubenda.com/?p=1976&lang=en The usage of the PHP class is only recommended for advanced users given that the procedure may require some customization depending on the site and the CMS utilized. Also, keep in mind that JavaScript is required to visualize the banner and cookie policy. This class allows you to scan a page in PHP and run […]

The post Blocking Cookies Prior to Consent with the PHP Class appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

The usage of the PHP class is only recommended for advanced users given that the procedure may require some customization depending on the site and the CMS utilized. Also, keep in mind that JavaScript is required to visualize the banner and cookie policy.

This class allows you to scan a page in PHP and run the automatic blocking of scripts mentioned in this document. You can access the class via direct download or Packagist.

Here is an example of the PHP class integration:

[git:pre_php-code@https://github.com/iubenda/cookie-law-solution-codesnippets/blob/master/wordpress/cookie_law.php]

The iubenda_system method verifies if the page visitor consents to the use of cookies. If this is the case, the script returns the HTML provided as a parameter without taking any action such as parsing/replacing.

Simply copy your method into the PHP document and then call it with the following syntax iubenda_system("contenutohtml"); that will return the code.

  • Parsing/replacing the portions of code contained within <!--IUB-COOKIE-BLOCK-START--> and <!--IUB-COOKIE-BLOCK-END-->
  • Automatic parsing/replacing of iframe that contain defined src
  • Automatic parsing/replacing of scripts that contain defined src

These operations take place in accordance with the rules explained in this guide. We suggest that you consult the posts relating to the alteration of script, img and iframe tags.

  • AdRoll
  • AddThis widgets
  • Bing
  • CodePen
  • Criteo
  • Disqus
  • Elevio
  • Facebook Comments
  • Facebook widgets
  • Freshchat
  • Google AdSense
  • Google Analytics
  • Google Maps
  • Google ReCaptcha
  • Google Site Search
  • Google Tag Manager
  • Google oAuth
  • Google+ widgets
  • Headway
  • Instagram widgets
  • Kissmetrics
  • LinkedIn widgets
  • Mixpanel
  • Neodata
  • Olark
  • Optimizely
  • Outbrain
  • PayPal widgets
  • Pingdom
  • Pinterest widgets
  • Segment
  • ShareThis widgets
  • Twitter widgets
  • UserVoice
  • Vimeo
  • YouTube

Please note that at the moment the Privacy Controls and Cookie Solution is optimized to comply with very strict Italian implementation regulations (this can only improve compliance in other jurisdictions).

How to use the iubenda PHP class on a CMS like Magento or PrestaShop

To use the iubenda PHP class on Magento or PrestaShop you simply need to access the Magento/PrestaShop CMS file folder and follow the instructions below:

  • open the file index.php;
  • copy and paste require __DIR__ . "/iubenda.class.php"; after the first line;
  • still in the same location, add the simple_html_dom.php file which you can download here or using the button below;
  • finally, always at the same location, create a file called iubenda.cookies.js containing your Privacy Controls and Cookie Solution code.

Changelog and current version

See also

The post Blocking Cookies Prior to Consent with the PHP Class appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Cookie policy and Privacy Controls and Cookie Solution for multilingual websites https://www.iubenda.com/en/help/1180-cookie-policy-and-cookie-solution-for-multilingual-websites/ Sat, 11 Jun 2016 13:30:46 +0000 http://help.iubenda.com/?p=1180 The iubenda Privacy Controls and Cookie Solution is available in a multilingual version. You can therefore manage banner and cookie policy visualization in US English as well as in the other languages included in the generator (UK English, Italian, Spanish, Dutch, French, German, Russian, Portuguese, Brazilian Portuguese, Danish). Here’s how: Access your dashboard. Select the […]

The post Cookie policy and Privacy Controls and Cookie Solution for multilingual websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The iubenda Privacy Controls and Cookie Solution is available in a multilingual version. You can therefore manage banner and cookie policy visualization in US English as well as in the other languages included in the generator (UK English, Italian, Spanish, Dutch, French, German, Russian, Portuguese, Brazilian Portuguese, Danish).

Here’s how:

  1. Access your dashboard.
  2. Select the privacy policy for which you want to activate the multilingual Privacy Controls and Cookie Solution ([Your website] > Privacy and Cookie Policy > Edit) and click “Activate cookie policy” on the bottom right:Activate cookie policy
  3. Now, go back to the site flow/overview page by clicking on the “Manage and Embed” link above your website name. You will be provided with a code (for the Privacy Controls and Cookie Solution) and a link (for the cookie policy):
    • The Privacy Controls and Cookie Solution code snippet must be placed on every page of your website, within the <head> tag as the first element.
      Cookie Solution integration
    • You can choose whether to insert the cookie policy link on your website (it is entirely optional, because a link to the cookie policy is automatically inserted in the privacy policy created with our service).
      Cookie policy integration
Note
  • In WordPress, other languages can be managed through the WPML plugin.

See also

The post Cookie policy and Privacy Controls and Cookie Solution for multilingual websites appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Use the Privacy Controls and Cookie Solution in a Multilingual WordPress Site https://www.iubenda.com/en/help/1209-how-to-use-the-cookie-solution-in-a-multilingual-wordpress-site/ Sat, 11 Jun 2016 13:00:52 +0000 http://help.iubenda.com/?p=1209 To manage multilingual sites with WordPress, you can use plugins like WPML or Polylang. They allow you to create multiple language versions of your site. Here’s how: You must first generate the iubenda code that will output the banner to the site by following the instructions in this guide. Each language has its own dedicated […]

The post How to Use the Privacy Controls and Cookie Solution in a Multilingual WordPress Site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
To manage multilingual sites with WordPress, you can use plugins like WPML or Polylang. They allow you to create multiple language versions of your site. Here’s how:

  1. You must first generate the iubenda code that will output the banner to the site by following the instructions in this guide.

  2. Each language has its own dedicated code snippet that must be inserted into the site’s html, as described in detail in this guide. You can enable your cookie policy on the policy edit page, on the bottom right: [Your website] > Privacy and Cookie Policy > Edit

    Activate cookie policy

    The correct code is generated when you click on “Activate cookie policy”:

    Activate cookie policy
  3. Now, simply go to the Embed page by clicking on the “Manage and Embed” link above your website name. This will take you back to the site flow/overview page of your dashboard. Click on the <>Embed button under Privacy Controls and Cookie Solution to head to the embed section. Once there, you’ll find your banner embed code.

    If you’ve generated your policies in more than one language, there will be language tabs visible for each language you’ve activated for the policy. Each tab contains the code specific to the particular language of that policy:

    Cookie Solution language tabs

    Simply click on the tab for the language you want and copy the corresponding cookie banner/consent banner code.

  4. The code – which is similar to that in the example below – should be inserted in the <head> tag as the first element:

<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>
<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

As mentioned, each language has its own code, the main difference being the id it’s pointed at.

How to integrate the script of the iubenda cookie banner/consent banner with the WordPress plugin

You can use our WordPress plugin that automatically detects the multilingual plugin you’re using (WPML and Polylang) and offer forms to copy-paste the above iubenda scripts:

Custom integration

If you cannot use one of the multilingual plugins compatible with ours (namely WPML and Polylang), you will need to make some changes to the banner so that language switching can be applied. The changes you will see below are meant to inject the script in the correct language into the source code of your page, based on the “lang” attribute of the tag of the page in question, which typically indicates the page’s language.

Here are the steps you need to follow, starting with a test script. In your case, skip copying the Privacy Controls and Cookie Solution script below, as you can find it in your iubenda private area (navigate to personal area → open your site → click “EMBED” under “Privacy Controls and Cookie Solution”). After copying, proceed with the following modifications:

Test Script

<script type="text/javascript">
var _iub = _iub || [];
_iub.csConfiguration = {"askConsentAtCookiePolicyUpdate":true,"floatingPreferencesButtonDisplay":"bottom-right","perPurposeConsent":true,"siteId":2930987,"whitelabel":false,"cookiePolicyId":38875072,"lang":"en-GB", "banner":{ "acceptButtonDisplay":true,"closeButtonRejects":true,"customizeButtonDisplay":true,"explicitWithdrawal":true,"listPurposes":true,"position":"float-top-center","rejectButtonDisplay":true }};
</script>
<script type="text/javascript" src="https://cs.iubenda.com/autoblocking/2930987.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Modifications

The first modification to make is to insert, right at the beginning of our script, values that suggest the language change. The values in question are:

<script type="text/javascript">
var lang_id = document.getElementsByTagName('html')[0].getAttribute('lang').split("-")[0];
        site_id = 000001; // site_id from the iubenda integration code
    switch (lang_id) {
        case 'en':
            var policy_id = 000002; // policy_id from the iubenda integration code (EN)
            break;
        case 'it':
            var policy_id = 000003; // policy_id from the iubenda integration code (IT)
            break;
        // case 'other language' ...
    }

After adding the above script part, our banner script will look like this:

<script type="text/javascript">
var lang_id = document.getElementsByTagName('html')[0].getAttribute('lang').split("-")[0];
        site_id = 000001; // site_id from the iubenda integration code
    switch (lang_id) {
        case 'en':
            var policy_id = 000002; // policy_id from the iubenda integration code (EN)
            break;
        case 'it':
            var policy_id = 000003; // policy_id from the iubenda integration code (IT)
            break;
        // case 'other language' ...
    }
    
    var _iub = _iub || [];
_iub.csConfiguration = {"askConsentAtCookiePolicyUpdate":true,"floatingPreferencesButtonDisplay":"bottom-right","perPurposeConsent":true,"siteId":2930987,"whitelabel":false,"cookiePolicyId":38875072,"lang":"en-GB", "banner":{ "acceptButtonDisplay":true,"closeButtonRejects":true,"customizeButtonDisplay":true,"explicitWithdrawal":true,"listPurposes":true,"position":"float-top-center","rejectButtonDisplay":true }};
</script>
<script type="text/javascript" src="https://cs.iubenda.com/autoblocking/2930987.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

The numbers you see for “site_id” and “var policy_id” should be modified. You should insert:

  • The number related to “site_id,” which is always unique for each site, regardless of how many languages are activated
  • The numbers related to the policies activated in each language (cookiePolicyId parameter in the banner code). For each language, there is a corresponding “var policy_id”

You can find this information in your iubenda private area. For example, let’s say you have two scripts managing two different languages: Italian and English.

Italian:

English:

Once you have identified the values, you can proceed to modify them as follows:

<script type="text/javascript">
var lang_id = document.getElementsByTagName('html')[0].getAttribute('lang').split("-")[0];
        site_id = 2930987; // site_id from the iubenda integration code
    switch (lang_id) {
        case 'en':
            var policy_id = 38875072; // policy_id from the iubenda integration code (EN)
            break;
        case 'it':
            var policy_id = 51698593; // policy_id from the iubenda integration code (IT)
            break;
        // case 'other language' ...
    }
    
    var _iub = _iub || [];
_iub.csConfiguration = {"askConsentAtCookiePolicyUpdate":true,"floatingPreferencesButtonDisplay":"bottom-right","perPurposeConsent":true,"siteId":2930987,"whitelabel":false,"cookiePolicyId":38875072,"lang":"en-GB", "banner":{ "acceptButtonDisplay":true,"closeButtonRejects":true,"customizeButtonDisplay":true,"explicitWithdrawal":true,"listPurposes":true,"position":"float-top-center","rejectButtonDisplay":true }};
</script>
<script type="text/javascript" src="https://cs.iubenda.com/autoblocking/2930987.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

If a new language is activated, you simply need to insert the following script part instead of "// case 'other language' ...", adding the name of the activated language in our portal and use the corresponding policy number.

case 'de':
            var policy_id = 11111084; // policy_id from the iubenda integration code (DE)
            break;

The last, but crucial, adjustment to make is to change three other parameters present in our main script (not in the modifications just made but in the script taken from our iubenda personal area):

* “siteId”
* “cookiePolicyId”
* “lang”

Instead of the default values, you need to insert these references:

* “siteId”: site_id
* “cookiePolicyId”: policy_id
* “lang”: lang_id

In the script, it’ll look like this:

<script type="text/javascript">
var lang_id = document.getElementsByTagName('html')[0].getAttribute('lang').split("-")[0];
        site_id = 2930987; // site_id from the iubenda integration code


    switch (lang_id) {
        case 'en':
            var policy_id = 38875072; // policy_id from the iubenda integration code (EN)
            break;
        case 'it':
            var policy_id = 51698593; // policy_id from the iubenda integration code (IT)
            break;
        // case 'other language' ...
    }
    
    var _iub = _iub || [];
_iub.csConfiguration = {"askConsentAtCookiePolicyUpdate":true,"floatingPreferencesButtonDisplay":"bottom-right","perPurposeConsent":true,"siteId":site_id,"whitelabel":false,"cookiePolicyId":policy_id,"lang":lang_id, "banner":{ "acceptButtonDisplay":true,"closeButtonRejects":true,"customizeButtonDisplay":true,"explicitWithdrawal":true,"listPurposes":true,"position":"float-top-center","rejectButtonDisplay":true }};
</script>
<script type="text/javascript" src="https://cs.iubenda.com/autoblocking/2930987.js"></script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

After completing this final modification, the script can be inserted into the <head> tag of your site, as high as possible or even as the first value, or inside our plugin.

See below for another test script example with jQuery library. Additionally, we have created a video tutorial about configuring a multilingual banner, which you can access here.

<!-- replace 000001 with the site_id from your specific iubenda embed code -->
<!-- replace 000002 with the policy_id from your EN iubenda embed code -->
<!-- replace 000003 with the policy_id from your IT iubenda embed code -->

<script type="text/javascript">
    var lang_id = jQuery('html').attr('lang').split('-')[0],
        site_id = 000001; // site_id from iubenda embed code
    switch (lang_id) {
        case 'en':
            var policy_id = 000002; // policy_id from iubenda embed code EN
            break;
        case 'it':
            var policy_id = 000003; // policy_id from iubenda embed code IT
            break;
        // case 'other language code' ...
    }
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": lang_id,
        "siteId": site_id,
        "cookiePolicyId": policy_id,
        "banner": {
            "position": "top"
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

See also

The post How to Use the Privacy Controls and Cookie Solution in a Multilingual WordPress Site appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution changelog https://www.iubenda.com/en/help/1970-cookie-solution-changelog-2/ Fri, 10 Jun 2016 16:00:32 +0000 http://help.iubenda.com/?p=1970&lang=en View new changes and fixes for Privacy Controls and Cookie Solution delivery channels. More about current, beta and stable channels, how to change them and how to choose a specific version on this guide. Stay informed with the latest changelog updates Keep track of the Privacy Controls and Cookie Solution changes as soon as we […]

The post Privacy Controls and Cookie Solution changelog appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
View new changes and fixes for Privacy Controls and Cookie Solution delivery channels. More about current, beta and stable channels, how to change them and how to choose a specific version on this guide.

Stay informed with the latest changelog updates

Keep track of the Privacy Controls and Cookie Solution changes as soon as we release them on the beta channel, and receive a notification right in your inbox.

Unsubscribe anytime. For further information see our Privacy Policy.

1.94.0

BETA March 4, 2026

CURRENT March 11, 2026

  • We’ve added support for new custom color options, giving you more flexibility to match the banner design to your brand
  • We’ve fixed the background overlay size for Banner V2, ensuring it covers the full viewport correctly across different screen sizes
  • We’ve updated the banner wrapper size in the float-center position, improving layout consistency when the banner is displayed in centered mode
  • We’ve enhanced the handling of iframe and script unblocking, ensuring blocked elements activate more reliably after consent is collected
  • Bug fixes and minor improvements

1.93.0

BETA February 13, 2026

CURRENT February 19, 2026

STABLE March 19, 2026

  • We’ve aligned the US “adv” purpose with the Global Privacy Control (GPC) signal, in line with Sale and Sharing purposes
  • We’ve improved iframe activation behavior to better support lazy-loaded content, ensuring smoother interaction and more reliable consent handling
  • We’ve added support for headless mode to run without displaying the UI
  • We’ve added the onPreferenceChange callback, triggered when core purposes (1–5) change, returning both the previous and updated preference states
  • We’ve expanded bot detection by adding general keywords for improved identification
  • We’ve enhanced analytics support when only US privacy legislation applies, ensuring consistent tracking of page views and consent interactions
  • We’ve updated bot detection to recognize the “Sansec Security Monitor” user agent, preventing analytics requests from this crawler
  • We’ve added support for using the Fetch API for analytics requests, improving reliability while maintaining compatibility with older browsers
  • We’ve refactored storage ID handling to use the merged siteId and cookiePolicyId configuration for more consistent behavior
  • Bug fixes and minor improvements

1.92.0

BETA January 13, 2026

CURRENT January 20, 2026

STABLE March 9, 2026

  • We’ve enhanced the accessibility of the Newsletter Opt-in Booster Widget
  • Bug fixes and minor improvements

1.91.0

BETA November 26, 2025

CURRENT November 27, 2025

STABLE January 13, 2026

  • We’re rolling out a new design for the Privacy Controls and Cookie Solution to deliver a more consistent, accessible, and user-friendly experience across all devices
  • We’ve added the useUIModule option to the Privacy Controls and Cookie Solution configuration, making it easier to enable the new interface directly from your setup
  • Bug fixes and minor improvements

1.90.0

BETA November 04, 2025

CURRENT November 11, 2025

STABLE December 09, 2025

  • We’ve updated the IAB TCF library in preparation for TCF 2.3 support, ensuring continued compatibility while maintaining full functionality with TCF 2.2
  • Bug fixes and minor improvements

1.89.0

BETA October 29, 2025

CURRENT November 04, 2025

STABLE December 02, 2025

  • The new banner is now fully supported and functional on legacy browsers, ensuring broader compatibility across older environments
  • Bug fixes and minor improvements

1.88.0

BETA October 15, 2025

CURRENT October 23, 2025

STABLE November 19, 2025

  • We’ve introduced pagination on smaller screens for the banner, improving usability and readability on mobile devices
  • We’re working on adding support for TCF 2.3, which will become mandatory by February 1, 2026. Compatible versions will be released by the end of 2025
  • We’ve improved getPreferenceId() to return an ID from the main storage item when _iub_previous_preference_id is missing, ensuring more consistent preference retrieval
  • Bug fixes and minor improvements

1.87.0

BETA September 30, 2025

CURRENT October 07, 2025

STABLE November 04, 2025

  • We’ve added new default fields for the Accessibility Widget—backgroundColor, fillColor, position, offsetX, and offsetY—to ensure consistent configuration and improved customization
  • We’ve added API methods to easily save and restore all consent preferences, simplifying preference migration across sessions and platforms
  • Bug fixes and minor improvements

1.86.0

BETA September 02, 2025

CURRENT September 02, 2025

STABLE September 09, 2025

  • We’ve improved focus behavior on the banner to ensure keyboard navigation stays within the banner elements, enhancing accessibility and user experience
  • We’ve enabled state sharing between native apps and webviews to prevent duplicate cookie banners in hybrid app environments
  • Bug fixes and minor improvements

1.85.0

BETA August 20, 2025

CURRENT August 27, 2025

STABLE September 09, 2025

  • We’ve tightened language detection rules to improve accuracy and consistency across supported locales
  • We’ve improved contrast ratio in TCF text to meet accessibility standards
  • We’ve enabled the emitGtmEvents option directly from the GTM template, allowing event emissions based on consent within GTM setups
  • We’ve expanded the Accessibility Widget configuration options and added support for custom positioning and styling, making it easier to adapt the widget to your site’s layout
  • We’ve added support for publisher consents and legitimate interests with the new tcfPublisher configuration option
  • Bug fixes and minor improvements

1.84.0

BETA July 30, 2025

CURRENT July 30, 2025

STABLE September 02, 2025

  • Bug fixes and minor improvements

1.83.0

BETA July 25, 2025

CURRENT July 25, 2025

STABLE August 25, 2025

  • We’ve added the actionButtonsCloseLayer option to enable closing the layer on “Accept all” and “Reject all” actions, ensuring compliance with TCF requirements for equal ease of consent withdrawal
  • Bug fixes and minor improvements

1.82.0

BETA July 15, 2025

CURRENT July 22, 2025

STABLE August 19, 2025

  • We’ve added consentmode to the preferences-converter for improved consent management
  • We’ve introduced a new CS option banner.logoAltText, an optional string to specify the alt text for the logo, with the default being “logo”
  • We’ve added support for Microsoft UET inside the GTM template, enabling integration with Microsoft’s Universal Event Tracking
  • We’ve added the useCustomTrigger option to Accessibility Widget to manage the inclusion of the iubenda custom trigger in the accessibility snippet
  • Bug fixes and minor improvements

1.81.0

BETA June 19, 2025

CURRENT June 26, 2025

STABLE June 25, 2025

  • We’ve prepared the script to support the new unified Privacy Widget and Accessibility Widget experience
  • We’ve added googleConsentModeDataLayerName to allow customization of the Google Consent Mode dataLayer variable name
  • We’ve introduced the onWarningButtonClick callback, allowing clients to inject custom behavior when the warning button is clicked by their visitors, typically visible when there’s an issue with the iubenda’s subscription
  • Language autodetection now supports the xx_XX format, allowing better detection of languages when using an underscore as a separator
  • Bug fixes and minor improvements

1.80.0

BETA May 22, 2025

CURRENT May 29, 2025

STABLE June 26, 2025

  • Bug fixes and minor improvements

1.79.0

BETA May 14, 2025

CURRENT May 21, 2025

STABLE June 18, 2025

  • The Accessibility Widget is now integrated into the Privacy Controls and Cookie Solution configuration, allowing legacy users to activate it without adding new embedding snippets
  • We’ve added support for JEEG (unified snippet) in the GTM template, enabling a single unified snippet through GTM
  • Bug fixes and minor improvements

1.78.0

BETA May 12, 2025

CURRENT May 12, 2025

STABLE June 10, 2025

  • The GTM template now enables default consent actions only with an active flag, allowing to choose storage type (cookie or localStorage) and specify consent item names
  • Bug fixes and minor improvements

1.77.0

BETA March 26, 2025

CURRENT April 02, 2025

STABLE May 06, 2025

  • We’ve made several accessibility improvements to optimize the recently launched Accessibility Solution, helping websites comply with the European Accessibility Act before the June 28th deadline
  • We’ve added a focus trap to the banner, enabling users to navigate the underlying page without closing the banner
  • Bug fixes and minor improvements

1.76.0

BETA February 27, 2025

CURRENT March 06, 2025

STABLE April 03, 2025

  • Bug fixes and minor improvements

1.75.0

BETA January 29, 2025

CURRENT February 10, 2025

STABLE February 26, 2025

  • We’ve added the getPreferenceId method, allowing users to easily retrieve their consent ID directly from the UI
  • We’ve enhanced the Consent Preference Log by storing the previous consent ID, allowing users to retrieve the full history of preferences associated with a consent ID
  • The isGoogleNonPersonalizedAds() API method is now deprecated
  • Bug fixes and minor improvements

1.74.0

BETA January 16, 2025

CURRENT January 28, 2025

STABLE February 20, 2025

  • Bug fixes and minor improvements

1.73.0

BETA January 16, 2025

CURRENT January 28, 2025

STABLE February 20, 2025

  • We’ve added a disclosure to comply with updated TCF policies regarding the storage duration of consent choices for cookie name and expire time
  • We’ve applied the latest TCF translations in line with updates to the TCF texts and translations provided by IAB
  • We’ve added logs to indicate if consent has been invalidated (consent interval behavior) and to identify issues in the configuration
  • Bug fixes and minor improvements

1.72.0

BETA December 12, 2024

CURRENT December 16, 2024

STABLE January 13, 2025

  • We have implemented some improvements to cover accessibility standards and best practices, in particular:
    • Added focus on first element in second layer
    • Added aria-label or labelledby in second layer
    • Added role=region to banner container
    • Added .iub-sr-only to LangLink component
    • Added aria-hidden=true to ContinueWithoutAcceptButton component
    • Added .iub-sr-only CSS class and improve TCF components accessibility
    • Updated focus navigation in second layer
    • Added role button in banner links when cookiePolicyInOtherWindow is false
    • Improved accessibility of DropDown component
    • Removed aria-pressed
  • Bug fixes and minor improvements

1.71.0

BETA December 03, 2024

CURRENT December 12, 2024

STABLE January 07, 2025

  • We’ve implemented a custom code to trigger a popup when users have rejected the necessary purposes, giving them the option to update their consent preferences
  • We’ve improved the usability of the Rejection Recovery widget for a smoother user experience
  • Bug fixes and minor improvements

1.70.0

BETA November 26, 2024

CURRENT December 03, 2024

STABLE January 02, 2025

  • We’ve ensured the privacy widget stays in the correct position by introducing a setting that stores user preferences, even when remote configuration is enabled
  • We’ve increased the focus color contrast in dark mode for better visibility and accessibility
  • We’ve updated the mobile SDK to ensure the banner closes immediately after consent, preventing any delay or overlapping popups
  • We’ve added the tcfVendors field to the default configuration, eliminating the “tcfVendors not recognized” warning. The field is now properly included in the settings.
  • Bug fixes and minor improvements

1.68.0

BETA October 15, 2024

CURRENT October 22, 2024

STABLE November 21, 2024

  • We’ve added a configuration option invalidateConsentBefore (“YYYY-MM-DD”, milliseconds from epoch, default null) to invalidate consents collected before a specific date. You can also provide a date range using invalidateConsentInterval with startDate and endDate to target consents within that period
  • We’ve enhanced the AMP system for greater reliability and performance
  • We’ve implemented support for Microsoft’s update to consent signal enforcement for end users
  • Bug fixes and minor improvements

1.67.1

BETA September 19, 2024

CURRENT September 26, 2024

STABLE October 24, 2024

  • Added support to additional purposes
  • Bug fixes and minor improvements

1.66.1

BETA September 10, 2024

CURRENT September 17, 2024

STABLE October 23, 2024

  • We’ve added the option to embed the Newsletter Opt-in Booster widget directly on the page with inline positioning. Now, you can place the widget within a specific section of your page. Additionally, it’s now possible to customize the banner with custom colors, including the main background, text color, button background, and button text color, offering more control over the widget’s appearance
  • We’ve improved language configuration and automatic detection. The system can automatically detect the user’s language and adjust settings accordingly, applying only to the languages that have been enabled by the user
  • We’ve added more callbacks for the Mobile SDK, similar to those available on the web version. The new callbacks include: onStartupFailed, onError, onFatalError, onBannerShown, on2ndLayerShown, and onPreferenceFirstExpressed
  • We’ve added Finnish, Hungarian, Latvian, Lithuanian, Slovenian, Estonian, Croatian, and Slovak as available languages for the Privacy Controls and Cookie Solution
  • Bug fixes and minor improvements

1.65.1

BETA August 01, 2024

CURRENT August 13, 2024

STABLE September 06, 2024

  • We’ve added Finnish, Hungarian, Latvian, Lithuanian, Slovenian, Estonian, Croatian, and Slovak to the supported languages
  • We’ve added a verbose logging mode to help verify Google Consent Mode (CoMo) implementation
  • Bug fixes and minor improvements

1.64.0

BETA July 18, 2024

CURRENT July 30, 2024

STABLE August 26, 2024

  • We’ve added support to localstorage in safe-tcf-v2, this means now the Safe TCF script is compatible with both localStorage and cookies
  • We’ve ensured that TCF and Google advertising partners toggles act independently in the second layer, even when additional consent mode is enabled
  • Added Norwegian to the supported languages
  • Bug fixes and minor improvements

1.63.0

BETA July 12, 2024

CURRENT July 22, 2024

STABLE August 20, 2024

  • We’ve optimized the loading of the Google Additional Consent Mode vendors list, ensuring the vendors are fully loaded when opening the widget
  • We’ve added the ability to apply custom styles to the Newsletter Opt-in Booster widget, enhancing UI customization options
  • We’ve improved some markup on the templates that could impact SEO
  • Bug fixes and minor improvements

1.62.0

BETA June 19, 2024

CURRENT June 26, 2024

STABLE July 24, 2024

  • To meet Google’s requirements, we’ve ensured that the developer ID for iubenda is set as early as possible
  • We’ve added a configuration to support integration with Google’s TCData.enableAdvertiserConsentMode flag, allowing Google to infer consent settings for ad storage and personalization from the TC string
  • We’ve changed the domain for analytics requests from hits-i.iubenda.com to idb.iubenda.com, improving the reliability and performance of analytics data collection
  • We’ve implemented a check for localStorage availability. If localStorage is not available, the Newsletter Opt-in Booster widget will not load or will be disabled to prevent potential issues
  • We’ve added _iub.csConfiguration.storage.autoSync to enable automatic synchronization of stored preferences between cookies and local storage. When set to true, preferences are switched seamlessly between cookie and local storage
  • Bug fixes and minor improvements

1.61.0

BETA May 16, 2024

CURRENT May 23, 2024

STABLE June 20, 2024

  • We’ve added googleUrlPassthrough and googleAdsDataRedaction to allow customization for Google Consent Mode
  • We’ve added _iub.csConfiguration.emailMarketing.showFromPageView to make the Newsletter Opt-in Booster widget display timing configurable based on the number of page views
  • We’ve improved support for Google Additional Consent (GAC) v2 in mobile
  • Bug fixes and minor improvements

1.60.0

BETA April 19, 2024

CURRENT April 26, 2024

STABLE May 23, 2024

  • We’ve added the _iub.csLangConfiguration object, useful to specify all language-specific configuration options, such as cookiePolicyId, allowing the system to automatically determine which options to use based on the language settings
  • We enhanced the INP Core Web Vitals score for preferences in the second layer
  • We’ve added the setPreferences API method to granularly store user preferences, including the option to hide the banner
  • Bug fixes and minor improvements

1.59.0

BETA April 10, 2024

CURRENT April 16, 2024

STABLE May 14, 2024

  • We’ve added showTotalNumberOfProviders and totalNumberOfProviders parameters to manage and display the number of third parties involved in data processing
  • Added Bulgarian, Romanian, and Catalan to the supported languages
  • Bug fixes and minor improvements

1.58.0

BETA April 02, 2024

CURRENT April 09, 2024

STABLE May 08, 2024

  • We enhanced the user experience and increased performance scores on tools like Google PageSpeed and GTMetrix
  • We enhanced the INP Core Web Vitals score on ‘X’ button click
  • Czech has been added to the list of supported languages
  • We updated IubendaCookieSolution.getPreferences() to include the gppString attribute when the Global Privacy Platform (GPP) is active
  • Bug fixes and minor improvements

1.57.0

BETA March 04, 2024

CURRENT March 11, 2024

STABLE April 08, 2024

  • With the enforcement of TCF 2.2, when TCF is enabled, only the latest 2.2 version will be available
  • Currently, we support only precise geolocation (sd8) as the sensitive data category. This means all other purposes currently handled, specifically sd5 and sd9, will be deprecated
  • Bug fixes and minor improvements

1.56.0

BETA February 08, 2024

CURRENT February 26, 2024

STABLE March 13, 2024

  • The SDK now supports a new action, open_pref, in mobile.htm, allowing for the opening of the preferences panel with pre-selected purposes
  • We’ve added _iub.cs.api.openAdvertisingPreferences() to display the TCF panel with purposes highlighted and vendors collapsed, enhancing user consent interaction. Note that if enableTcf is set to false, the method defaults to opening the Cookie Policy panel
  • Bug fixes and minor improvements

1.55.0

BETA January 22, 2024

CURRENT January 29, 2024

STABLE February 25, 2024

  • We’ve implemented the new Google Additional Consent (GAC) v2
  • We’ve added a new configuration parameter: banner.howToWithdraw, when false, the text “by accessing the preferences panel” is omitted from the banner in all languages. If true, the text is displayed
  • When banner.totalNumberOfProviders is present and > 0, it is possible to display the total number of providers at the beginning of the banner text, “We and “number of providers” selected third parties.”
  • Bug fixes and minor improvements

1.54.0

BETA January 04, 2024

CURRENT January 11, 2024

STABLE February 08, 2024

  • We’ve updated TCF vendor counting on the second layer to differentiate the vendors number based on the legal basis they are relying on
  • Bug fixes and minor improvements

1.53.2

BETA November 27, 2023

CURRENT December 12, 2023

STABLE January 09, 2024

  • We’ve implemented the new Google Consent Mode v2 specification, including mapping for GDPR purposes and US law purposes. Now our Google Consent Mode plugin manages these new settings
  • We’ve added a new option to store cookies using siteId
  • We enhanced the INP Core Web Vitals score
  • We’ve added support for Google’s Additional Consent Mode on Accelerated Mobile Pages (AMP)
  • We’ve added the banner.ownerName parameter to enable the substitution of “We” at the beginning of the sentence “We and selected third parties use cookies….” in the banner text with another string, typically the company name.
  • Bug fixes and minor improvements

1.52.2

BETA October 23, 2023

CURRENT October 30, 2023

STABLE November 27, 2023

  • We’ve added a new parameter called banner.showTitle to provide users the ability to select if they want to show or hide the title in the Privacy Controls and Cookie Solution Configurator
  • We’ve added support for Google’s Additional Consent Mode for mobile
  • We’ve added support for US law purposes in Google Consent Mode, ensuring that US user preferences are also considered.
  • Bug fixes and minor improvements

1.51.0

BETA September 18, 2023

CURRENT October 12, 2023

STABLE October 23, 2023

  • The _iub.cs.api.openPreferences() function with acceptPurposes option is now restricted to our Ultimate plan
  • For users not subscribed to the Ultimate plan, the use of the _iub.cs.api.acceptAll() function is now restricted. This feature is available exclusively for our Ultimate plan users
  • Starting September 30th, GPP 1.1 will become the new standard version. This new version isn’t compatible with GPP 1.0, To make the transition smoother, we’ve added a gppVersion setting option that lets you choose between versions
  • We’ve updated the onPreferenceFirstExpressedCallback function to better handle per-purpose consent settings. If you’re using per-purpose consent, the function now merges general and US-specific consent purposes
  • Bug fixes and minor improvements

1.50.1

BETA August 07, 2023

CURRENT August 16, 2023

STABLE August 16, 2023

  • We’re getting ready to support version 2.2 of IAB’s TCF
  • We now support the ability to add content in place of pre-blocked scripts other than iframes (e.g. for scripts or generic content as well)
  • Bug fixes and minor improvements

1.49.3

BETA June 28, 2023

CURRENT July 3, 2023

STABLE August 03, 2023

  • We’ve added a new option called usPreferencesWidgetDisplay to handle the US widget positioning
  • We’ve added a new API method called rejectAll() to reject everything when it’s invoked
  • We’ve added new settings to help you comply with the Swiss Federal Act on Data Protection (nFADP)
  • It is now possible to store the TCF preferences on localStorage instead of cookies, so to avoid having it transmitted to the server on every HTTP request
  • We’ve added a new option called emitGtmEvents to allow GTM tags to be triggered just after the user gives consent
  • Bug fixes and minor improvements

1.48.0

BETA May 24, 2023

CURRENT May 29, 2023

STABLE June 22, 2023

  • Bug fixes and minor improvements

1.47.1

BETA May 22, 2023

CURRENT May 22, 2023

STABLE June 07, 2023

  • We have added a new TCF option called acceptTcfSpecialFeaturesWithAcceptBtn. If you set it to false, you can prevent the activation of TCF Special Features when users click the Accept button
  • The new localConsentDomainExact option lets you restrict cookie preferences to a specific domain, excluding its subdomains
  • Bug fixes and minor improvements

1.46.3

BETA March 30, 2023

CURRENT March 30, 2023

STABLE April 19, 2023

  • Now, when you exceed your plan’s page view/month limit, the cookie banner is replaced by an alert this means that you won’t be able to get visitors’ consent and release cookies. More about this here
  • As of March 1, it’s no longer possible to deactivate prior blocking via code or dashboard. This means that the “Prior blocking and asynchronous re-activation” (server side) and “Prior consent” (priorConsent parameter) options are always active for all channels
  • Bug fixes and minor improvements

1.45.1

BETA February 15, 2023

CURRENT February 15, 2023

STABLE March 15, 2023

  • Now you can show granular controls in the first layer of the cookie banner by setting the new showPurposesToggles banner option to true. This way, your visitors can quickly choose which categories of cookies to give consent to
  • We now support more HTML elements for manual tagging. Here’s the full list: iframe, video, audio, script, embed, img, object, link, picture, source
  • Bug fixes and minor improvements

1.44.8

BETA January 3, 2023

CURRENT January 3, 2023

STABLE January 19, 2023

  • We’ve added new settings to help you comply with the latest US privacy laws (CCPA/CPRA for California and VCDPA for Virginia)
  • We’ve added new themes to the cookie banner
  • Bug fixes and minor improvements

1.43.0

BETA November 23, 2022

STABLE December 21, 2022

  • The second layer of the cookie banner now always shows cookie category descriptions when LGPD applies
  • We’ve added a new option called preferenceCookie.tcfV2Name to allow renaming the TCF cookie
  • Bug fixes and minor improvements

1.42.4

BETA October 10, 2022

CURRENT October 20, 2022

STABLE November 2, 2022

  • consentOnContinuedBrowsing will be forced to false on November 21
  • When consentOnContinuedBrowsing is false and the close button is missing, acceptButtonDisplay is forced to “true”
  • The openPreferences() API method now supports an optional { acceptPurposes: [...] } parameter to open the second layer with preselected purposes
  • We’ve added a new API method called acceptAll() to accept everything when it’s invoked
  • For clarity, the “Save and Go Back” button in the second layer now looks and behaves like a “Back” button (no preference is saved)
  • Bug fixes and minor improvements

1.41.0

BETA August 17, 2022

CURRENT August 24, 2022

STABLE September 21, 2022

  • It is possible to show a “Continue without accepting” button by setting continueWithoutAcceptingButtonDisplay to true
  • To give the privacy widget a custom z-index, we’ve added the floatingPreferencesButtonZIndex option
  • Mobile users are now allowed to reject cookies only when the first layer of the cookie banner has been fully scrolled
  • We’ve added the callbacks on2ndLayerShown and on2ndLayerClosed which are triggered when the second layer opens or closes
  • Bug fixes and minor improvements

1.40.1

BETA July 25, 2022

CURRENT July 25, 2022

STABLE August 09, 2022

  • We now provide a Google Tag Manager custom template that simplifies the implementation of the default command, making it codeless and allowing the update command to take effect as early as possible in the tag firing process
  • We set the TCF cookie expiration to 12 months by default
  • We updated the behavior of the banner.explicitWithdrawal condition for the LGPD support
  • Bug fixes and minor improvements

1.39.1

BETA June 7, 2022

CURRENT June 13, 2022

STABLE July 11, 2022

  • We’re getting ready to support the LGPD
  • TCF preferences are now disabled when GDPR does not apply
  • We’ve updated the cookie banner text
  • We’ve modified the hover effect on the banner buttons for better accessibility
  • Bug fixes and minor improvements

1.38.0

BETA April 27, 2022

CURRENT May 9, 2022

STABLE June 6, 2022

  • We have updated the Brazilian Portuguese cookie banner text
  • We’ve made improvements for better supporting the compliance settings for the CCPA
  • Bug fixes and improvements (including better support for Google Consent Mode and i18n)

1.37.2

BETA March 17, 2022

CURRENT March 24, 2022

STABLE April 11, 2022

  • We have improved some accessibility features for full compliance with WCAG guidelines.
  • We have improved support for Google Consent Mode, avoiding compromising statistics in cases where anonymous statistical data can be collected regardless of user preferences
  • Bug fixes and other minor improvements

1.36.2

BETA February 17, 2022

CURRENT February 17, 2022

STABLE February 28, 2022

  • Granular consent within AMP pages is now supported using perPurposeConsent: true
  • Bug fixes and other minor improvements

1.35.4

STABLE February 17, 2022

  • Bug fixes and other minor improvements

1.35.3

BETA December 21, 2021

CURRENT December 21, 2021

STABLE December 21, 2021

  • Using banner.closeButtonRejects: true, the close button of the banner (the “X”) has the value of denial of consent to cookies.
  • To comply with the last Italian DPA’s guidelines, “Reject all” and “Accept all” buttons need to have now the same color.
  • Notice to users about their right to withdraw consent can be shown directly within the banner.
  • To prevent the Privacy Controls and Cookie Solution from failing to save the consent due to a user action on the page (e.g. refresh or abandon), the operation is retried the next time the page is accessed, until the proof of consent is correctly stored.
  • Consents not recorded through the Cookie Preference Log can be invalidated using the invalidateConsentWithoutLog option.
  • Bug fixes and other minor improvements

1.34.0

BETA October 25, 2021

CURRENT November 8, 2021

STABLE December 6, 2021

  • Users are now allowed to accept/reject cookies only when the first layer of the cookie banner has been fully scrolled.
  • TCF consents created more than 12 months before are automatically invalidated since they could prevent Google Ads to serve ads to users that have old TCF consents
  • To comply with the new Italian DPA’s guidelines, the first layer of the cookie banner mentions the use of “technical” as well as “non-technical” cookies
  • Bug fixes and other minor improvements

1.33.1

BETA October 13, 2021

CURRENT October 13, 2021

STABLE October 13, 2021

  • Thanks to the newly introduced support for custom attributes suppressedtype and data-iub-type, our Privacy Controls and Cookie Solution can now also activate scripts other than text/javascript (e.g. module).
  • We’ve introduced the Cookie Preference Log
  • Bug fixes and other improvements

1.32.0

BETA August 3, 2021

CURRENT August 10, 2021

STABLE September 13, 2021

  • We’ve deprecated enableCMP in favor of enableTcf
  • We’ve added the googleConsentMode option
  • Bug fixes and other improvements

1.31.1

BETA June 21, 2021

CURRENT June 28, 2021

STABLE August 2, 2021

  • We’ve introduced the banner.listPurposes option (false by default) to display purposes in the first layer of the cookie banner
  • Bug fixes and other improvements

1.30.3

BETA May 17, 2021

CURRENT May 17, 2021

STABLE May 26, 2021

  • We’ve simplified the implementation of Google Consent Mode (you no longer have to add a callback to your Privacy Controls and Cookie Solution snippet)
  • Thanks to the openPreferences() method, users can update their cookie preferences even after closing the cookie banner
  • We’ve introduced the iubenda-vendor-list-link class to allow users to reopen the TCF vendor list
  • Bug fixes and other improvements

1.29.0

BETA March 23, 2021

CURRENT March 30, 2021

STABLE May 10, 2021

  • We’ve further reduced the size of the JavaScript files, making the Privacy Controls and Cookie Solution 45% lighter
  • The cookie banner is now WCAG compliant
  • Bug fixes and other improvements

1.28.1

BETA March 5, 2021

CURRENT March 5, 2021

STABLE April 1, 2021

  • We’ve completely overhauled our AMP integration, including:
    • Perfected Safari support. After adding the consent refreshing feature, our support for Apple’s browser is even better.
    • The tracking preferences widget. This widget – now also fully supported in AMP – allows users to re-open and edit their tracking preferences after closing the cookie banner.
  • Bug fixes and other improvements

1.27.1

BETA February 16, 2021

CURRENT February 16, 2021

STABLE March 16, 2021

  • Following IAB updated policies, we now disclose maximum cookie storage duration when the TCF is enabled
  • Bug fixes and other improvements

1.26.0

BETA December 9, 2020

CURRENT December 16, 2020

STABLE January 18, 2021

  • New iub-prevent-consent class. By adding it to certain links/buttons, you’ll avoid automatically giving consent when pressed
  • We’ve updated the legal text of purpose 5
  • Bug fixes and other improvements

1.25.0

BETA November 9, 2020

CURRENT November 16, 2020

STABLE December 16, 2020

  • We’ve updated the legal text of purpose 3 in FR, DE, NL and RU
  • Bug fixes and other improvements

1.24.3

BETA September 18, 2020

CURRENT September 18, 2020

STABLE September 29, 2020

  • In order to comply with IAB requirements:
    • now you cannot edit the cookie banner text when the TCF v2 is enabled
    • we’ve introduced an automatic floating button to re-open advertising preferences
  • _iub.cs.api.storeConsent can now handle TCF string to fully support Safari on AMP
  • Bug fixes and other minor improvements

1.23.2

BETA September 7, 2020

CURRENT September 8, 2020

STABLE September 8, 2020

  • The TCF Reject button now also applies to legitimate interest (which is now disabled by default)
  • Bug fixes and other minor improvements

1.22.8

BETA August 21, 2020

CURRENT August 21, 2020

STABLE August 21, 2020

  • We’ve added support for Google’s Additional Consent Mode
  • We’ve shortened the TCF v2 banner text
  • We now save TCF strings longer than 4096 chars in multiple cookies
  • We’ve added a fix for an IAB library bug which resulted in the consent string non being passed correctly to vendors
  • Bug fixes

1.21.0

BETA June 8, 2020

CURRENT June 15, 2020

STABLE July 13, 2020

  • We’ve made the default cookie banner text much shorter in an effort to simplify communication with end-users
  • In anticipation of IAB’s hard cutoff date, we’ve scheduled a force-switch to TCF v2.0
  • Bug fixes and other minor improvements

1.20.6

BETA May 6, 2020

CURRENT May 6, 2020

STABLE May 26, 2020

  • Now we also support version 2.0 of IAB’s TCF
  • We’ve further improved the style of the cookie banner and added custom branding options
  • We’ve updated cmp.js to version 1.5.0
  • As with the cookie policy, now the privacy policy can also be opened in another window when cookiePolicyInOtherWindow is true
  • New onBannerClosed callback
  • Bug fixes and other minor improvements

1.19.0

BETA March 4, 2020

CURRENT March 24, 2020

STABLE April 28, 2020

  • Bug fixes and other minor improvements

1.18.0

BETA February 26, 2020

CURRENT February 28, 2020

STABLE March 31, 2020

  • Google Ads preferences are now also stored remotely when isTCFConsentGlobal option is true
  • We’ve implemented the ccpaAcknowledgeOnDisplay option to acknowledge when the CCPA notice is shown
  • New onCcpaAcknowledged, onCcpaFirstAcknowledged, onCcpaOptOut and onCcpaFirstOptOut callbacks
  • New _iub.cs.api.ccpaApplies() and _iub.cs.api.gdprApplies() API methods
  • _iub.cs.api.storeConsent() can now handle purposes

1.17.2

BETA February 21, 2020

CURRENT February 24, 2020

  • We’ve changed the default timeoutLoadConfiguration to 30000 ms
  • We’ve renamed the “Analytics” category into “Measurement”
  • We’ve updated the TCF banner text
  • Bug fixes and other minor improvements

1.16.7

BETA January 29, 2020

CURRENT January 29, 2020

STABLE February 10, 2020

  • We’ve introduced the iubenda-cs-preferences-link class to allow users to update their cookies preferences even after closing the cookie banner
  • New onConsentFirstRejected and onPreferenceFirstExpressed callbacks
  • We’ve updated cmp.js to version 1.4.3
  • We now correctly set the SameSite attribute on remote cookies to comply with the stable version of Google Chrome 80
  • Bug fixes and other minor improvements

1.15.6

BETA December 19, 2019

CURRENT December 19, 2019

STABLE January 29, 2020

1.14.6

BETA December 5, 2019

CURRENT December 5, 2019

STABLE January 3, 2020

  • We’ve added the per-category consent feature. This way you can give users granular controls on which categories of data processing purposes to give consent to
  • Bug fixes

1.13.1

BETA November 6, 2019

CURRENT November 15, 2019

STABLE December 16, 2019

  • We’ve added the country detection feature to avoid showing the cookie banner when outside the EU. Set gdprAppliesGlobally:false and countryDetection:true to request consent to EU users only
  • Bug fixes

1.12.3

BETA October 31, 2019

CURRENT October 31, 2019

STABLE November 20, 2019

  • Banner text and CSS updates
  • Bug fixes

1.11.1

BETA October 11, 2019

CURRENT October 21, 2019

  • We’ve added the “Reject” button
  • The close button is now hidden when the “Reject” button is displayed
  • We’ve updated the banner text to be compliant with TCF guidelines
  • Pressing the “x” in the second modal layer – the one with the cookie policy – takes the user back to the cookie notice instead of providing consent
  • API methods can now be called from an iframe
  • Bug fixes

1.10.3

BETA September 16, 2019

CURRENT October 2, 2019

STABLE November 18, 2019

  • You can now hide the close button (“x”) setting the closeButtonDisplay banner parameter to false
  • Bug fixes

1.9.2

BETA September 5, 2019

CURRENT September 13, 2019

STABLE October 14, 2019

  • We’ve added the “Click on the Accept button” metric to the Privacy Controls and Cookie Solution Analytics (“Consent drilldown” section)
  • The cookie banner text is now shorter when the “Learn more and customize” button is enabled
  • consentOnElement and consentOnScrollOnElement options now also take CSS selectors
  • Bug fixes

1.8.2

BETA August 27, 2019

CURRENT September 3, 2019

  • Now the notice always displays fullscreen on native mobile
  • We’ve adjusted the wording of the TCF related sections to be in line with the requirements on mobile phones/applications
  • We’ve renamed the consentOnButton option to consentOnLinkAndButton to make it clear that it also applies to <a> elements
  • Bug fixes

1.7.1

BETA June 5, 2019

CURRENT June 10, 2019

  • New positioning options for the cookie banner
  • Ability to trigger a new consent request when the vendor list is updated
  • Bug fixes

1.6.1

BETA June 3, 2019

CURRENT June 3, 2019

STABLE July 9, 2019

  • We’ve added “Accept” and “Customize” buttons to the cookie banner
  • Bug fixes and performance improvements

1.5.4

BETA April 16, 2019

CURRENT May 6, 2019

STABLE June 6, 2019

  • We’ve added the iubenda-advertising-preferences-link CSS class to let visitors update their advertising tracking preferences even after closing the cookie banner
  • Bug fixes

1.4.0

BETA April 5, 2019

CURRENT May 6, 2019

STABLE June 6, 2019

  • Ability to collect explicit consent for Google personalized ads
  • googleAdsPreferenceManagement option added
  • isTCFConsentGlobal option added
  • Bug fixes

1.3.14.3

BETA March 11, 2019

CURRENT April 3, 2019

STABLE April 3, 2019

We’ve made some big changes to our Privacy Controls and Cookie Solution so that it’s now faster, better and more user-friendly than before. In addition to the previously available automatic prior blocking of the scripts of advertisers that are a part of the IAB Vendor Network, we’ve added these new features, available with the new Privacy Controls and Cookie Solution integration code:

  • IAB Transparency and Consent Framework compatibility
    Now available on all Privacy Controls and Cookie Solution channels
  • Multiple options for accepting/rejecting cookies
    Functionality now available on both an individual basis and as a bulk action
  • GDPR protections for all users or EU users only
    You can now indicate who you’d like GDPR protections applied to
  • Ability to request new consent from users that previously provided consent (if the IAB Framework preference is not found)
  • Cleaner markup
    The cookie notice now has a cleaner markup and a stronger CSS reset in anticipation of future additions
  • Dynamic notice text
    The notice text displayed will now automatically change based on the detected consent collection options (e.g. when consentOnScroll is disabled) and purposes
  • Cookie notice position
    You can now easily position the cookie notice from directly within the configurator, to either the top (default) or bottom of the page, without adding CSS styles
  • Easily accept only explicit consent
    You can now easily enable or disable the newly introduced consentOnContinuedBrowsing property from directly within the configurator
  • Second level domains
    All second level domains can now be handled without additional configuration
  • Speed improvements
    • Now the Privacy Controls and Cookie Solution starts without waiting for all the page’s resources to be loaded (startOnDomReady defaulted to true)
    • We sped up the loading of the inline activator by changing the safeTimeout default value to 0
    • We decreased the inlineDelay default value to 500 to reduce the total time of activation

The post Privacy Controls and Cookie Solution changelog appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Introduction to the Prior Blocking of Cookie Scripts https://www.iubenda.com/en/help/3081-prior-blocking-of-cookie-scripts/ Thu, 09 Jun 2016 13:30:01 +0000 http://help.iubenda.com/?p=3081&lang=en In accordance with the general principles of privacy law, which do not permit the processing of data prior to consent, the cookie law does not allow the installation of cookies before obtaining the user’s consent, except for exempt categories. In practice, this means that scripts that recall banners or even scripts that handle live chat […]

The post Introduction to the Prior Blocking of Cookie Scripts appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

In accordance with the general principles of privacy law, which do not permit the processing of data prior to consent, the cookie law does not allow the installation of cookies before obtaining the user’s consent, except for exempt categories. In practice, this means that scripts that recall banners or even scripts that handle live chat or a Facebook Like button can’t be executed before obtaining prior consent from the user.

The iubenda Privacy Controls and Cookie Solution includes all the necessary tools to facilitate compliance with the cookie law.

Exempted cookies

Some cookies are exempted from prior consent and therefore do not require compliance with the instructions contained in this guide. In particular:

  • Technical cookies, i.e. those needed to provide the service. These include preference cookies, session cookies, load balancing cookies etc.
  • Statistical cookies, directly managed by you, such as through software like Matomo/Piwik. This exemption does not apply if these statistical cookies are used for profiling.
  • Statistical third-party cookies, in cases where the data is anonymized before being recorded by the third party service and if the third party is obligated to not cross-check the information gathered with other data in its possession.
Note

Some details regarding this may differ slightly from one EU Member State to another. This guide takes a comprehensive look at requirements, however, we still suggest that you inform yourself of the privacy authority guidelines applicable to you.

How to block cookies prior to consent with the iubenda Privacy Controls and Cookie Solution

Our cookie management solution offers various tools for the prior blocking of codes that may install cookies.

Automatic Blocking (auto-blocking)

With this feature, our Privacy Controls and Cookie Solution takes care of automatically blocking third-party scripts that install cookies and trackers, saving you time and effort, so you don’t have to do it manually.

iubenda automatically blocks selected sources from setting cookies on the user’s browser based on the results from the site scanner with consideration to the cookie classifications listed in the Cookie Policy, as well as commonly used scripts and tracking technologies.

On the site info section “Block scripts prior to consent” under “Automatic blocking” you can find these two checkboxes (enabled by default):

✅ Do not block vendors that adhere to the TCF when the TCF is enabled:

When TCF is enabled, ad delivery is driven by the TCF consent string reflecting user choices. We suggest not blocking these vendors with automatic blocking to ensure optimal site performance and uninterrupted ad display.

✅ Do not block Google’s services that adhere to Consent Mode:

When this option is enabled, our Privacy Controls and Cookie Solution will automatically set the default consent state for Google services, allowing you to manage them directly through ‘Consent Mode‘ without any further action.

checkboxes google consent mode
Customize Service Categorization

To improve flexibility in auto-blocking behavior within the Privacy Controls and Cookie Solution (Cookie Banner), the Privacy and Cookie Policy Generator now allows you to customize service categorization in your Privacy and Cookie Policy. This means you can reassign service categories, affecting which consent is required for unblocking. For example, a service under Marketing (5) stays blocked until marketing cookies are accepted, but if moved to Experience (3), it will require only experience consent.

➡ See Customize Service Categorization for more details.

👉 For more information on auto-blocking, read our dedicated guide Prior Blocking of Cookies: Automatic Blocking (auto-blocking)

Plugins

Our Privacy Controls and Cookie Solution plugins for WordPress, Magento, Joomla! and PrestaShop allow you to automate the blocking of scripts drastically reducing the necessity for direct interventions in the site’s code.

The plugin simplifies the blocking of scripts in several ways:

  • Auto-block list. By default, the plugin detects and blocks the most popular server-side scripts (you can find the full list in the dedicated plugin guides listed below).
  • Custom field with the plugin console. You can block scripts that are directly inserted into the page via javascript by simply identifying the scripts you need to block within the plugin’s custom fields.
  • Manual wrapping method. You can also directly modify your site’s code and wrap the scripts that you need to block in the plugin’s block tags.
  • Shortcodes. There are shortcodes available for elements installed directly within WordPress posts (as opposed to elements integrated at the template level – example footer.php). Currently, the shortcodes are only available for the WordPress plugin.

Once installed and set-up, the plugin automatically recognizes and blocks scripts prior to consent.

For platform-specific details, please choose from the dedicated guides listed below:

Drupal users, please see the section on prior-blocking via the PHP class below.

Google Tag Manager

This method has the advantage of being quite fast but with the limit of working only for scripts that don’t require a specific position. Google Tag Manager is therefore not effective for all scripts that display a specific element in a specific position of the page (such as the Facebook Like button).

For more information read the How to Use Google Tag Manager to Simplify the Blocking of Cookies guide.

Google Adsense and Ad Manager

Google Adsense is different in that it can be blocked through Google Ad Manager (previously DFP – DoubleClick for Publishers). In this case, it is also a kind of manual tagging – like the one described below – but with the difference of the use of Google Ad Manager.

The method in question is therefore only valid for Google Adsense, the complete guide is available here.

IAB Consent Management Provider Framework

With this feature enabled, the Privacy Controls and Cookie Solution automatically blocks the scripts of advertisers that are a part of the IAB Vendor List (provided that the individual advertisers adhere to the standards of the network), prior to receiving user consent.

This means that you can avoid having to manually set-up the prior blocking mechanism for the particular third parties that are a part of the IAB Vendor List.

If you’re running other scripts related to third-parties that are not included on the IAB Vendor List, you’ll still need to set up prior blocking for those scripts using another method.

Caution

Please consider that using this method means that you do not directly block the vendor scripts yourself, therefore, the success of this method depends heavily on the individual vendors’ adherence to regulation. For more hands-on control, please use one of the other methods described in this guide. You can find more information about blocking vendor scripts with the TCF here.

For more general information on the IAB Transparency & Consent Framework and how to enable it, read the dedicated guide.

Manual tagging

This method requires you to identify the scripts that are subjected to the requirement of prior consent. Once that’s done, the scripts must be manually modified so they can be recognized, stopped and then released by our software depending on what the user chooses.

Manual tagging is explained in detail in this guide. The guide explains the processes for manual blocking, together with many practical examples (i.e. how to set up the blocks for a Facebook Like Button, Google Analytics, Adsense and so on).

PHP Class

You can also use the iubenda PHP class for parsing/replacing scripts that generate cookies. This is the class on which our WordPress and Joomla! plugins are based and you can use it to build your own plugin independently for a platform other than those for which we have already developed a dedicated solution.

If you’d like to use the same logic of our WordPress or Joomla! plugin on other systems, you can refer to the guide for our PHP class.

*You can access the class via direct download or Packagist, and find full instructions in the PHP class guide linked above.

Google Consent Mode

To help advertisers manage cookies for analytics and advertising purposes, Google has introduced Consent Mode, a feature that allows you to avoid prior blocking for Google Analytics and Google Ads (including Google Ads Conversion Tracking and Remarketing).

Learn how to implement it with our Privacy Controls and Cookie Solution.

Manage cookie consent with the Privacy Controls and Cookie Solution

Generate a cookie banner

See also

The post Introduction to the Prior Blocking of Cookie Scripts appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Is it ok to include the same privacy policy in other sites and apps? https://www.iubenda.com/en/help/450-is-it-ok-to-include-the-same-privacy-policy-in-other-sites-and-apps/ Thu, 09 Jun 2016 12:00:07 +0000 http://help.iubenda.com/?p=450 We’re often asked by customers whether it is ok to include the same privacy policy in other sites and other apps. Since this is a question that has come up a lot, it should also be interesting to blog readers. A privacy policy for each site/app Creating a privacy policy for each site/app is simply […]

The post Is it ok to include the same privacy policy in other sites and apps? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
We’re often asked by customers whether it is ok to include the same privacy policy in other sites and other apps. Since this is a question that has come up a lot, it should also be interesting to blog readers.

A privacy policy for each site/app

Creating a privacy policy for each site/app is simply the most convenient and correct way to use our service. Most projects/sites/apps don’t do the same thing, that’s why different policies are required. Moreover, if moving forward something changes in one app or site (by for example the addition of features that have an impact upon the privacy policy), it won’t necessarily change the other.

A single privacy policy for multiple sites/apps

An alternative approach to the previous one is to use the privacy policy purchased for your main site/app on other similar websites or apps.

When multiple sites are managed by the same owner, are related to the same business and are identical in terms of data processing or can still be described by a single privacy/cookie policy, you can use a policy common to all.

In this case, generate the privacy policy for the “main” site/app and add a custom clause: select “Create custom service” and indicate that this policy also applies to sites/apps X, Y and Z.

To add a custom clause, log in to your dashboard, choose your policy, select “Add service” and finally “Create custom service“:

Create a custom service

For more information on custom services read the “How to Add a Custom Service” post.

See also

The post Is it ok to include the same privacy policy in other sites and apps? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Which Countries Is Your Privacy Policy Good For? https://www.iubenda.com/en/help/438-which-countries-is-your-privacy-policy-good-for/ Thu, 09 Jun 2016 09:00:51 +0000 http://help.iubenda.com/?p=438 One of our greatest efforts is seeking to cover every country’s law by adopting the strictest privacy rules required in each country. We take the strictest laws and regulations and implement them into our policies Our lawyers manage the legal text and our software crafts your policies We monitor the legal landscape for changes and […]

The post Which Countries Is Your Privacy Policy Good For? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
One of our greatest efforts is seeking to cover every country’s law by adopting the strictest privacy rules required in each country.

  1. We take the strictest laws and regulations and implement them into our policies
  2. Our lawyers manage the legal text and our software crafts your policies
  3. We monitor the legal landscape for changes and implement them automatically

To be more specific: Our privacy policy texts have been written with European privacy rules at the core. Europe has a very well developed privacy law sector. The relevant legal framework being the General Data Protection Regulation (GDPR) and ePrivacy Directive (Cookie Law).

Like other data protection legislations, these regulations can apply even if you’re not based in the EU. The GDPR, in particular, applies in any one of three scenarios:

  • where your base of operations is in the EU;
  • where you’re not established in the EU but you offer goods or services (even if the offer is for free) to people in the EU; or
  • where you’re not established in the EU, but monitor the behavior of people who are in the EU (as long as that behavior takes place in the EU).

Similarly, California’s Online Privacy Protection Act (CalOPPA) can apply whether or not you’re based in California. (You can read more about determining your law of reference here.)

Our job is to keep up with these developments across various legislations, and help you through our policy framework.
We have adopted and regularly monitor changes among several legislations across the globe such as the USA, Europe, Australia, Canada and so forth.

In addition to legal requirements, we also frequently monitor major third-party requirements such as (App store & Ad network requirements) as well.

Read more about compliance in our Legal Requirements Overview Guide.

The post Which Countries Is Your Privacy Policy Good For? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution: Analytics and Stats https://www.iubenda.com/en/help/2426-cookie-solution-analytics-and-stats/ Wed, 23 Mar 2016 12:16:41 +0000 http://help.iubenda.com/?p=2426&lang=en Our dashboard has been updated to include various features and options, including the possibility of viewing detailed stats on the functioning our Privacy Controls and Cookie Solution. You can access the above in your dashboard by clicking on the Privacy Controls and Cookie Solution Analytics tab. Please note: Detailed analytics of user preference and consent […]

The post Privacy Controls and Cookie Solution: Analytics and Stats appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Our dashboard has been updated to include various features and options, including the possibility of viewing detailed stats on the functioning our Privacy Controls and Cookie Solution.

You can access the above in your dashboard by clicking on the Privacy Controls and Cookie Solution Analytics tab.

Cookie Solution Analytics
Please note:

  • Detailed analytics of user preference and consent activities are only available for Ultimate plans. They include page view metrics, consent rate and consent drilldown (like rates of scrolling, notice closure, clicks on buttons and links, closing of policies and more).
  • 💡 Are you already an iubenda customer and considering an upgrade to our Ultimate plan? Here’s why it’s worth it! When you switch to Ultimate, you’ll gain access to detailed website stats like consent rates. Plus, you’ll unlock all your historical data—even from when you signed up for iubenda and were on a lower-tier plan. 🚀 Upgrade today to gain valuable insights!
  • If you joined iubenda before 2023 and are on our old pricing model with license slots, please be aware that available features depend on the plan you have chosen: you can see both account overall stats and single website stats if you cumulate at least 300k pageviews/months for that site. Basic plans only include overall account stats.

Account stats

❗ Please note that this chart will only be available to users with old prices, as for other users this information is in more detail in the Pageview summary graph.

Let’s take a detailed look at how these features work. By clicking on “Account stats” you will be able to view various graphs.

Total account pageviews

The first chart is a summary of monthly usage as per your Privacy Controls and Cookie Solution plan limits, followed by the total number of pageviews for the entire account, which is useful for a quick overview over time.

Cookie Solution Analytics - Total account pageviews

The graph above shows the summary of monthly usage as per your Privacy Controls and Cookie Solution plan limits, followed by the total number of page views for the entire account, which is calculated after your page views for that month exceed 25.000. The total number of page views is calculated by preference found* + preference not found*.

*Preference found = Action previously made (meaning the cookie banner is not shown)
*Preference not found = No action previously made (Cookie banner shown)

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

The second graph is useful for comparing the pageviews generated by each single website within your account. It can help you understand at a glance which website is impacting more on overall traffic.

Cookie Solution Analytics - Total account pageviews

The graph above compares the pageviews generated by each site/ app in the account. The total number of page views is calculated by preference found* plus + preference not found*

*Preference found = Action previously made (meaning the cookie banner is not shown)
*Preference not found = No action previously made (Cookie banner shown)

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

Analytics by site

The “Analytics by site” tab allows you to focus on a single website: near the top of the tab you can find a pulldown menu for selecting it.

Key indicators

As you move down the page, you will see two graphs: the first one represents the traffic covered, while the other one represents the percentage of consent compared to how many times the consent notice was prompted.

Cookie Solution Analytics - Key indicators

The first indicator shows the total number of page views for your website that month. The total number of page views is calculated by preference found* + preference not found*.

The first semicircular chart on the traffic covered shows the percentage of your total traffic that is covered by consent.

*Preference found = Action previously made (meaning the cookie banner is not shown)
*Preference not found = No action previously made (Cookie banner shown)
*Preference found accepted = Action previously made (Cookie banner was accepted)
*Preference found rejected = Action previously made (Cookie banner was rejected)

The second semicircular chart represents the percentage of consent compared to how many times the consent notice was prompted. Note that if the same user navigates your site without expressing a preference, each of these views will be counted as separate.

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

Pageview summary

The following graph shows a summary of all the pageviews served on this website in the last months, divided into categories: Total, Preference found, Preference not found, Rejection found, Consent found, Bounced, New consent rejected, New consent collected, Full consent, Partial consent and Rejected/bounced consent.

Cookie Solution Analytics - Pageview summary

The graph above on the summary of all the pageviews served on this website shows the total number of page views. The total number of page views is calculated by preference found* + preference not found*. It also shows any recently collected data. Any recent data collected recently is calculated by preference found accepted* + Preference found rejected*.

1st column

    *Total = This includes all the pageviews from the website, both with or without preference already expressed

2nd column

    *Preference found = Action previously made (meaning the cookie banner is not shown)
    *Preference not found = No action previously made (Cookie banner shown)

3rd column

    *Preference found accepted = Action previously made (Cookie banner was accepted)
    *Preference found rejected = Action previously made (Cookie banner was rejected)
    *Bounced = This includes the pageviews where no interaction with the displayed cookie banner was done, therefore no preference has been expressed. This does not include pageviews where the preference has already been expressed (cookie banner didn’t appear)
    *New consent collected = This includes the pageviews where a new preference has been expressed in any form and any interaction. This one does not include consent rejections
    *New consent rejected = This includes the pageviews where a new preference has been expressed with a refusal

4th column

    *Full consent = This includes all the pageviews from the website where the preference resulted in a consent given with all categories accepted. Both with preference already expressed and newly expressed
    *Partial consent = This includes all the pageviews from the website where the preference resulted in a consent given with some categories accepted. Both with preference already expressed and newly expressed
    *Rejected/ bounced consent = This includes all the pageviews from the website where the preference resulted in a consent refusal. Therefore no category was accepted. Both with preference already expressed and newly expressed. This also includes bounced pageviews.

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

Consent rate

Further on we find the “Consent rate” graph. It can be used to understand how many new consents are given per day/week/month, and thus how many users visit your website.

Cookie Solution Analytics - Consent rate

The graph above shows how many new consents are given. This is a breakdown of the percentage of the total number of page views. The total number of page views is calculated by preference found* + preference not found*. Please keep in mind that the percentage of bounced pageviews* is not shown.

*Preference found = Action previously made (meaning the cookie banner is not shown)
*Preference not found = No action previously made (Cookie banner shown)
*Bounced pageviews = page was accessed and no action was taken.

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

Consent drilldown

Finally, the last section shows a detailed analysis of collected consents. Here you can at a glance understand the manner in which the consent was obtained:

  • Scroll – the simplest way;
  • Banner closure – by clicking on the [x] at the top right;
  • Click on links and buttons – by this we mean clicking on a link or a button inside the page, this can also be understood as a continuation of browsing;
  • Closing the cookie policy – by far the least used way to give consent, it consists in viewing the policy linked inside your banner and closing it;
  • Click on the “Accept” button inside the cookie banner;
  • Click on the “Reject” button inside the cookie banner.
Cookie Solution Analytics - Consent drilldown

The graph above shows a detailed analysis of collected consents. This is a breakdown of how the user interacted with the cookie banner. This percentage is given based on the total number of page views. The total number of page views is calculated by preference found* + preference not found*.

*Preference found = Action previously made (meaning the cookie banner is not shown)
*Preference not found = No action previously made (Cookie banner shown)

Please keep in mind: When opening the CSV in excel, depending on your language, you may need to change the decimal separator symbol in your excel settings.

If you have enabled the per-category consent feature, you will also see a second graph containing an analysis of the consents grouped by category.

Cookie Solution Analytics - Consent drilldown

See also

The post Privacy Controls and Cookie Solution: Analytics and Stats appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Identify the Cookies Your Site Installs in Browsers https://www.iubenda.com/en/help/262-how-to-identify-the-cookies-your-site-installs-in-browsers/ Sat, 07 Nov 2015 00:00:13 +0000 http://help.iubenda.com/?p=262 Website owner? Laws like the GDPR Regulation require you to be transparent about the data you process from your users and give them the option to consent or refuse to grant consent to trackers like cookies (and similar technologies) running on your site. Many website owners don’t know what cookies their site uses or what […]

The post How to Identify the Cookies Your Site Installs in Browsers appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Website owner? Laws like the GDPR Regulation require you to be transparent about the data you process from your users and give them the option to consent or refuse to grant consent to trackers like cookies (and similar technologies) running on your site.

Many website owners don’t know what cookies their site uses or what they are used for.

🎥 How to identify the Cookies installed on your website (Video Guide)



And doing so is not always an easy task, so we have created a short guide to help identify the cookies your site installs ⬇

A tracking cookie is a small piece of data that websites or apps send and store on users’ computers via their web browser. You can classify cookies as first-party (produced by your site) or third-party (produced by third-party services like widgets, iframes, scripts, etc.)

To comply with laws like the GDPR and ePrivacy (Cookie Law), you must block non-exempt cookies before user consent, regardless of whether they are first-party or third-party cookies.

How to identify cookies using Free Scanning software

iubenda’s free site scanner will scan your site and tell you which services are running on your site, and which legal disclosures you’ll need to add to your privacy documents as a result.

The results are generated in seconds, and it’s the easiest of all the methods of identifying what’s running on your site. Check out the free site scanner here.

Identify Cookies Using a Browser extension

The identification of cookies installed via your website may end up being a result from the combined use of different tools, the main and most commonly used are Wappalyzer and BuiltWith, both are available as add-ons to all the most widely used browsers and allow a thorough analysis of all the resources and technologies implemented within a website. They do not only disclose cookies installed via a site, but also list all the technologies used on that site, such as server infrastructure, the CMS used and other specific information.

Another known tool is Ghostery: it is also available as an extension for the most popular web browsers, but it is not recommended for use for the identification of cookies because its operation is not based on a real-time scan of the website. It could also indicate some scripts that are not directly installed from the site but from some of its widgets, thus distorting the results of your analysis.

Identify Cookies Using the Development Console of browsers

The development console, when used in conjunction with the other methods indicated, can be a very reliable and immediate tool for identifying cookies installed via a website. Below is an explanation of how to display cookies using the development console of two of the most popular and most used internet browsers, Google Chrome and Mozilla Firefox.

Note: when you analyze a site’s cookies through the development console, first remember to clear cache and cookies, otherwise the results may not be accurate.

If you use Google Chrome, this is how to proceed:

  • Clear cache and cookies (menu button in the upper right corner > More tools > Clear browsing data)
  • To open the console, click on the toolbar: View > Developer > JavaScript Console
  • Once the console is open, you can view the cookies installed by the site by clicking on the Application tab

If you prefer to use Mozilla’s Firefox, here are the steps to follow:

  • Clear cache and cookies (menu button in the upper right corner > Options > Clear data under “Privacy and security/Cookies and Site Data”)
  • To open the console, click on the toolbar: Tools > Web Development > Enable Tools
  • Once the console is opened, you will need to click on the Storage tab, then on the Cookie drop-down menu to view the list of cookies installed by the site up to that moment
Mozilla Firefox

Identify Cookies Using Phantom JS (a method for developers)

PhantomJS is a “headless browser”, i. e. a tool that allows you to perform actions that normally require the use of a browser, without rendering the browser itself on screen. This is a WebKit-based OpenSource cross-platform tool available for Mac, Windows and Linux.

Using PhantomJS to locate cookies

PhantomJS must be used within the terminal. Among its functions, there is also that of identifying cookies installed by a specific site. First of all, you must download the package available at this link and install the resource.

After following the installation procedure, the “phantomjs” command will now be available. To continue, we need a shell (on UNIX systems) or command prompt (for Windows) where we will enter this line:

phantomjs --ignore-ssl-errors=yes --disk-cache=yes fetch_data.js http://yoursite.com

Let’s dive into this, element by element:

  • phantomjs: this is the main command;
  • --ignore-ssl-errors=yes: this option avoids errors related to the SSL certificate being considered;
  • --disk-cache= true: the process will save the resources on the disk;
  • fetch-data.js: this is the file that processes the request to the site and displays it on the shell downloadable at this link. Important: this file must be in the same folder from where you launched the command, otherwise you will have to indicate ~/path/of/fetch/data;
  • http://yoursite.com: the website you want to analyze.

Once this command has been run, the terminal will return a list of the resources and cookies used by the relative site.

PhantomJS

If your site is running cookies, here’s what you need to do:

Manage cookie consent with the Privacy Controls and Cookie Solution

Generate a cookie banner

See also

The post How to Identify the Cookies Your Site Installs in Browsers appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Privacy Controls and Cookie Solution Delivery Channels https://www.iubenda.com/en/help/2158-cookie-solution-release-channels/ Sun, 25 Oct 2015 06:00:30 +0000 http://help.iubenda.com/?p=2158&lang=en iubenda’s Privacy Controls and Cookie Solution is available in three different versions that allow each user to choose the cycle of periodic updates that best suits their needs: You can specify the version you’d like to use by selecting your preferred option from the dedicated dropdown menu in the Privacy Controls and Cookie Solution Configurator […]

The post Privacy Controls and Cookie Solution Delivery Channels appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
iubenda’s Privacy Controls and Cookie Solution is available in three different versions that allow each user to choose the cycle of periodic updates that best suits their needs:

  1. Current – The default version of the iubenda Privacy Controls and Cookie Solution is based on the Current channel. The Current version receives updates every two or three weeks; fixes are applied as soon as they are available.

  2. Beta – Once they have been tested internally, all the last features are released on the Beta channel. Also in this case fixes are applied as soon as they are available.

  3. Stable – The Stable channel is updated only if at least one month has passed since the release of the new features on the Current channel. Release dates are established at least two weeks in advance and, except in exceptional cases of particular relevance, fixes are applied on this channel only according to the scheduled release plan.

You can specify the version you’d like to use by selecting your preferred option from the dedicated dropdown menu in the Privacy Controls and Cookie Solution Configurator under Advanced Settings → Channel.

Cookie Solution Channels

After selecting the desired version, copy the updated snippet provided in the Embed section of the configurator, and paste it directly into your site’s <head> tag (as the first element), replacing the default snippet.

Cookie Solution Channels

Note: If the Remote Configuration feature is enabled, any changes to the release channel selected in the Advanced Settings → Channel section will automatically apply to your site without the need to update or re-embed the snippet manually.

How to change the release channel

The Privacy Controls and Cookie Solution connects by default to the Current channel. If you wish to use this channel, you do not need to make any changes to the Privacy Controls and Cookie Solution code automatically generated when the cookie policy is activated.

The Beta channel is linked to the following URL:

cdn.iubenda.com/cs/beta/iubenda_cs.js

To select the Beta channel, navigate to Dashboard → [Your site] → Privacy Controls and Cookie Solution → EDIT. Scroll down to Advanced Settings → Channel, and choose Beta from the dropdown menu. Then copy the updated snippet from the Embed section and paste it into your site’s <head> tag, replacing the previous version.

Note: If Remote Configuration is enabled, changing the channel will automatically update on your site without manual re-embedding.

Before:


<head>
...

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        //other config options
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

...
</head>

After:


<head>
...

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        //other config options
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/beta/iubenda_cs.js" charset="UTF-8" async></script>

...
</head>

The Stable channel is linked to the following URL:

cdn.iubenda.com/cs/stable/iubenda_cs.js

To select the Stable channel, navigate to Dashboard → [Your site] → Privacy Controls and Cookie Solution → EDIT. Scroll down to Advanced Settings → Channel, and choose Stable from the dropdown menu. Then copy the updated snippet from the Embed section and paste it into your site’s <head> tag, replacing the previous version.

Note: If Remote Configuration is enabled, changing the channel will automatically update on your site without manual re-embedding.

Before:


<head>
...

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        //other config options
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

...
</head>

After:


<head>
...

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        //other config options
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/stable/iubenda_cs.js" charset="UTF-8" async></script>

...
</head>

Example

Here is an example of a typical scenario, useful to understand how updates works depending on the selected release channel:

  • On day 0 version 0.11.36 is available on all channels
  • On day 1, version 0.12.0 is released on the Beta channel
  • On day 2, version 0.12.1 is released on the Beta channel
  • On day 4, version 0.12.2 is released on the Beta channel
  • On day 1 + 1 week, version 0.12.2 is released on the Current channel
  • On Current channel release day + 4 weeks, version 0.12.2 is released on the Stable channel

If a fix is released on day 4, the Beta and Current channels will be updated immediately, while the Stable channel will not (unless particularly relevant fixes):

  • On day 3, version 0.12.2 is released on the Beta channel
  • On day 3, version 0.11.37 is released on the Current channel

The release process then resumes as usual:

  • On day 4, version 0.12.3 is released on the Beta channel
  • On day 1 + 1 week, version 0.12.3 is released on the Current channel
  • On Current channel release day + 4 weeks, version 0.12.3 is released on the Stable channel

How to choose a specific version of the Privacy Controls and Cookie Solution (when Remote Configuration is disabled)

If you want to use a particular version of the Privacy Controls and Cookie Solution, edit the code by entering a similar URL:

cdn.iubenda.com/cs/versions/iubenda_cs-1.30.3.js

“1.30.3” is the version used in this case. To choose a different version, just edit “1.30.3”.

Important: When Remote Configuration is enabled, version management is automatic, and manually specifying a version is generally unnecessary.

Note: available versions are only those released on the Current and Stable channels.

Changelog

The complete changelog of various release channels is available at this link.

The post Privacy Controls and Cookie Solution Delivery Channels appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to use iubenda privacy and cookie policy on a PrestaShop website https://www.iubenda.com/en/help/1502-how-to-use-iubenda-privacy-and-cookie-policy-on-a-prestashop-website/ Fri, 23 Oct 2015 09:12:44 +0000 http://help.iubenda.com/?p=1502&lang=en PrestaShop 1.7 Access your PrestaShop store’s admin panel and go to Design > Link widget (under Improve section): You should have a block entitled (Our) company or About (us). Click on the Edit button on the right: Scroll down to Custom content, add the iubenda privacy policy link you got using the direct link integration […]

The post How to use iubenda privacy and cookie policy on a PrestaShop website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
PrestaShop 1.7

Access your PrestaShop store’s admin panel and go to Design > Link widget (under Improve section):

PrestaShop 1.7 - Link Widget

You should have a block entitled (Our) company or About (us). Click on the Edit button on the right:

PrestaShop 1.7 - Link Widget

Scroll down to Custom content, add the iubenda privacy policy link you got using the direct link integration method and call it “Privacy Policy”:

iubenda Privacy and Cookie Policy on PrestaShop 1.7

Note: “12345678” is just a sample, your policy will have a different value.

Click on Add, scroll up to Content Pages and uncheck Legal Notice (to avoid showing the link to the default PrestaShop policy page), then click on Save. Check your store to make sure that you like the placement of the link and adjust if needed:

iubenda Privacy and Cookie Policy on PrestaShop 1.7

And that’s it, you’ve now integrated your iubenda privacy policy with your PrestaShop store.

PrestaShop 1.6

If you are still using the previous version of PrestaShop, go to Modules > Modules and Services from your admin panel:

iubenda Privacy and Cookie Policy on PrestaShop 1.6

Find the CMS Block module and select Configure:

iubenda Privacy and Cookie Policy on PrestaShop 1.6

Paste the privacy/cookie policy integration code in the Footer information section:

iubenda Privacy and Cookie Policy on PrestaShop 1.6

Note: “12345678” is just a sample, your policy will have a different value.

And here’s the result:

iubenda Privacy and Cookie Policy on PrestaShop 1.6

See also

The post How to use iubenda privacy and cookie policy on a PrestaShop website appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Configure Your Privacy Controls and Cookie Solution (Advanced Guide) https://www.iubenda.com/en/help/1205-how-to-configure-your-cookie-solution-advanced-guide-2/ Thu, 30 Jul 2015 18:51:55 +0000 http://help.iubenda.com/?p=1205   ❗️ Update to the default value of the invalidateConsentWithoutLog parameter Please note that starting from 15-01-2023, the value of invalidateConsentWithoutLog has changed and is now set to true. This means that, if you have enabled the Cookie and Consent Preference Log, by default a new consent is requested each time a user’s consent is […]

The post How to Configure Your Privacy Controls and Cookie Solution (Advanced Guide) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
 
❗ Update to the default value of the invalidateConsentWithoutLog parameter

Please note that starting from 15-01-2023, the value of invalidateConsentWithoutLog has changed and is now set to true. This means that, if you have enabled the Cookie and Consent Preference Log, by default a new consent is requested each time a user’s consent is not found recorded in the logs.

Here you’ll find an in-depth look at:

💡 Need an introduction? Learn configurator options, how to change banner style, position and more in our Privacy Controls and Cookie Solution introduction guide.

Quick recap:

  • It’s implemented by inserting a simple code / script in all pages of the site;
  • It shows a notice containing a standard text, it is fully customizable and contains a link to the cookie policy;
  • It has a completely responsive design – optimized for various resolutions and device sizes;
  • We ensure that the cookie policy can be viewed even before the user consent is provided;
  • We ensure a proper functioning of the blocking of scripts – see the introductory guide for the blocking of cookies for more information regarding this topic;
  • Registers preferences via the continued browsing of the user, for instance, through the scroll action;
  • After the consent has been collected, it asynchronously activates (namely without reloading the page) all the scripts that were previously blocked;
  • If the consent has previously been provided by the user, the cookie banner/consent banner does not appear and the scripts are automatically executed;
  • Easily customize with our configurator. Edit the look, details, features of the solution, all within a few clicks.
  • The remote configuration feature ensures that all changes made in the configurator are automatically applied to your website, eliminating the need to re-embed the code.

Once you’ve generated your cookie banner/consent banner (Privacy Controls and Cookie Solution > Activate/Edit), you’ll get a similar code snippet:

The remote configuration feature simplifies implementation by automatically applying all changes made in the Privacy Controls and Cookie Solution configurator to your website—no re-embedding required. This makes it easier to keep your site up-to-date.

With the latest update, even changes like Custom CSS, the TCF tile, and US laws support are applied automatically.

To display the cookie banner/consent banner on your site, copy and paste the snippet above (remember to generate your own code on Privacy Controls and Cookie Solution > Activate/Edit) at the end of the HEAD tag of your pages, or use one of our plugins for:

We also have step-by-step integration guides for custom websites, Shopify, Webflow, Wix and Squarespace.

Drupal users, you can access the class via direct download or Packagist, and find full instructions in the PHP class guide.

In addition to displaying a cookie banner/consent banner, you must also block cookies prior to consent:

Many Data Protection Authorities across the EU have strengthened their requirements and aligned their rules on cookies and trackers with the requirements of the GDPR, in particular it’s required that you record and store proofs of your users’ preferences.

Click here for more info on how to activate Cookie and Consent Preference Log within your Privacy Controls and Cookie Solution.

 

Note: all of the following parameters need to be included within _iub.csConfiguration {}.

1. Required parameters

siteId – Your site’s ID code (notice: This ID is used to share the preference among multiple cookies policies in different languages that are attributable to the same website/app)

cookiePolicyId – Your cookie policy’s ID code

lang – This parameter defines the language in which to display the content of the cookie banner/consent banner (for example, “it” for the Italian, “en” for English, “es” for Spanish, etc..). All the language localizations available within the generator are also available for the content of the banner.

2. Compliance settings

countryDetection (boolean, default false) -Allows you to automatically detect the user country.

For the GDPR

To limit prior-blocking and cookie consent requests only to users from the EU (where this is a legal requirement) while running cookies scripts normally in regions where you are still legally allowed to do so, set this parameter to true if gdprAppliesGlobally is set to false.

If you disable this option, remember to set gdprApplies:false on all page views where the consent is not being requested.

For the US State Laws

To satisfy the US requirements only to users from the US while running cookies scripts normally in regions where you are still legally allowed to do so, set this parameter to true if usprApplies is set to false.

If you disable this option, you can set usprApplies:false on all page views where the US requirements are not relevant.

For the CCPA

To activate CCPA protections only for users to whom the CCPA applies, set this parameter to true if ccpaApplies is set to false.

For the LGPD

To satisfy the LGPD requirements only to users from Brazil while running cookies scripts normally in regions where you are still legally allowed to do so set this parameter to true if lgpdAppliesGlobally is set to false.

If you disable this option, you can set lgpdApplies:false on all page views where the LGPD requirements are not relevant.

2.1 GDPR

enableGdpr (boolean, default true) – If true, you’ll enable/make available the GDPR functionality in the Privacy Controls and Cookie Solution (without actually applying it).

gdprAppliesGlobally (boolean, default true) – If true, you’ll apply GDPR protections to all users. Set this parameter to false and countryDetection:true to request consent to EU users only. Remember that if you’re based in the EU you must apply the GDPR also to users based outside of the EU.

gdprApplies (boolean, default true) – If false, you won’t apply GDPR protections to the current user and he will not be shown the cookie banner/consent banner. If you’ve set countryDetection:false, you should set gdprApplies:false on all page views where the consent is not being requested.

Buttons (accept, customize, reject, close) and specific copy

The options listed below must be contained within the banner {} object:

acceptButtonDisplay (boolean, default false) – Determines whether or not the “Accept” button is displayed.

customizeButtonDisplay (boolean, default false) – Determines whether or not the “Learn more and customize” button is displayed.

rejectButtonDisplay (boolean, default false) – Determines whether or not the “Reject” button is displayed. When true banner.closeButtonDisplay is forced to false. View the demo on CodePen.

continueWithoutAcceptingButtonDisplay (boolean, default false) – When true, displays a “Continue without accepting” button in the banner. When false (default), this button is hidden. Allows users to proceed without making explicit consent choices.

closeButtonDisplay (boolean, default true) – If set to false, the banner’s close button won’t be displayed.

closeButtonRejects (boolean, default false) – If set to true, when the banner’s close button is clicked, user’s consent is considered as denied.

explicitWithdrawal (boolean, default false) – If set to true, the sentence: “You can freely give, deny, or withdraw your consent at any time” will be added to the banner copy.

perPurposeConsent (boolean, default false) – Setting this parameter to true gives users granular control over which categories of cookies they consent to (see below). The categories are displayed along with a short description and toggle so that users can either grant or reject consent for the particular processing purpose.

The categories displayed in the modal are automatically detected and passed from your iubenda cookie policy to the Privacy Controls and Cookie Solution. However, the categories displayed can also be customized by using the purposes parameter below.

Examples:

Manual tagging and per-category consent

If you’ve enabled the per-category consent feature you’ll need to specify the categories of scripts that install cookies prior to consent with a special comma-separated data-iub-purposes attribute. Read this guide for further instructions and examples on using manual tagging and per-category consent.

purposes (string, default null) – Purposes are grouped into 5 categories (Necessary, Functionality, Experience, Measurement, Marketing), each having an id (1, 2, 3, 4, 5). By default, we use the purposes from the iubenda cookie policy connected to your configuration, but you can customize which categories to display with purposes (for example, if you use your own cookie policy).

Here are the purposes included in each category:

  1. Necessary (id 1). Purposes included:
    • Backup saving and management
    • Hosting and backend infrastructure
    • Managing landing and invitation pages
    • Platform services and hosting
    • SPAM protection
    • Traffic optimization and distribution
    • Infrastructure monitoring
    • Handling payments
    • Registration and authentication provided directly by [this application]
    • Collection of privacy-related preferences
    • Building and running [this application]
  2. Functionality (id 2). Purposes included:
    • Contacting the User
    • Interaction with live chat platforms
    • Managing web conferencing and online telephony
    • Managing support and contact requests
    • Interaction with support and feedback platforms
    • Tag Management
    • Registration and authentication
    • User database management
    • Connecting data
    • Handling activities related to productivity
    • Selling goods and services online
  3. Experience (id 3). Purposes included:
    • Content commenting
    • Interaction with data collection platforms and other third-parties
    • Displaying content from external platforms
    • Interaction with external social networks and platforms
    • Interaction with online survey platforms
    • RSS feed management
    • Social features
    • Access to third-party accounts
    • Tools for social media
  4. Measurement (id 4). Purposes included:
    • Analytics
    • Beta testing
    • Content performance and feature testing (A/B testing)
    • Heat mapping and session recording
    • Managing data collection and online surveys
  5. Marketing (id 5). Purposes included:
    • Advertising
    • Advertising service infrastructure
    • Commercial affiliation
    • Managing contacts and sending messages
    • Remarketing and behavioral targeting

So, for example, if you’re using all 5 categories, and you’re not using an iubenda cookie policy, you’ll need to specify "purposes": "1, 2, 3, 4, 5", if you don’t use Measurement (id 4) you can simply specify "purposes": "1, 2, 3, 5" and so on.

Note: to be effective, this parameter requires the parameter perPurposeConsent to be set to true (see above for further details).

listPurposes (boolean, default false) – If true, it displays purposes in the first layer of the cookie banner/consent banner (to be effective, perPurposeConsent must be set to true). This option must be contained within the banner {} object.

banner.showPurposesToggles (true/false, default false) – Setting this parameter to true, gives users granular control in the first layer of the cookie banner over which categories of cookies they consent to. The categories (Necessary, Functionality, Experience, Measurement, Marketing) are displayed along with a toggle so that users can quickly either grant or reject consent for the particular processing purpose.

Consider that the categories displayed in the toggles are automatically detected and passed from your iubenda Cookie Policy to the Privacy Controls and Cookie Solution or, if you’ve customized them, from the categories listed in the purposes parameter.

2.2 US State laws

❗ Important

We’ve added a new compliance setting: US State Laws, to help you meet the requirements of the following US state privacy laws: CCPA/CPRA and VCDPA. It offers broader support to the new US legislation and replaces the CCPA option.

enableUspr (boolean, default false) – If true, you’ll enable/make available the US functionality in the Privacy Controls and Cookie Solution (without actually applying it).

usprApplies (undefined/boolean, default undefined) – If enableUspr is true, countrydetection is true, upsrApplies is undefined, the US regulations are applied to US users only. If set to true US legislation is always applied.

usprPurposes (string, default undefined) comma separated Ids: e.g. usprPurposes:s,sh,sd5
this is the list of purposes handled by the CS:

  • s → selling of personal info (same as CCPA s)
  • sh → sharing of personal info
  • adv → targeted advertising

Sensitive data:

  • sd5 → Sensitive Data, Citizenship or Immigration Status
  • sd8 → Sensitive Data, Precise Geolocation Data
  • sd9 → Sensitive Data, Consumer’s Social Security, Driver’s License, State Identification Card, or Passport Number

showBannerForUS (true/false, default false) if set to true a banner will be served to the users. If there’s a sensitive data in usprPurposes, showBannerForUSis forced to true.

privacyPolicyNoticeAtCollectionUrl (string, default undefined) the URL to the notice at collection, section of the privacy policy.

usPreferencesWidgetDisplay (boolean/string/undefined, default undefined) – Controls USPR widget visibility and position. Accepted values: top-left, top-right, bottom-left, bottom-right, center-left, center-right, anchored-top-left, anchored-top-right, anchored-bottom-left, anchored-bottom-right, anchored-center-left, anchored-center-right, inline-center, inline-left, inline-right (show at default inline-center), undefined (smart defaults). Provides flexible widget placement.

Classes

iubenda-cs-uspr-link – Add this class to any element of the page to allow users to open the notice at collection.

iubenda-cs-preferences-link – Add this class to any element of the page to allow users to update their preferences and open the 2nd layer.

CCPA

enableCcpa (boolean, default false) – If true, you’ll enable/make available the CCPA functionality in the Privacy Controls and Cookie Solution (without actually applying it).

ccpaApplies (boolean, default undefined) – If true, you’ll apply CCPA protections to the current user.

ccpaNoticeDisplay (boolean, default true) – If false, you won’t display an actual banner to notify users about CCPA (effective only if GDPR doesn’t apply).

ccpaAcknowledgeOnDisplay (boolean, default false) – If ccpaNoticeDisplay: true, allows you to specify what constitutes acknowledgment of the notice: the simple loading of the notice (true) or the explicit interaction after the notice has loaded (false).

ccpaAcknowledgeOnLoad (boolean, default false) – If set to true and ccpaAcknowledgeOnDisplay: false, the notice is intended acknowledged at the page loading.

ccpaLspa (boolean, default undefined) – Allows you to specify whether the transaction should be performed under the Limited Service Provider Agreement (LSPA) by IAB.

Classes

iubenda-ccpa-opt-out – By adding this class to any element of the page, the click on the item triggers the opening of a dialog where the user can confirm their intention to opt-out from the sale of their personal information (“Do Not Sell My Personal Information” link).

2.3 LGPD

enableLgpd (boolean, default false) – If true, you’ll enable/make available the LGPD functionality in the Privacy Controls and Cookie Solution (without actually applying it).

lgpdAppliesGlobally (boolean, default true) – If true, you’ll apply LGPD protections to all users. Set this parameter to false and countryDetection:true to request LGPD consent to Brazilian users only.

lgpdApplies (boolean, default undefined) – If false, you won’t apply LGPD protections to the current user and he will not be shown the cookie banner/consent banner. This behavior applies regardless of the value of lgpdAppliesGlobally (whether it is true or lgpdAppliesGlobally is false with countryDetection : true )

Please note that all the parameters available for the GDPR can also be used for LGPD configuration.

Major advertising networks now require publishers to gain consent before showing personalized ads. In this guide you’ll find out how you can meet this requirement with the IAB Transparency and Consent Framework and our Privacy Controls and Cookie Solution.

enableTcf (boolean, default false) – If true, users will be able to manage their advertising tracking preferences according to the IAB Transparency and Consent Framework.

googleAdditionalConsentMode (boolean, default false) – If set to true, you’ll be able to gather consent for Google ad partners that are not yet part of the Transparency and Consent Framework, but are on Google’s Ad Tech Providers (ATP) list.

tcfPurposes (object) – TCF v2.0 has 10 purposes, each having an id:

  1. Store and/or access information on a device
  2. Select basic ads
  3. Create a personalized ads profile
  4. Select personalized ads
  5. Create a personalized content profile
  6. Select personalized content
  7. Measure ad performance
  8. Measure content performance
  9. Apply market research to generate audience insights
  10. Develop and improve products

With TCF v2.0 you can:

  • limit the legal basis to consent only or to legitimate interest only, as well as both; and
  • choose which TCF purposes to prompt

Here’s how to do it. Thanks to tcfPurposes, in the following example we’ll:

  • disable the purpose number 1 (“Store and/or access information on a device”, set to consent_not_needed, possible only if our legislation does not require consent for this purpose) *,
  • disable the purpose number 2 (“Select basic ads”, set to false),
  • limit the legal basis to legitimate interest only (li_only) for purpose number 4 (“Select personalized ads”), and
  • limit the legal basis to consent only (consent_only) for purpose number 7 (“Measure ad performance”)
_iub.csConfiguration = {
    "lang": "en",
    "siteId": xxxxxx, //use your siteId
    "cookiePolicyId": yyyyyy, //use your cookiePolicyId
    "enableTcf": true,
    ...
    "tcfPurposes": {
        "1": "consent_not_needed",
        "2": false,
        "4": "li_only",
        "7": "consent_only"
    },
    "tcfPublisherCC": "DE",
    "banner": {
        ...
    }
}

* Note about PurposeOneTreatment: previously, in some countries it was not required get user consent for purpose number 1 (“Store and/or access information on a device”). In those cases, asking for consent for purpose one could be disabled by using "1": "consent_not_needed". However since this option should only be enabled if legally supported by the legislation that applies to you, and, at the time of writing, no EU country currently supports this legislatively – we strong advise against using it.

askConsentIfCMPNotFound (boolean, default true) – If set to true, and the IAB Framework preference is not found, the Privacy Controls and Cookie Solution will, by default, request a new consent from users that had provided consent prior to the activation of the Framework. Set this option to false to disable this default behavior.

newConsentAtVendorListUpdate (number, default undefined) – Number of days to wait to trigger a new consent request after the vendorlist.json is updated. If set to undefined, users who have already given consent will not be shown the cookie banner/consent banner again, and consent for new vendors will be set to off. If set to 0 users will get prompted with a new consent request whenever the vendor list is updated.

tcfPublisherCC (string, default null) – Two-letter country code expressed in ISO 3166-1 standard that determines the country legislation of reference . Normally corresponds to the country code of the country in which the publisher’s business entity is established. You can use this parameter to set the publisher’s country code in the TCF preference string when the TCF purpose “1” is set to “consent_not_needed

acceptTcfSpecialFeaturesWithAcceptBtn (string, default true) – If false and the user clicks the Accept button, the TCF Special Features are not enabled and saved in the TCF consent string.

tcfVendors (array/string, default undefined) – List of enabled TCF vendors. Can be an array of vendor IDs ([1, 5, 10]) or a comma-separated string of IDs ('1,5,10'). When unset, all vendors are enabled. Controls which vendors users can consent to.

tcfPublisher (array, default []) – Array containing 'consent' and/or 'li' (legitimate interests) strings to enable the TCF publisherTC segment. Controls whether the publisher requests consent, legitimate interests, or both for their own purposes.

tcfHideLiWithoutPurposes (boolean, default false) – When true, legitimate interest purposes without any enabled purposes in TCF are hidden from the preferences panel. Simplifies the UI when legitimate interest purposes are not in use.

Classes

iubenda-advertising-preferences-link – By adding this class to any element of the page, the click on the item triggers the opening of the advertising tracking settings modal (allowing users to update their TCF preferences even after closing the cookie banner/consent banner).

Please note that as an alternative to this specific TCF class, you can also use the “generic” iubenda-cs-preferences-link, the result will be the same.

iubenda-vendor-list-link – Add this class to any element of the page to allow users to reopen the TCF vendor list.

2.5 FADP / Swiss

Use these parameters to configure support for the Swiss Federal Act on Data Protection (FADP).

enableFadp (boolean, default false) – When true, enables FADP (Swiss Federal Act on Data Protection) support. When false (default), FADP features are disabled. Required for Swiss compliance.

fadpApplies (boolean/undefined, default undefined) – Explicitly controls FADP applicability. Possible values: undefined (auto-detect), true (always apply), false (never apply). User values only take effect when GDPR and LGPD do not apply.

showBannerForCH (boolean, default false) – When true, displays the banner when only FADP applies. When false (default), the banner is hidden for FADP-only scenarios. Controls Swiss users’ banner visibility.

applyGdprForCH (boolean, default true) – When true (default), GDPR is applied to users in Switzerland (CH). When false, GDPR is not applied for Swiss users. Controls dual-law compliance for Switzerland.

3. Style and text

3.1 Format and Position

position (string, default “float-top-center”) – It defines the position of the cookie banner/consent banner. Available values: top, bottom, float-top-left, float-top-right, float-bottom-left, float-bottom-right, float-top-center, float-bottom-center and float-center.

backgroundOverlay (boolean, default false) – Set this parameter to true in order to add an opaque background overlay effect to the rest of the page when the cookie banner/consent banner is shown.

3.2 Theme

logo (string) – URL (https recommended) or base64 equivalent of an image to be used as a logo for the header of the cookie banner/consent banner. Use a white SVG on transparent background for best result.

brandTextColor (string, default “#000”) – Text color of the header of the modal/cookie banner/consent banner.

brandBackgroundColor (string, default “#fff”) – Background color of the header of the cookie banner/consent banner.

Banner colors

backgroundColor (string, default “#000”) – The background color of the banner.

textColor (string, default “#fff”) – The color of the banner’s text.

Buttons

acceptButtonColor (string, default “#0073ce”) – Background color of the “Accept” button.

acceptButtonCaptionColor (string, default “#fff”) – Text color of the “Accept” button.

customizeButtonColor (string, dark theme default “#212121”, light theme default “#dadada”) – Background color of the “Learn more and customize” button.

customizeButtonCaptionColor (string, dark theme default “#fff”, light theme default “#4d4d4d”) – Text color of the “Learn more and customize” button.

rejectButtonColor (string, default “#0073ce”) – Background color of the “Reject” button.

rejectButtonCaptionColor (string, default “#fff”) – Text color of the “Reject” button.

continueWithoutAcceptingButtonColor (string, default “#fff”) – Background color of the “Continue without accepting” button.

continueWithoutAcceptingButtonCaptionColor (string, default “#000”) – Text color of the “Continue without accepting” button.

banner.outlineColor (string, default ”) – Border/outline color for the banner. Use CSS color values (hex, rgb, etc.). Empty string removes the outline.

banner.linksColor (string, default ”) – Color for text links within the banner. Use CSS color values (hex, rgb, etc.). Empty string uses the default text color. Affects cookie policy and privacy policy links.

Banner V2 colors

The following color properties apply to Banner V2 only and require useUIModule: true.

banner.primaryColor (string, default ‘#1CC691’) – Primary accent color used throughout Banner V2. Applied to buttons, highlights, accent elements, and interactive components. Banner V2 only, requires useUIModule: true.

banner.footerBackgroundColor (string, default ‘#D2F4E9’) – Background color for the banner footer section. Typically uses a lighter shade of the primary color. Banner V2 only, requires useUIModule: true.

banner.footerTextColor (string, default ‘#1D5040’) – Text color for the banner footer. Default is a dark shade ensuring readability against the footer background color. Banner V2 only, requires useUIModule: true.

banner.pillsBackgroundColor (string, default ‘#D2F4E9’) – Background color for banner purpose toggles/pills. Typically a light shade for good contrast with toggle icons and labels. Banner V2 only, requires useUIModule: true.

banner.pillsTextColor (string, default ‘#1D5040’) – Text color for banner purpose toggles/pills. Default ensures readability against the pills background. Banner V2 only, requires useUIModule: true.

Advanced settings

applyStyles (boolean, default true) – By setting this parameter to false , the default style / CSS is not applied to the banner; this parameter can be useful, for example when you want to give the banner a different style than the standard one.

Custom CSS Endpoints

The recommended starting point for custom styling is to use our CSS as a base. This allows for the reapplication of styles excluded by the applyStyles option, with the benefit of being modifiable when implemented on your pages. For an illustration of a banner with custom CSS, refer to our example: “Banner with Custom CSS“.

Our system now automatically updates and serves custom styles via a CDN, optimizing the distribution and loading times of your custom styles.

Here are the endpoints for the custom CSS:

zIndex (number) – This is the zIndex of the banner’s div. The default value is 99999998.

3.3 Text

Font size

fontSize (string, default null) – The dimension of the banner’s text (including the closing button). If this option is active the possible values in the options banner.fontSizeCloseButton and banner.fontSizeBody will not be taken into account.

fontSizeCloseButton (string, default “20px”) – The dimension of the banner’s closing button.

fontSizeBody (string, default “14px”) – The dimension of the banner’s text content.

banner.logoAltText (string, default ‘logo’) – Alt text (accessibility) for the logo image when banner.logo is set. Important for screen readers and accessibility compliance (WCAG guidelines).

banner.ownerName (string, default null) – Shows the site/company owner name at the beginning of the banner notice. When provided, appears prominently in the banner text for transparency about the data controller.

banner.showTitle (boolean, default true) – When true (default), displays the banner title/heading. When false, hides the title for a more minimalist banner design.

Banner copy

content (string) – This is the textual content inside the cookie banner/consent banner. For example, for the English version the default value is:

Notice
We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the
%{cookie_policy_link}.

Please note that banner.content can be used only to customize the text of the notice, and it allows you to specify special formatting to the text with HTML tags, but if you want to modify the structure of the notice (e.g., adding buttons or special layouts), then you should use banner.html.

Shortcodes

Shortcodes are special words that can be used inside banner.content and banner.html as a placeholder for something else. You can use them when you want to customize the banner but still keep the UI elements that allow to have the standard Privacy Controls and Cookie Solution behavior.

Shortcodes available for banner.content:

  • %{cookie_policy_link} is replaced with a link to cookiePolicyUrl and with the caption specified in banner.cookiePolicyLinkCaption
  • %{advertising_preferences_link} is replaced with a link to the Transparency and Consent Framework widget
  • %{vendor_list_link} is replaced with a link to the list of Transparency and Consent Framework vendors
  • %{privacy_policy} is replaced with a link to the privacy policy (needed for CCPA)
  • %{do_not_sell} is replaced with a link to opt out of CCPA selling

Here’s an example of a cookie banner/consent banner with custom HTML and content.

Notes

  • %{cookie_policy_link} is the shortcode where the link of the cookie policy is placed. Remember that by default, the cookie policy linked in the banner is the one hosted on our servers. In order to change the default behavior, you need to modify the cookiePolicyUrl parameter (please refer to the related section of this guide for more information on cookiePolicyUrl).
  • The content of the cookie banner/consent banner will be localized in all languages available in the generator (the language in which to display the banner content is defined through the parameter lang).
  • If you’ve enabled the Transparency and Consent Framework, you may notice that the banner text is quite long – this is necessary to meet IAB’s minimum requirements. Therefore, please read IAB’s requirements carefully before editing the content of the banner.
  • In order to make sure that the cookie policy is correctly displayed, it’s necessary that the iubenda-cs-cookie-policy-lnk class is not used elsewhere on the same page.

acceptButtonCaption (string, default “Accept”) – The text of the banner’s “Accept” button.

customizeButtonCaption (string, default “Learn more and customize”) – The text of the banner’s “Learn more and customize” button.

rejectButtonCaption (string, default “Reject”) – The text of the banner’s “Reject” button.

closeButtonCaption (string, default “x”) – The text of the banner’s close button (formerly innerHtmlCloseBtn).

continueWithoutAcceptingButtonCaption (string, default “false”) – The text of the Continue without accepting button.

useThirdParties (boolean, default true) – If set to false, any mention of third parties and the use of related third-party cookies and trackers is excluded from the banner text.

showTotalNumberOfProviders (boolean, default false) – If set to true, the total number of providers specified in totalNumberOfProviders will be displayed,

totalNumberOfProviders (number, default undefined) when undefined and showTotalNumberOfProviders is true, it will show in the banner text the number of third parties involved in data processing added in the Privacy and Cookie Policy Generator. If set manually, it will show in the banner text the value specified.

Advanced settings

html (string, default null) – It is the default HTML of the banner, through this parameter it can be replaced with a customized one.

Notes: some elements are in any case necessary for the proper functioning of the banner, in particular:

  • div.iubenda-cs-content (the main container)
  • a.iubenda-cs-cookie-policy-lnk (the href link set to link to the cookie policy, ie https://www.staging.iubenda.com/privacy-policy/123456/cookie-policy?an=no&s_ck=false)
Shortcodes

Shortcodes are special words that can be used inside banner.content and banner.html as a placeholder for something else. You can use them when you want to customize the banner but still keep the UI elements that allow to have the standard Privacy Controls and Cookie Solution behavior.

Shortcodes available for banner.html:

%{banner_content} is replaced with the value specified in banner.content (or the default banner content). Please note that %{banner_content} is mandatory in case of TCF v2 (unless we’ve approved your custom text).

Here’s an example of a cookie banner/consent banner with custom HTML and content.

 

footer {} (object) – The options listed below must be contained within the footer {} object.

btnCaption (string) – Text of the button (located at the bottom of the “Tracking preferences” window, see per-category consent) used to save the consent preferences. The default value is “Save and continue”.

i18next

i18n {} (object) – You can translate/edit the texts of any Privacy Controls and Cookie Solution component via the i18n JavaScript library. To handle this, we have created a list of all components/strings that you can edit and/or localize, please see the following JSON files to find them:

Important: if you’ve enabled the Transparency and Consent Framework, in order to meet IAB’s minimum configuration requirements, you must necessarily use the official translations (see “List of translations for purpose descriptions v2.0”).

floatingPreferencesButtonDisplay (string, default false) – It defines the position of the privacy widget (a feature that allows your users to access and edit tracking preferences at any time after setting their initial preferences). Available values: false, true, top-left, top-right, bottom-left, bottom-right (default if set to true), anchored-center-left, anchored-center-right, anchored-top-left, anchored-top-right, anchored-bottom-left, anchored-bottom-right.

floatingPreferencesButtonCaption (string, default false) – Text of the privacy widget button.

floatingPreferencesButtonIcon (boolean, default true) – Icon of the privacy widget button.

floatingPreferencesButtonHover (boolean, default false) – Shows the privacy widget text on hover.

floatingPreferencesButtonRound (boolean, default false) – Adds the iubenda-tp-circle attribute to the privacy widget button.

floatingPreferencesButtonZIndex (default 2147483647) – Add this option to apply a custom zIndex to the floating preference button. This could be useful if some overlapping issues occur.

floatingPreferencesButtonColor (string, default “#fff”) – Background color of the privacy widget button.

floatingPreferencesButtonCaptionColor (string, default “#000”) – Text color of the privacy widget button.

privacyPolicyUrl (string) – Allows you to customize the privacy policy link.

cookiePolicyUrl (string) – This is the cookie policy’s URL linked within the banner. It is available in your privacy policy’s edit page in the “integration” tab. If you don’t define this parameter it will refer to the cookie policy generated by iubenda and hosted on our servers.

You can alternatively choose to host the cookie policy on a page of your website and thus fill this field with the related URL. Remember that if you decide to host the cookie policy on your own page, this page should not use cookies, beyond the technical ones. Note: this parameter will be ineffective if you are using a custom HTML for the banner (see the configuration banner.html below).

cookiePolicyInOtherWindow (boolean, default false) – If you set this parameter to true the privacy policy and the cookie policy will open in another window instead of the iubenda modal window.

cookiePolicyLinkCaption (string) – Anchor text of the link to the cookie policy (the default value is “cookie policy”). This option must be contained within the banner {} object.

5. Advanced settings

The options listed below must be contained within the banner {} object:

slideDown (boolean, default true) – You can set this parameter to false in order to disable the animation of the banner.

prependOnBody (boolean, default false) – If this parameter is set on true, the HTML code of the banner is injected into the site as the first element of the BODY. By default prependOnBody is set to false and the banner is placed as the last element of the BODY.

You must set prependOnBody on true when you want, for example, to place the banner above the header. In this way, the banner will be the first element on the page, and in order to display it on top of the header, simply apply a “padding-top” to the next item: #iubenda-cs-banner + * { padding-top: 180px; }

Example with the banner placed over the header.

reloadOnConsent (boolean, default false) – You can set this parameter to true if you want the page to be reloaded after the collection of the consent.

reloadOnConsentRequestTimeout (number, default 200) – When reloadOnConsent is true, specifies the timeout in milliseconds to wait for the ConS API request to complete before proceeding with the page reload. Prevents premature page reloads.

askConsentAtCookiePolicyUpdate (boolean, default false) – You can set this parameter to true if you want to request new consent when the Cookie Policy is updated.

enableRemoteConsent (boolean, default false) – You can set this parameter to true to enable a cross-site registration of the consent (it can be useful when the script is implemented in more than one websites of the same network). In particular, if you set this parameter to true, our solution creates a technical cookie on iubenda.com (domain) which is used when the cookie on the local domain is not found.

invalidateConsentWithoutLog (boolean, string, date, default true). When true, new consent will be requested whenever a user’s consent has not been found recorded within the Cookie and Consent Preference Log. 
If a date is set (format: “yyyy-mm-dd”) when consent collected prior to this date is not found within the Cookie and Consent Preference Log a new consent will be requested(e.g. invalidateConsentWithoutLog: "2022-01-10“)

googleConsentMode (boolean, string, default null). When null the CS automatically detects whether enabling Google Consent Mode (if a global window.dataLayer variable or a global gtag function is found).
If set to true the Privacy Controls and Cookie Solution always enables Google Consent Mode and defines a global window.dataLayer if not already defined.
If set to false the CS always disables Consent Mode.
Set this parameter to template if you are using the iubenda Google Tag Manager template and you want to embed the Privacy Controls and Cookie Solution code manually (as explained in this section).

Google Consent Mode options

The following properties allow you to fine-tune Google Consent Mode behavior.

googleAdsDataRedaction (boolean, default true) – Controls the value of Google Consent Mode’s ads_data_redaction parameter. When true, redacts non-essential ads data when consent is not given, protecting user privacy.

googleUrlPassthrough (boolean, default true) – Controls the value of Google Consent Mode’s url_passthrough parameter. When true, allows URL parameter passthrough for conversion tracking even without consent.

googleEnableAdvertiserConsentMode (boolean, default false) – When true, Google deduces Consent Mode consents from the TCF consent string automatically. Streamlines Google integration with TCF, eliminating the need for separate consent configuration.

googleConsentModeDataLayerName (string, default ‘dataLayer’) – Name of the JavaScript global variable to use for Google Consent Mode communication. Default is window.dataLayer. Allows custom dataLayer naming for environments with conflicting variable names.

emitGtmEvents (boolean, default false) – When true, Google Consent Mode integration emits iubenda_gtm_consent_event events for tracking. When false, no custom events are emitted. Useful for analytics and GTM tag triggering.

Microsoft integration

uetConsentMode (boolean/string/undefined, default undefined) – Controls UET (Universal Event Tracking) Consent Mode integration. Values: true (always send), false (never send), undefined (auto-detect via uetq). Integrates with the Microsoft ad platform.

5.2.1 Additional configuration

hasEmailMarketing (boolean, default true) – Controls whether the Newsletter Opt-in Booster widget bundle is loaded and displayed. Set to false to disable the widget entirely.

adPersonalization (boolean, default true) – For Banner V2: displays “(personalized ads)” text in the marketing purpose pill. For Banner V1: marks ads as personalized in the banner text. Controls ad personalization language in the UI.

hasCookiePolicy (boolean/undefined, default undefined) – Explicitly declares cookie policy availability. Values: true (available), false (not available), undefined (auto-detect). Used to optimize banner display logic and link visibility.

hasPrivacyPolicy (boolean/undefined, default undefined) – Explicitly declares privacy policy availability. Values: true (available), false (not available), undefined (auto-detect). Used to optimize banner display logic and link visibility.

preferencesLinkOpensBanner (boolean, default false) – When true, clicking the preferences link opens the banner instead of the 2nd layer preferences panel. When false (default), opens the full preferences panel. Controls link behavior for different UX flows.

useFetchForTracking (boolean, default false) – When true, tracking requests use the Fetch API (if available) instead of XMLHttpRequest. Provides better cross-domain request handling and modern async patterns.

useUIModule (boolean, default false) – When true, enables the Banner V2 design powered by the UI Module component system. When false (default), uses classic banner design.

headlessMode (boolean, default false)(Experimental) When true, disables all banner and UI elements, allowing programmatic consent management through the API. Useful for custom consent implementations or headless applications. The component still loads but remains invisible.

additionalPurposes (array, default []) – Array of custom purpose configurations beyond the standard purposes. Each item contains id (string), defaultLabel (string), defaultDescription (string), value (boolean), and readonly (boolean) properties. Allows extending consent purposes.

5.2.2 Storage configuration

The storage object controls how consent preferences are persisted. You can configure the default storage type and override it for individual items.

storage.type (string, default ‘cookie’) – Default storage type for preferences. Valid values: 'cookie', 'local_storage'. Controls where preferences are stored by default across all items.

storage.useSiteId (boolean, default false) – When false (default), cookiePolicyId is used as the storage identifier. When true, siteId is used instead. Controls preference storage grouping.

storage.autoSync (boolean, default false) – When true, enables automatic synchronization of preferences across browser tabs/windows. When false, no cross-tab sync. Improves multi-window UX.

storage.items.core (object, default {type: undefined}) – Storage configuration for core consent preferences. When type is undefined, uses the default storage.type.

storage.items.uspr (object, default {type: undefined}) – Storage configuration for USPR preferences. When type is undefined, uses the default storage.type.

storage.items.tcf (object, default {type: undefined}) – Storage configuration for TCF consent preferences. When type is undefined, uses the default storage.type.

storage.items.usprivacy (object, default {type: undefined}) – Storage configuration for CCPA (USPrivacy) preferences. When type is undefined, uses the default storage.type.

storage.items.granular (object, default {type: undefined}) – Storage configuration for Google Additional Consent Mode (granular) data. When type is undefined, uses the default storage.type.

storage.items.preferenceId (object, default {type: undefined}) – Storage configuration for preference history IDs. When type is undefined, uses the default storage.type.

5.3 Development

inlineDelay (integer, milliseconds, default 500) – The maximum time between the activations of snippets tagged with the class _iub_cs_activate-inline (the snippet tagged in this way are activated sequentially). By decreasing this value you will reduce the total time of activation. Caution: the default value is set in order for the snippets to work properly; reducing it may prevent the successful activation of some snippet. It is highly recommended to check the activation of the snippet shown on your page if this setting is changed.

rebuildIframe (boolean, default true) – Once the user’s consent has been recorded, the default behavior of the Privacy Controls and Cookie Solution is to fully regenerate (or reintegrate) the iframes previously modified. By setting this parameter to false, the iframes previously blocked are restored after the collection of consent.

Callbacks

callback {} (object) – This is the parameter through which you can define the callback that iubenda Privacy Controls and Cookie Solution can perform upon the occurrence of an event.

onReady (function) – If the consent of the user has not yet been processed (for example, because it’s his first visit) the onReady callback is invoked as soon as the banner cookie is displayed; on the contrary, if the user has already given their consent to the installation of cookies, this callback is invoked as soon as the iubenda Privacy Controls and Cookie Solution is initialized. The consent given or not is passed as an argument, which can be true or false.

onBannerShown (function) – Using this feature you can run a script when the banner is shown.

onBannerClosed (function) – Using this feature you can run a script when the banner is closed.

onCookiePolicyShown (function) – Called when the cookie policy is shown (either in modal window or on a separate page).

onConsentGiven (function) – This callback is invoked if the user has given the consent to the installation of cookies, both when consenting for the first time and in all subsequent visits.

onConsentFirstGiven (function) – It is invoked the first time that the user gives their consent and each time the user updates their preferences (for example by clicking on iubenda-cs-preferences-link and saving their new preferences). One of the following strings is passed as an argument: documentScroll, documentMoved, bannerXClose, documentClicked or cookiePolicyClosed.

onConsentRejected (function) – This callback is invoked if the user has rejected the consent to the installation of cookies.

onConsentFirstRejected (function) – Invoked when the consent has been rejected, the first time the user gives their preference (not on every page view, as onConsentRejected) and each time the user updates their preferences (for example by clicking on iubenda-cs-preferences-link and saving their new preferences).

onPreferenceExpressed (function) – It is invoked whenever a preference is expressed, be it accept or reject.

onPreferenceFirstExpressed (function) – Invoked the first time the user gives their preference (not on every page view, as onPreferenceExpressed) and each time the user updates their preferences (for example by clicking on iubenda-cs-preferences-link and saving their new preferences).

onPreferenceExpressedOrNotNeeded (function) – It is invoked whenever a preference is expressed or not needed, for example when:

  • gdprApplies:true and the user has expressed his preference, or
  • gdprApplies:false, or
  • gdprAppliesGlobally:false, countryDetection:true and the user is based outside the EU

onPreferenceNotNeeded (function) – It is invoked whenever a preference is not needed, for example when:

  • gdprApplies:false, or
  • gdprAppliesGlobally:false, countryDetection:true and the user is based outside the EU

onPreferenceChange (function) – It is invoked when user changes their preferences. And only when the previous preferences are different.

onConsentRead (function) – It is invoked the first time the user gives consent and each subsequent loading when the consent is detected. The callback onConsentGiven becomes an alias for onConsentRead and it is not invoked if the latter is defined.

onStartupFailed (function) – It is invoked in the case where the iubenda Privacy Controls and Cookie Solution fails the startup phase. An error message is passed as an argument.

onError (function) – It is invoked in the case where the iubenda Privacy Controls and Cookie Solution is experiencing an error. An error message is passed as an argument.

onFatalError (function) – It is invoked in the case where the iubenda Privacy Controls and Cookie Solution experiencing an error that does not allow it to continue. An error message is passed as an argument.

onActivationDone (function) – It is invoked when the snippet activation is complete.

onBeforePreload (function) – Invoked when the Privacy Controls and Cookie Solution preloads, that is before the cookies are loaded.

onCcpaAcknowledged (function) – Invoked when the CCPA notice has been acknowledged.

onCcpaFirstAcknowledged (function) – Invoked the first time the CCPA notice has been acknowledged.

onCcpaOptOut (function) – Invoked when the user has opted out from sale.

onCcpaFirstOptOut (function) – Invoked the first time the user has opted out from sale, and each time the user updates their preferences (for example by clicking on iubenda-ccpa-opt-out and saving their new preferences).

on2ndLayerShown (function) – Invoke when the second layer of the banner is shown.

onCookiePolicyShown (function) – Invoke when the cookie policy is shown (either in modal window or on a separate page).

View a sample configuration ↓

Debugging

skipSaveConsent (boolean, default false) – By setting this parameter to true, the consent is not saved in a preference cookie.

logLevel (string) – It defines the verbosity of the logger (available values: ‘debug’, ‘info’, ‘warn’, ‘error’, ‘fatal’; the default value is ‘nolog’).

preferenceCookie {} (object) – This is the parameter through which you can customize the lasting of the preference cookie iubenda installs in the user’s browser in order to record its consent. In particular, the object to be defined is expireAfter.

expireAfter (number, default 365) – It represents the number of days of validity of the consent given by the user on a given web site. Note: this value is updated at each subsequent visit by the user.

ccpaCookie {} (object) – Allows you to customize the expiration of the cookie that stores the acknowledgment of the notice. In particular, the object to be defined is expireAfter.

expireAfter (number, default 365) – Number of days of validity.

localConsentDomain (string, default null) – the domain on which you want to save the consent collected from the users. If not set, the consent will be saved in a cookie on the domain of the current page (for example, by visiting www.example.com, the consent will be saved in a cookie placed in the domain example.com).

If the default behavior is not appropriate, for example, if the website is located on the domain www.paesaggiurbani.italia.it the consent must be provided for paesaggiurbani.italia.it (and not for italia.it), in that case, you are required to set the localConsentDomain to the value ‘paesaggiurbani.italia.it’.

Notice: in a similar scenario, if the parameter is not given, the banner could continue to appear to the same user at each subsequent visit/page view.

localConsentDomainExact (boolean, default null) – This allows you to specify the exact domain, in which you want to save the consent provided by the user.

Note: if both options (localConsentDomain and localConsentDomainExact) are configured, only the localConsentDomainExact option is considered.

localConsentPath (string, default ‘/’) – The path within the local domain, in which you want to save the consent provided by the user. By default, the user’s consent is saved in the local domain within the cookie in the path ‘/’. This way, the cookie is available regardless of the page of the domain being accessed.

If you, for example, don’t want the preference cookie set for www.example.com/percorso1 to also apply to www.example.com/percorso2 (by browsing), and vice versa, you will need to provide the value ‘/percorso1’ for this parameter in the first case, and ‘/percorso2’ in the second case.

Further parameters

whitelabel (boolean, default true) – Set this parameter to false to show the iubenda branding on the second layer.

invalidateConsentBefore (“YYYY-MM-DD”, milliseconds from epoch, default null) – All consents collected prior to this date will be invalidated. Consents collected on this date and in the future will not be invalidated.

maxCookieSize (number, default 4096) – To avoid browsers reject cookies longer than 4096 characters, the Privacy Controls and Cookie Solution allows to split cookies in multiple chunks. With maxCookieSize you can configure the maximum length of every chunk (see also maxCookieChunks).

maxCookieChunks:(number, default 5) – With this parameter you can configure the maximum number of chunks into which cookies can be split (see also maxCookieSize).

Note: if the cookie to be saved is longer than maxCookieSize * maxCookieChunks (20480 chars with default values), then the cookie is not saved.

timeoutLoadConfiguration (integer, milliseconds, default 30000) – The amount of time to wait for the remote configuration before stating that a timeout occurred. In case of a slow network, by increasing this value, you’ll make sure that the Privacy Controls and Cookie Solution gets the needed resources on time.

startOnDomReady (boolean, default true) – If true banner rendering and/or activation of blocked snippets will be performed as soon as the document status is ‘loaded’ (i.e. when the DOM reaches the ‘loaded’ status). If the option is set to false, then the Privacy Controls and Cookie Solution will start when the page has been fully loaded (i.e. when the DOM status is ‘completed’ and all resources included in the page have been loaded).

Classes

iubenda-cs-close-btn – By adding this class to any element of the page, the click on the item closes the banner and assumes that the consent is provided (in an equivalent manner to the click on the X button of the banner).

Caution: Some national DPAs in Europe will NOT consider such a consent mechanism as allowed, therefore, you should carefully evaluate such an addition according to your applicable law.

iubenda-cs-cookie-policy-lnk – By adding this class to any element of the page, the click on that element allows the displaying of the Cookie Policy (it’s equivalent to the click on the link to the Cookie Policy). Note: in order to ensure proper display of the cookie policy, the class iubenda-cs-cookie-policy-lnk (assigned to the link to the cookie policy in the banner) must not be used elsewhere on the page.

iubenda-cs-preferences-link – Add this class to any element of the page to allow users to update their cookie preferences even after closing the cookie banner/consent banner.

5.4 Examples

Here is an example of configuration with the optional parameters:

<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": 896537, //usa il tuo siteId
        "cookiePolicyId": 8207462, //usa il tuo cookiePolicyId
        "enableRemoteConsent": "false",
        "banner": {
            "position": "top",
            "slideDown": "false",
            "content": "This website or its third-party tools use cookies. Please refer to the %{cookie_policy_link} if you want to learn more or withdraw your consent.",
            "cookiePolicyLinkCaption": "cookie policy",
            "backgroundColor": "#CCC",
            "textColor": "#000",
            "fontSize": "14px",
            "innerHtmlCloseBtn": "OK"
        },
        "callback": {
            "onPreferenceExpressed": function(preference) {
                console.log('onPreferenceExpressed', preference);
            }
        },
        "preferenceCookie": {
            "expireAfter": 180
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Other examples of possible configurations:

5.5 Custom placeholder for blocked snippets

You may want to show a custom notice that replaces content that you can’t show until consent is given, or because consent has been rejected for that purpose and is therefore blocked by the Privacy Controls and Cookie Solution.

To do this, you can create a div element, with the custom notice you want to show in place of the unavailable content, and a priorly blocked script that removes the div, once the consent is granted.

Example

<div id="content-before-consent"> This will be removed as
soon as the user gives consent to purpose X</div>
      // Where X is the purpose for which consent needs to be given to
         run that script
<script type="text/plain" class="_iub_cs_activate" data-iub-purposes="X">
     // Where X is the purpose for which consent needs to be given to
        run that script
  ;(function() {
    var divToRemove = document.getElementById('content-before-consent');
    if (divToRemove && divToRemove.parentNode) {
      divToRemove.parentNode.removeChild(divToRemove);
    }
  })();
</script>

5.6 Inline activator

It’s possible to include the part of the code relative to the scripts, directly in-page (inline); this code is known as the inline activator. Scripts can be activated through the inline activator even if the iubenda_cs.js primary resource is generically unavailable or in error.

The inline activator only guaranties script activation but can also take on a provided permission (see the following forceSafeActivation option). It cannot be used to show the banner, the cookie policy or manage the obtaining of consent.

It serves only as another layer of protection in case of errors and does not at all act as a substitute for the main iubenda Privacy Controls and Cookie Solution code.

Note that the inline activator will only invoke the onActivationDone, while others will be ignored.

Two additional configuration options are available for the inline activator:

  • safeTimeout (milliseconds, default 0) – the time the inline activator waits before it’s starting to work.
  • forceSafeActivation (boolean, default false) – If set to true scripts are activated independently of the given consent. If set to false the inline activator activates the scripts only if consent has been given (as memorized in the preference cookie of the domain of the host page).

The inline activator is available at:

IAB Transparency and Consent Framework

If you’ve enabled IAB Transparency and Consent Framework (TCF) compatibility for the customization of advertising tracking preferences, you can use the inline activator both for safe.js and safe-tcf-v2.js

safe-tcf-v2.js is available at:

Examples

The content of safe.js(and safe-tcf-v2.js) has to be included in-page after the initial configurations and before the code that loads iubenda_cs.js.

CURRENT
<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
    _iub.csConfiguration.safeTimeout = 500; //custom option
    _iub.csConfiguration.forceSafeActivation = false; //custom option
</script>
<!-- inline activator - safe.js (current channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/safe.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

Sample configuration with IAB TCF v2.0 enabled:

<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "enableTcf": true,
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stub-v2.js"></script>
<!-- inline activator - safe.js (current channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/safe.js and paste here
    //]]>
</script>
<!-- inline activator - safe-tcf-v2.js (current channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/tcf/safe-tcf-v2.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
BETA
<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
    _iub.csConfiguration.safeTimeout = 500; //custom option
    _iub.csConfiguration.forceSafeActivation = false; //custom option
</script>
<!-- inline activator - safe.js (beta channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/beta/safe.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/beta/iubenda_cs.js" charset="UTF-8" async></script>

Sample configuration with IAB TCF v2.0 enabled:

<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "enableTcf": true,
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/beta/stub-v2.js"></script>
<!-- inline activator - safe.js (beta channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/beta/safe.js and paste here
    //]]>
</script>
<!-- inline activator - safe-tcf-v2.js (beta channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/tcf/beta/safe-tcf-v2.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/beta/iubenda_cs.js" charset="UTF-8" async></script>
STABLE
<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
    _iub.csConfiguration.safeTimeout = 500; //custom option
    _iub.csConfiguration.forceSafeActivation = false; //custom option
</script>
<!-- inline activator - safe.js (stable channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/stable/safe.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/stable/iubenda_cs.js" charset="UTF-8" async></script>

Sample configuration with IAB TCF v2.0 enabled:

<script type="text/javascript">
    var _iub = _iub || &#91;];
    _iub.csConfiguration = {
        "lang": "en",
        "enableTcf": true,
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
< script type="text/javascript" src="//cdn.iubenda.com/cs/tcf/stable/stub-v2.js"></script>
<!-- inline activator - safe.js (stable channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/stable/safe.js and paste here
    //]]>
</script>
<!-- inline activator - safe-tcf-v2.js (stable channel) -->
<script type="text/javascript">
    //<!&#91;CDATA&#91;
    //copy content from cdn.iubenda.com/cs/tcf/stable/safe-tcf-v2.js and paste here
    //]]>
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/stable/iubenda_cs.js" charset="UTF-8" async></script>

The activator code is an integral part of the iubenda Privacy Controls and Cookie Solution and as such can be modified to include new features, upgrades and fixes.

To facilitate the management of the activator version in your page, the _iub.csSafeActivatorVersion variable is available, which recalls the iubenda_cs.js version from which the activator was extracted.

5.7 API

The iubenda Privacy Controls and Cookie Solution features a JS API for easy interaction with some of its main functions.

Syntax: _iub.cs.api.METHOD_NAME

The available methods are:

printErrors() – Prints any errors in the iubenda Privacy Controls and Cookie Solution on the browser console.

showCP() – Shows the Cookie Policy (similarly to when you click on the link to the Cookie Policy in the banner or on another link with the iubenda-cs-cookie-policy-lnk class, as described here).

openPreferences() – Allows users to update their cookie preferences even after closing the cookie banner/consent banner (similarly to when they click on an element with the iubenda-cs-preferences-link class).
openPreferences({ acceptPurposes [purposes] }) Allows users to update their cookie preferences, opening the second layer of the banner with pre-selected purposes.
❗Please note that the use of this parameter is available only to Ultimate plan users

getPreferences() – Retrieves the stored user’s cookie preferences at that moment in time. The return object varies based on applicable legislation and selected purposes. Additionally, it can return properties for CCPA (ccpa), TCF v2 (tcfv2), and Google Additional Consent Mode (gac). It is important to note that this method does not return the GPP (Global Privacy Platform) string.

{
"id": "xxxxx",
"purposes": {
"1": true,
"2": false,
"3": false,
"4": false,
"5": false
},
"ccpa": "1YN-",
"uspr": {
"s": true,
"sh": true,
"adv": true
}
}

isPreferenceExpressed() – Returns the status of the preference expressed by the user.
true if a preference has been expressed
false if a preference has not been expressed

resetCookies() – Use this method to reset preference cookies.

showTcfVendors() – Reopens the TCF vendor list (similarly to when users click on an element with the iubenda-vendor-list-link class).

consentGiven() – Provides consent. The method accepts the following as optional parameters:

  • eventName (string) – One of the following: documentClicked (default), documentScrolleddocumentMovedbannerXclose, cookiePolicyClosed. Indicates the type of action by which consent is provided.
  • force (boolean)true | false (default) – If false , iubenda CS ensures that the banner is shown before actually accepting the consent; instead, by providing this option to true, consent is received in any case. Note: the call to this method assumes the consent provided is completely equivalent to when it is provided via UI, eg with page scrolling. Therefore, all actions downstream of the consent provided are performed, including the updating of the preference cookie, the activation of the previously blocked snippets and the invocation of the onConsentFirstGiven and onConsentReadcallbacks. To activate only the snippets there’s the activateSnippets() method.

activateSnippets() – Activate the previously blocked snippets. This method can be invoked repeatedly – already-activated snippets will not be taken into account. It is therefore useful in those installations where, upon collection of consent, previously blocked content that now needs to be activated, is dynamically added to the page (eg lazy loading or infinite scrolling).

The option runOnActivationDoneCallback (boolean, default false), if true, will execute the onActivationDonecallback upon completion of the activation of the snippet (see onActivationDone callback).

isConsentGiven() (DOMElement, default window.document) – Returns true if the consent was given, otherwise it returns false.

Note: you cannot use this function if you’ve set banner.rejectButtonDisplay: true or perPurposeConsent: true. Also, if you’ve enabled the Transparency and Consent Framework, you mandatorily need to add the synchronous activator (safe-tcf-v2.js).

setConsentOnScrollOnElement() (boolean) – The call to this method defines the element on which the scroll will be observed for the purpose of consent. This method is useful when you want to take advantage of the consentOnScrollOnElement option, but the DOMelement is not yet available when the Privacy Controls and Cookie Solution is initialized. In this regard it’s possible to use the onBannerShowcallback (example) which occurs when the CS is initialized.

storeConsent() – Stores consent in cookies. If, for example, you want to migrate consents from a previous provider, you could call this method inside the onBeforePreload callback when consent is already given by another platform. Also, if you’re a vendor, you can take advantage of storeConsent() to test our solution (see this demo on CodePen).

gdprApplies() (boolean) – Returns true if the GDPR protections are applied to the current user, otherwise it returns false.

ccpaApplies() (boolean) – Returns true if the CCPA protections are applied to the current user, otherwise it returns false .

askCcpaOptOut() – Pops up the dialog to request confirmation for the opt-out from sale.

isCcpaAcknowledged() – Returns whether the CCPA notice has been acknowledged.

isCcpaOptedOut() – Returns whether the user has opted out from sale.

acceptAll() – Accepts everything (purposes or binary consent, all TCF entities, all Google Additional Consent vendors, activates scripts) as soon as it is invoked regardless of user’s preferences.
❗Please note that the use of this parameter is available only to Ultimate plan users

rejectAll() – Rejects all cookies.

Notes: you can invoke Privacy Controls and Cookie Solution API methods also from an iframe.

See also

The post How to Configure Your Privacy Controls and Cookie Solution (Advanced Guide) appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Generate a Cookie Policy for the Cookie Banner https://www.iubenda.com/en/help/1175-generate-cookie-policy/ Tue, 28 Jul 2015 14:15:46 +0000 http://help.iubenda.com/?p=1175 Legacy user? See the old guide here → First, from your dashboard, select the website for which you want to add the cookie policy, click on “Edit” under “Privacy and Cookie Policy”, and find the “Cookie Policy” box in the right column: Click on “Activate cookie policy” to configure the use of so-called “technical” cookies […]

The post How to Generate a Cookie Policy for the Cookie Banner appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>

Legacy user? See the old guide here →

First, from your dashboard, select the website for which you want to add the cookie policy, click on “Edit” under “Privacy and Cookie Policy”, and find the “Cookie Policy” box in the right column:

Click on “Activate cookie policy” to configure the use of so-called “technical” cookies and their cookie lifetime. Then click on “Save changes”. Your cookie policy will now be generated automatically — you don’t have to do anything else.

💡To know more about the cookie lifetime feature, read our dedicated guide → How to Display the Cookie Lifetime in Your Cookie Policy

Privacy Controls and Cookie Solution

Please see our guide to the Privacy Controls and Cookie Solution if, in addition to the cookie policy, you also want to use the Privacy Controls and Cookie Solution to manage:

  • banner visualization;
  • consent;
  • preferences;
  • third party script blocking (prior consent).

You can find the embedding options for your cookie policy and the Privacy Controls and Cookie Solution in the editing section of the website:

The Privacy Controls and Cookie Solution is available – with some limitations – also with the Free plan. Check out features and prices on the Pricing page.

How can I find out which cookies are installed by my website?

We invite you to read this article. There are also browser extensions (such as Ghostery or BuiltWith) that allow you to quickly inspect the site in real time.

The post How to Generate a Cookie Policy for the Cookie Banner appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
What’s the Difference Between the Integration of the Privacy Policy and the Privacy Controls & Cookie Solution? https://www.iubenda.com/en/help/2824-what-is-the-difference-between-the-integration-of-the-privacy-policy-and-the-one-of-the-cookie-solution/ Mon, 15 Sep 2014 08:35:32 +0000 http://help.iubenda.com/?p=2824&lang=en The iubenda online service allows you to generate a privacy and a cookie policy for your website/app. It also allows you to comply with the EU Cookie Law through what we call the iubenda Privacy Controls and Cookie Solution (which handles the cookie banner and the blocking of scripts/cookies until your users express their consent). […]

The post What’s the Difference Between the Integration of the Privacy Policy and the Privacy Controls & Cookie Solution? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
The iubenda online service allows you to generate a privacy and a cookie policy for your website/app. It also allows you to comply with the EU Cookie Law through what we call the iubenda Privacy Controls and Cookie Solution (which handles the cookie banner and the blocking of scripts/cookies until your users express their consent).

The online policy generator and the Privacy Controls and Cookie Solution are thus different services and must both be integrated into your website/app as described below.

Integration of the privacy/cookie policy

In order to generate a privacy policy for your website/app, please refer to the Getting started with iubenda guide. Once the policy has been generated, you will be able to integrate it using one of the following methods:

The cookie policy will be automatically generated based on the content of your privacy policy. Even if the cookie policy is linked inside the privacy policy by default, you can also embed it into any page of your site following the instructions provided in this guide Can I integrate the Cookie Policy within my website using the direct text embedding and API?.

Notice: The Privacy Policy must be linked and available from every page of your website, for this reason, we suggest you add its link to the footer of the website.

Integration of the Privacy Controls and Cookie Solution

The iubenda Privacy Controls and Cookie Solution is the answer to managing the technical requirements of the Cookie Law (following the EU Directive).
It allows you to display a well recognized cookie banner, collect consent from your users and to preventively block the scripts that could install cookies. For further information please refer to this guide iubenda Privacy Controls and Cookie Solution – Introduction and Getting Started.

Integrating it into your website is simple. Insert the following script in the <head> tag as the first element:

<script src="https://embeds.iubenda.com/widgets/[site-code].js"></script>
<script type="text/javascript">
    var _iub = _iub || [];
    _iub.csConfiguration = {
        "lang": "en",
        "siteId": XXXXXX, //use your siteId
        "cookiePolicyId": YYYYYY, //use your cookiePolicyId
        "banner": {
            "position": "float-top-center",
            "acceptButtonDisplay": true,
            "customizeButtonDisplay": true
        }
    };
</script>
<script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>

The code above is an example. To generate your own code, just click on “Activate/Configure cookie policy” which you will find located in the sidebar on the right (inside the management page of each privacy policy within your own iubenda account).

For more information on how to install the banner on your site and how to stylize it, as well as program its behaviour, please refer to Technical documentation for the iubenda Privacy Controls and Cookie Solution: banner, cookie policy and consent management.

NB: after having installed the Privacy Controls and Cookie Solution, you must also configure the blocking of scripts that could install cookies by choosing one of the methods described in this guide: iubenda Privacy Controls and Cookie Solution: preventing code execution that could install cookies.

The remote configuration feature simplifies implementation by automatically applying all changes made in the Privacy Controls and Cookie Solution configurator to your website—no re-embedding required. This makes it easier to keep your site up-to-date.

With the latest update, even changes like Custom CSS, the TCF tile, and US laws support are applied automatically.

Finally, if you use WordPress or Joomla! the installation of the Privacy Controls and Cookie Solution can be simplified with our dedicated plugins:

Important

The iubenda plugins are useful when it comes to simplifying the installation of the Privacy Controls and Cookie Solution, but they are not meant to facilitate the privacy/cookie policy integration. Do not insert the code of the privacy/cookie policy inside the plugin.

The post What’s the Difference Between the Integration of the Privacy Policy and the Privacy Controls & Cookie Solution? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
What Is the Difference Between the Privacy and Cookie Policy Generator and the Privacy Controls and Cookie Solution? https://www.iubenda.com/en/help/3025-what-is-the-difference-between-the-privacy-and-cookies-policy-generator-and-the-cookie-solution/ Mon, 15 Sep 2014 08:30:10 +0000 http://help.iubenda.com/?p=3025&lang=en Our Privacy and Cookie Policy Generator and the Cookie Solution are two different but complementary services. Let’s see when they are required and how they work, or jump directly to the section on the difference between the Cookie Policy and Cookie Solution. Privacy and Cookie Policy Generator The privacy policy, or privacy notice, is a document […]

The post What Is the Difference Between the Privacy and Cookie Policy Generator and the Privacy Controls and Cookie Solution? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
Our Privacy and Cookie Policy Generator and the Cookie Solution are two different but complementary services. Let’s see when they are required and how they work, or jump directly to the section on the difference between the Cookie Policy and Cookie Solution.

Privacy and Cookie Policy Generator

The privacy policy, or privacy notice, is a document in which the data owner (the person or entity that runs a website/app) outlines the methods and purposes of its data processing to Users – ie users who visit or who use the website/app.

If a website/app collects personal data, the Data Owner must inform users of this fact by way of a privacy policy. All that is required to trigger this obligation is the presence of a simple contact form, Google Analytics, a cookie or even a social widget; if you’re processing any kind of personal data, you definitely need one.

The cookie policy is a section of the privacy policy dedicated to cookies. Cookies are able to track user behavior and are therefore a potential privacy risk. Our cookie policy details the purpose of the cookies’ installation, names the third parties who install or may install cookies through the website and provides links to said third parties’ respective privacy policy and possible consent forms.

The privacy and cookie policy generator allows you to create a customized privacy and cookie policy for your website/app in a few clicks without the need for technical or legal skills. These solutions are currently available in 11 languages: Italian, US English, UK English, French, German, Spanish, Brazilian Portuguese, Portuguese, Russian, Dutch and Danish.

For further information on how to get started with generating a policy, see the following guide: How to Generate a Policy.

Integration methods

Once generated, the privacy policy can be integrated to the website/app, by choosing one of our integration methods.

Please note: once integrated, the privacy policy must be accessible from every page of your website/app, by for example including a link in the footer.

Privacy Controls and Cookie Solution

The Privacy Controls and Cookie Solution is a complete solution for meeting the technical requirements of the cookie law as required by Italian and European regulations.

How the cookie policy relates to the Privacy Controls and Cookie Solution

The Privacy Controls and Cookie Solution requires that you link to a cookie policy from your banner as legally required. If you have the cookie policy feature active on your iubenda account (as described above), the Cookie Solution automatically integrates your cookie policy into the solution once the option is selected. Otherwise, if you already have your own compliant cookie policy, you can simply insert your own link here.

The Privacy Controls and Cookie Solution, once installed, allows you to manage:

  • The display of the cookie banner at each user’s first visit. See Banner and prior consent – setup and customization for more information.
  • The legally required blocking of scripts prior to obtaining user consent. See the following guide: preventing code execution that could install cookies
  • The asynchronous reactivation (with no page refresh needed) of the previously blocked scripts.
  • The registering of consent after detection of continued browsing (for example, by scrolling through the page or by clicking a link on said page)
  • The storage of the user’s preferences so that the previously seen banner will not be reactivated on consecutive visits by the same users.

The Privacy Controls and Cookie Solution also makes it possible to view statistics on consent which is useful, for example, to study the consents obtained in relation to the total number of visits and the manner in which the consent was collected. Note: Statistics are only available from 300K page views.

For WordPress and Joomla users we released two dedicated plugins that help simplify the integration of the Privacy Controls and Cookie Solution within your website/app. The WordPress and Joomla! plugins also simplify some of the operations related to the blocking of scripts.

Integration method

In order to properly integrate the Privacy Controls and Cookie Solution you need to include the script within the <head> tag of your website’s HTML as the first element. For more information, see the Introduction to the iubenda Privacy Controls and Cookie Solution.

Please note: in order to complete the configuration of the Privacy Controls and Cookie Solution, you will also need to set up the prior blocking of scripts. See this guide for further information.

See also

The post What Is the Difference Between the Privacy and Cookie Policy Generator and the Privacy Controls and Cookie Solution? appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
How to Add Your Privacy Policy to the Amazon Store https://www.iubenda.com/en/help/100-how-to-add-your-privacy-policy-to-the-amazon-store/ Fri, 31 May 2013 16:56:08 +0000 http://help.iubenda.com/?p=100 There is a dedicated form in your Amazon Developer account to link your privacy policy to your Android app. To find it go here: Sign into the Amazon Developer Portal with your developer account credentials Go to the “Apps and Services” tab, then click on the “My Apps” page Click on your app’s name Go […]

The post How to Add Your Privacy Policy to the Amazon Store appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>
There is a dedicated form in your Amazon Developer account to link your privacy policy to your Android app. To find it go here:

  • Sign into the Amazon Developer Portal with your developer account credentials
  • Go to the “Apps and Services” tab, then click on the “My Apps” page Amazon dev account, apps page
  • Click on your app’s name
  • Go to the “Content Rating” tab and scroll to the bottom of the list Amazon dev content rating tab
  • Add a link to your privacy policy in the Privacy Policy URL field, then click “Save”

And you’re done!

The post How to Add Your Privacy Policy to the Amazon Store appeared first on Compliance Solutions for Websites, Apps and Organizations | iubenda.

]]>