Skip to main content
Skip table of contents

Programmatic Integration

Here we go through the process of how Publishers can send adtechpasses to DSPs via their SSP, allowing use cases such as targeting and frequency capping. Below are the integration steps for passing the adtechpass using Prebid.js, with support for other potential integrations. We will also cover how to send martechpasses for data activation on SSPs that are not integrated with Utiq.

Prerequisites

  • The Publisher has implemented the Utiq loader script on their website.

  • The user has given consent for the Utiq service and is accessing the website via an eligible Telco network connection.

  • The adtechpass is available in local storage under the utiqPass key.

To confirm that the adtechpass is available you can run the following command in your browser console:

JS
> Utiq.API.getIdGraphEntry("atid")
-> 'gB4jvq2Jwm5X5+EN4IccBuK+N251EKix6lnMs8XyL4O/tr95G7fi5cuoOT3RwjzDi0eTUdvKR9nn6gyqwoswvw==-ndye' 

If an adtechpass is returned, then your integration is ready to go.

To send the adtechpass via an SSP using Prebid, you need to:

  • Ensure you use Prebid version 8.2 or higher.

    To check your Prebid version, run the following command in your browser console:

    JS
    > pbjs.version
    -> 'v8.9.0
  • Ensure you enabled the “Utiq” user id module in your prebid version

    To check if the Utiq user id module is enabled, run the following command in your browser console:

    JS
    > pbjs.installedModules
    -> ['appnexusBidAdapter', 'consentManagement', 'consentManagementGpp', 'consentManagementUsp', 'enrichmentFpdModule', 'gdprEnforcement', 'gppControl_usnat', 'gptPreAuction', 'pubProvidedIdSystem', 'rubiconBidAdapter', 'userId', 'utiqSystem']

If any of the two requirements are not fulfilled, please make sure to update your Prebid version and enable the Utiq user id module here.

Sending adtechpass via SSPs using Prebid

Prebid Configuration Update

If all prerequisites have been fulfilled, you can now update your prebid configuration to start sending the Utiq passes to your SSPs.

To do that, simply add the below lines to your prebid configuration:

JS
pbjs.setConfig({
  userSync: {
    userIds: [{
      name: "utiq"
    }]
  }
});

Full documentation about the Utiq Prebid user id module is available here.

If you use Prebid version 9.0 or higher, you need to configure name: "utiqId" (with ‘Id’), instead, as we changed due to Prebid naming conventions.

TCF configuration

If you use the Prebid GDPR Enforcement Module (or ‘TCF Control’ as called from Prebid version 9.0), which prevents access to local storage for non consented vendors, you may need to add a vendor exception for the Utiq user id module to work, as Utiq is not a TCF vendor and will be automatically blocked by Prebid when GDPR Enforcement is enabled. Utiq performs its own consent check, outside TCF, to ensure that there is no device storage access in the absence of consent.

To do that, you can use below configuration:

JS
pbjs.setConfig({
  consentManagement: {
    gdpr: {
      cmpApi: 'iab',   // activates the enforcement module
      rules: [{        // these are the default values
        purpose: "storage",
        enforcePurpose: true, // block localStorage based on purpose 1 of TCF
        enforceVendor: true,  // block localStorage for non consented / non TCF vendors
        vendorExceptions: ["utiq"] // configuration line to add to make Utiq exception
      }]
    }
  }
});

If you use Prebid version 9.0 or higher, you need to configure vendorExceptions: ["utiqId"] (with ‘Id’), instead, as we changed due to Prebid naming conventions.

If you install martechpass module, as well, you need to add utiqMtpId in the vendorExceptions array, as well.

Validation

To confirm that the implementation is correct, you can type the below command in your browser console:

JS
> pbjs.getUserIdsAsEidBySource("utiq.com")
-> {source: 'utiq.com', uids: Array(1)}

if the eid object with source "utiq.com" is returned, you are all set!

You can also confirm the adtechpass is sent as part of the payload from the SSPs. This check however, will depend on each SSP. For example, for Appnexus SSP, you can check that "utiq.com" is present as part of the eids object in the appnexus prebid call as per below example:

image-20240606-094831.png

Example OpenRTB Bid Request

Here is an example of an OpenRTB bid request with the utiq user id:

JS
https://adtech.com/xxx/bids 

Content:

{"site": {"id": "123456", "domain": "domain.com", "page": "domain.com", "publisher": {"id": "1234", "name": "Domain.com"}}, "device": {"ip": "172.31.1.0", "geo": {"country": "GBR"}, "language": "en", "devicetype": 2, "ext": {"truncated_ip": 1}, "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"}, "user": {"id": "37801268-60e0-491b-a4fd-17c416a6d99c", "data": [{"id": "123456"}],
    "ext": {
      "eids": [
        {
          "source": "utiq.com",
          "uids": [
            {
              "id": "fH6cXAjRWrVKqvH9bE/jriedN1JX3v0VyFOSPR9yQbqCHTSnR6/BEB41mln4fuyla9DtCDnehmC4m2DnhRpbBg==-xxxx"
            }
          ]
        }
      ]
    }
  }, "wseat": ["5515"], "cur": ["EUR"], "regs": {"ext": {"gdpr": 0}}, "ext": {}, "source": {"ext": {"schain": {"ver": "1.0", "complete": 1, "nodes": [{"asi": "domain.com", "sid": "1234", "hp": 1}]}}}, "id": "65424020-4e69-4096-973a-2212a64a58cb", "imp": [{"id": "1", "banner": {"id": "1", "pos": 1, "format": [{"w": 728, "h": 90}], "w": 728, "h": 90}, "bidfloor": 0.01, "bidfloorcur": "EUR", "secure": 0, "pmp": {"deals": [{"id": "12345678", "bidfloor": 0.01, "bidfloorcur": "EUR", "wseat": ["1234"], "at": 3}], "private_auction": 1}, "tagid": "123456"}], "at": 1}

Sending martechpass to SSPs using Prebid

In case you want to do data activation on SSP, or want to do pre-targeting (deal ID), but the SSP is not yet integrated with Utiq (meaning it is not ready to decrypt adtechpass), you can send the martechpass, on top of the adtechpass, with the caveat that martechpass has a certain expiration.

If you decide to do so, you need to follow the whole above process, with the below different actions:

  1. Ensure you use Prebid version 8.47 or higher

  2. The module you need to install is the UtiqMtp ID, the martechpass alternative, from here.

  3. On the Prebid configuration you need to initialize the utiqMtpId, as shown below.

  4. Note that the source will be 'utiq-mtp.com' in this martechpass alternative.

  5. You may like to consider limiting the SSPs that receive the martechpass by adding the bidders array, to make sure they are not forwarding this first party ID to DSPs. We are working with SSPs to blacklist the above source from being send to DSPs, please reach out to csm@utiq.com to verify which are these SSPs.

JS
pbjs.setConfig({
  userSync: {
    userIds: [
      {
        name: "utiqMtpId",
        bidders: ["smartadserver", "appnexus", "pubmatic", "rubicon", "stroeerCore"]
      },
    ],
  },
});

Below is a diagram that shows the differences of using the adtechpass vs using the martechpass:

image-20240606-094639.png

Testing Prebid Integration

Below is a list of APIs you can call on Dev Console to test the Prebid Integration. Note that object pbjs is the default, but could be different in your case.

You can also use Professor Prebid browser plugin, for your testing.

Test

API

Verify Prebid version, to check compatibility for Utiq module(s)

Utiq adtechpass module → 8.2 or higher
Utiq martechpass module → 8.47 or higher

CODE
pbjs.version

Verify installed Utiq module(s), and if GDPR Enforcement module (TCF Control) is installed

Utiq adtechpass module → If Prebid version 9.0 or higher "utiqIdSystem", else "utiqSystem"
Utiq martechpass module → "utiqMtpIdSystem"
GDPR Enforcement (TCF Control) module → If Prebid version 9.0 or higher "tcfControl", else "gdprEnforcement"

CODE
pbjs.installedModules

If GDPR Enforcement (TCF Control) module is installed, verify if vendor exceptions are set for Utiq module(s)

Utiq adtechpass module → If Prebid version 9.0 or higher vendorExceptions: ["utiqId"], else vendorExceptions: ["utiq"]
Utiq martechpass module → vendorExceptions: ["utiqMtpId"]

CODE
pbjs.getConfig().consentManagement.gdpr.rules

Verify Prebid configuration for User IDs setting

Utiq adtechpass module → If Prebid version 9.0 or higher "utiqId", else "utiq"
Utiq martechpass module → "utiqMtpId", with bidders: ["bidder1", "bidder2", ...]

CODE
pbjs.getConfig().userSync.userIds

Verify Prebid is collecting Utiq token(s) and sending to SSPs, for adtechpass module

CODE
pbjs.getUserIdsAsEidBySource("utiq.com")

Verify Prebid is collecting Utiq token(s) and sending to SSPs, for martechpass module

CODE
pbjs.getUserIdsAsEidBySource("utiq-mtp.com")

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.