The ID5 ID is a shared, neutral identifier that publishers and ad tech platforms can use to recognise users even in environments where 3rd party cookies are not available or blocked. ID5 enables publishers to create and distribute a shared 1st party identifier to the entire ecosystem. Ad tech platforms that connect with ID5 can decrypt the ID5 ID and improve their user recognition capabilities. The ID5 ID is designed to respect users' privacy choices throughout the advertising value chain.
The ID5 ID is free to use, but requires a simple registration with us. If you don’t already have an account with ID5, please visit our website to sign up and request your ID5 Partner Number.
We recommend that you monitor Prebid Releases in order to stay up-to-date with any changes to the implementation of the ID5 ID in Prebid.
By using the ID5 ID, ad tech platforms can eliminate the need to sync their platform-specific IDs with their partners - the equivalent of needing a translator to help two people speaking different languages understand each other. When all platforms are using the ID5 ID to transact against, it's like they're all speaking the same, common language.
After configuring your Prebid.js setup to pull the ID5 ID, your demand partners configured in Prebid can retrieve the ID and pass it on to their server side RTB partners (typically DSPs). This allows the DSP to target the user, manage frequency and recency capping, and apply additional data, even when cookies are not supported.
ATTENTION
If you or your monetization partners are deploying multiple Prebid wrappers on your websites, you should make sure you add the ID5 ID User ID module to every wrapper. Only the bidders configured in the Prebid wrapper where the ID5 ID User ID module is installed and configured will be able to pick up the ID5 ID. Bidders from other Prebid instances will not be able to pick up the ID5 ID.
By activating the ID5 ID, the following will take place:
Below are step by step instructions for installing and configuring the Prebid.js User ID Module with the ID5 ID. The instructions below assume a basic understanding of building Prebid.js and editing its page-level configuration; for more detailed instructions, getting started guides, and more, please visit the Prebid.org website.
When building Prebid.js, be sure to include both the userId
and id5IdSystem
modules, in addition to the other modules you normally include.
gulp build –modules=userId,id5IdSystem
You may also use the Prebid Download page to build your version of Prebid.js by selecting the User ID: ID5 ID module.
Within the pbjs.setConfig()
function, add the following configuration before you make a request for bids:
pbjs.setConfig({
userSync: {
userIds: [{
name: 'id5Id',
params: {
partner: 173, // change to the Partner Number you received from ID5
externalModuleUrl: 'https://cdn.id5-sync.com/api/1.0/id5PrebidModule.js',
pd: 'MT1iNTBjY...' // optional, see below for a link to how to generate the pd string
abTesting: { // optional
enabled: true, // false by default
controlGroupPct: 0.1 // valid values are 0.0 - 1.0 (inclusive)
}
},
storage: {
type: 'html5', // 'html5' is the required storage type
name: 'id5id', // 'id5id' is the required storage name
expires: 90, // storage lasts for 90 days
refreshInSeconds: 7200 // refresh ID every 2 hours to ensure it's fresh
}
}],
auctionDelay: 250 // 250ms maximum auction delay, applies to all userId modules
}
});
ATTENTION
From Prebid.js v8.33.0 you should provide theexternalModuleUrl
parameter and set it to the latest available module version athttps://cdn.id5-sync.com/api/1.0/id5PrebidModule.js
to ensure you are benefiting from the latest version of ID5's identity resolution alogrithms. If you have any questions, please reach out to us at prebid@id5.io.
From Prebid.js v4.13.0, ID5 requiresstorage.type
to be"html5"
andstorage.name
to be"id5id"
. Using other values will display a warning today, but in an upcoming release, it may prevent the ID5 module from loading. This change is to ensure the ID5 module in Prebid.js interoperates properly with the ID5 API and to reduce the size of publishers' first-party cookies that are sent to their web servers.
Name | Required | Type | Description | Example |
---|---|---|---|---|
partner | Required | Number | This is the ID5 Partner Number obtained from registering with ID5. | 173 |
externalModuleUrl | Optional | String | URL to the external ID5 module. Highly recommended for the best integration possible. | https://cdn.id5-sync.com/api/1.0/id5PrebidModule.js |
pd | Optional | String | Publisher-supplied data, such as hashed email address or publisher user id, used for linking ID5 IDs across domains. Omit the parameter or leave as an empty string if no data to supply. Learn how to populate this field. | "MT1iNTBjY..." |
abTesting | Optional | Object | Allows publishers to easily run an A/B Test. If enabled and the user is in the Control Group, the ID5 ID will NOT be exposed to bid adapters for that user. See below for more details. | Disabled by default |
abTesting.enabled | Optional | Boolean | Set this to true to turn on this feature | TRUE |
abTesting.controlGroupPct | Optional | Number | Must be a number between 0.0 and 1.0 (inclusive) and is used to determine the percentage of users that fall into the control group (and thus not exposing the ID5 ID). For example, a value of 0.20 will result in 20% of user without an ID5 ID and 80% with an ID. | 0.1 |
disableExtensions | Optional | Boolean | Set this to true to force turn off extensions call. Default false | TRUE |
provider | Optional | String | An identifier provided by ID5 to technology partners who manage API deployments on behalf of their clients. Reach out to ID5 if you have questions about this parameter | providerName |
Taking the example from Passing Partner Data to ID5, here's how your configuration could look in Prebid:
...
params: {
partner: 173, // change to the Partner Number you received from ID5
pd: 'MT1iNTBjYTA4MjcxNzk1YThlN2U0MDEyODEzZjIzZDUwNTE5M2Q3NWMwZjJlMmJiOTliYWE2M2FhODIyZjY2ZWQzJjU9bSVDMyVCNmxsZXIlMjZmcmFuJUMzJUE3b2lz'
},
...
The
abTesting
feature is available in version4.20.0
of Prebid.js and later
Publishers may want to test the value of the ID5 ID with their downstream partners. While there are various ways to do this, A/B testing is a standard approach. Instead of publishers manually enabling or disabling the ID5 User ID Module based on their control group settings (which leads to fewer calls to ID5, reducing our ability to recognize the user), we have baked this in to our module directly.
To turn on A/B Testing, simply edit the configuration (see details above) to enable it and set what percentage of users you would like to set for the control group. The control group is the set of users where an ID5 ID will not be exposed to bid adapters or in the various user id functions available on the pbjs global. An additional value of ext.abTestingControlGroup
will be set to true
or false
and can be used to inform reporting systems that the user was in the control group or not. It's important to note that the control group is user based, and not request based. In other words, from one page view to another, a user will always be in or out of the control group without changing.
The ID5 ID is a privacy-by-design implementation of a shared ID and fully supports the GDPR. When the ID5 ID is requested by Prebid in a GDPR-relevant country, ID5 will ensure the user has consented to processing by ID5 for the "Information storage and access" purpose (Purpose 1). If not, ID5 will not attempt to read or write our 3P cookie and we will not deliver an ID.
To enable GDPR support within Prebid, you will need to include the GDPR Consent Management module when you build Prebid:
gulp build –modules=userId,id5IdSystem,consentManagement
You will also need to ensure you add the appropriate configuration to your setConfig()
function to include consentManagement
:
pbjs.setConfig({
userSync: {
userIds: [{
name: 'id5Id',
params: {
partner: 173, // change to the Partner Number you received from ID5
pd: 'MT1iNTBjY...' // optional
abTesting: { // optional
enabled: true, // false by default
controlGroupPct: 0.1 // valid values are 0.0 - 1.0 (inclusive)
}
},
storage: {
type: 'html5', // 'html5' is the required storage type
name: 'id5id', // 'id5id' is the required storage name
expires: 90, // storage lasts for 90 days
refreshInSeconds: 7200 // refresh ID every 2 hours to ensure it's fresh
}
}],
auctionDelay: 50 // 50ms maximum auction delay, applies to all userId modules
},
consentManagement: {
cmpApi: 'iab',
timeout: 8000
}
});
The ID5 ID that is delivered to Prebid is encrypted by ID5 with a rotating key to avoid unauthorized usage and to enforce privacy requirements. Only platforms that have the necessary rights to process user data will be able to decrypt the ID and use it for targeting, frequency capping, measurement, etc. Therefore, we strongly recommend setting storage.refreshInSeconds
to 2 hours ( 7200
seconds) or less to ensure all demand partners receive an ID that has been encrypted with the latest key, has up-to-date privacy signals, and allows them to transact against it.
The module provides following eids:
[
{
source: 'id5-sync.com',
uids: [
{
id: 'some-random-id-value',
atype: 1,
ext: {
linkType: 2,
abTestingControlGroup: false
}
}
]
},
{
source: 'true-link-id5-sync.com',
uids: [
{
id: 'some-publisher-true-link-id',
atype: 1
}
]
},
{
source: 'uidapi.com',
uids: [
{
id: 'some-uid2',
atype: 3,
ext: {
provider: 'id5-sync.com'
}
}
]
}
]
The id from id5-sync.com
should be always present (though the id provided will be '0' in case of no consent or optout)
The id from true-link-id5-sync.com
will be available if the page is integrated with TrueLink (if you are an ID5 partner you can learn more at ID5 wiki)
The id from uidapi.com
will be available if the partner that is used in ID5 user module has the EUID2 integration enabled (it has to be enabled on the ID5 side)
TrueLinkId can be provided as a PPID - to use, it the true-link-id5-sync.com
needs to be provided as a ppid source in prebid userSync configuration:
pbjs.setConfig({
userSync: {
ppid: 'true-link-id5-sync.com',
userIds: [], //userIds modules should be configured here
}
});