CDP Integration
This page contains integration guides with various CDP solutions, of how to pass martechpass as declared ID.
Why Integrate Utiq martechpass with CDPs?
The martechpass enables CDPs to identify and unify user profiles more accurately, even across sessions, devices, and browsers. As a declared ID, it provides a reliable anchor for user data, enhancing personalization and activation potential.
Primary Use Cases
Audience Building & Activation: Collect traits and behaviors tied to
martechpass, and activate audiences across owned media, AdTech platforms, or via data clean rooms.First-Party Data Activation: Empower brands to activate customer insights without relying on third-party cookies or shared identifiers.
Learn more: Utiq Use Cases
Vendor Integrations
For each integration, Utiq recommends retrieving the mtid using onIdsAvailable via the addEventListener API, especially when embedding via third-party scripts.
Adobe CDP
Last update: April 2025 (check vendor documentation)
window.Utiq ||= {};
window.Utiq.queue ||= [];
const handleIdsAvailable = ({ mtid, category }) => {
// Callback action for onIdsAvailable
if (mtid && category === 'mobile' && typeof alloy === 'function') {
alloy("sendEvent", {
xdm: {
"identityMap": {
"utiq_mobile": [ // Ensure it's a registered identity namespace in Adobe CDP
{
"id": mtid,
"authenticatedState": "ambiguous",
"primary": false
}
]
}
}
});
} else if (mtid && category === 'fixed' && typeof alloy === 'function') {
alloy("sendEvent", {
xdm: {
"identityMap": {
"utiq_fixed": [ // Ensure it's a registered identity namespace in Adobe CDP
{
"id": mtid,
"authenticatedState": "ambiguous",
"primary": false
}
]
}
}
});
} else {
console.error('Adobe CDP is not available, or MTID is missing.');
}
};
window.Utiq.queue.push(() => {
window.Utiq.API.addEventListener('onIdsAvailable', handleIdsAvailable);
});
Ensure that ‘utiq_mobile’ and ‘utiq_fixed’ are registered identity namespaces in Adobe CDP.
Documentation:
https://experienceleague.adobe.com/en/docs/experience-platform/web-sdk/identity/overview
https://experienceleague.adobe.com/en/docs/experience-platform/xdm/data-types/identity
Testing: Filter Network for interact and check events.0.xdm.identityMap.utiq_XX
Tealium
Last update: October 2025 (check vendor documentation)
Configurations in Tealium iQ Tag Management
Add the Utiq Tag in Tealium iQ
This will auto generate
utiq_mtidandutiq_categoryvariables
Make sure that Tealium Collect Tag is enabled
The above attributes will automatically become available in EventStream
Configurations in Tealium AudienceStream
Go to Attributes
Create a new attribute:
Type: Visitor String
Name:
Utiq MTIDEnrichment Rule:
When:
utiq_mtid(event attribute) is assignedSet Visitor String to the value of
utiq_mtidOptional: Add validation (e.g., matches regex or exists)
Do the same for attribute
Utiq Categorywith Visitor Stringutiq_category
This maps the MTID and Category from a single event to the user profile
Documentation:
https://docs.tealium.com/client-side-tags/tealium-collect-tag/
https://docs.tealium.com/server-side/visitor-stitching/visitor-id-attribute/
https://docs.tealium.com/early-access/api/api-v3/tealium-collect-http-api-v3-early-access/
Testing:
Filter Network for
collect.tealiumiq.com/eventand check attributeutiq_XXUse Tealium Tools to confirm identity mappings
Permutive
Last update: April 2025 (check vendor documentation)
window.Utiq ||= {};
window.Utiq.queue ||= [];
const handleIdsAvailable = ({ mtid, category }) => {
// Callback action for onIdsAvailable
if (mtid && category === 'mobile' && window.permutive && typeof window.permutive.identify === 'function') {
window.permutive.identify([
{
id: mtid,
tag: 'utiq_mobile', // Ensure it's a registered identifier in Permutive CDP
priority: 1
}
])
} else if (mtid && category === 'fixed' && window.permutive && typeof window.permutive.identify === 'function') {
window.permutive.identify([
{
id: mtid,
tag: 'utiq_fixed', // Ensure it's a registered identifier in Permutive CDP
priority: 1
}
])
} else {
console.error('Permutive is not available, or MTID is missing.');
}
};
window.Utiq.queue.push(() => {
window.Utiq.API.addEventListener('onIdsAvailable', handleIdsAvailable);
});
Ensure that ‘utiq_mobile’ and ‘utiq_fixed’ are registered identifiers in Permutive CDP.
Documentation:
Testing: Look for localStorage permutive-data-misc containing utiq in identities. Also filter network for identify and check if mtid is part of the aliases object
ADEX
Last update: April 2025 (check vendor documentation)
window.Utiq ||= {};
window.Utiq.queue ||= [];
// Define your ADEX variables here
const adexCustomerId = <customerId>; // Replace <customerId> with your real Customer ID
const adexTagId = <tagId>; // Replace <tagId> with your real Tag ID
const handleIdsAvailable = ({ mtid, category }) => {
// Callback action for onIdsAvailable
if (mtid && category === 'mobile') {
window._adexc = window._adexc || [];
const instancePath = `/${adexCustomerId}/${adexTagId}/`;
window._adexc.push([instancePath, "cm", "_cm", [308, mtid]]) // '308' is Utiq's partner ID
}
};
window.Utiq.queue.push(() => {
window.Utiq.API.addEventListener('onIdsAvailable', handleIdsAvailable);
});
Replace <customerId> and <tagId> with your real Customer ID and Tag ID.
'308' is Utiq's partner ID.
Documentation:
Testing: Filter Network for 2.gif?axd_pid=308 and check attribute axd_fuid
Emetriq
Last update: July 2025 (check vendor documentation)
The code implies that you load Emetriq SDK conditionally, based on Utiq SDK event listeners. Also, the asynchronous call of the script, could impact you if you rely on segments returned by the data call.
In any case, it’s highly recommended to consult your Emetriq contacts.
window.Utiq ||= {};
window.Utiq.queue ||= [];
window.Utiq.queue.push(() => {
let sid = '<sid>'; // Replace <sid> with your real Emetriq SID
let consentFinished = false;
let flowCompleted = false;
let fallbackTriggered = false;
// Function to run standard Emetriq fallback code
const runFallback = () => {
if (fallbackTriggered) return;
fallbackTriggered = true;
console.info('Utiq - Running fallback, standard Emetriq code');
window._enqAdpParam ||= {};
window._enqAdpParam.sid = sid;
const s = document.createElement('script');
s.type = 'text/javascript';
s.src = `https://ups.xplosion.de/loader/${sid}/default.js`;
s.async = true;
document.head.appendChild(s);
};
// 1. onInitialised: check if Utiq is available
window.Utiq.API.addEventListener('onInitialised', () => {
console.info('Utiq - onInitialised event fired.');
// 2. onConsentUpdateFinished: start 4s timer waiting for onFlowCompleted
window.Utiq.API.addEventListener('onConsentUpdateFinished', () => {
console.info('Utiq - onConsentUpdateFinished event fired.');
consentFinished = true;
const timeoutId = setTimeout(() => {
if (!flowCompleted) {
console.info('Utiq - Timeout expired waiting for onFlowCompleted, running fallback');
runFallback();
}
}, 4000);
// 3. onFlowCompleted within 4 seconds
window.Utiq.API.addEventListener('onFlowCompleted', () => {
console.info('Utiq - onFlowCompleted event fired');
flowCompleted = true;
clearTimeout(timeoutId);
// 4. Proceed to listen for onIdsAvailable to get mtid
window.Utiq.API.addEventListener('onIdsAvailable', ({ mtid, category }) => {
if (!mtid || category !== 'mobile') {
console.info('Utiq - MTID missing or category is not mobile, fallback to standard code');
runFallback();
return;
}
if (fallbackTriggered) return; // Already ran fallback
console.info(`Utiq - MTID found and category is mobile, setting Emetriq params`);
// Set params with MTID
window._enqAdpParam ||= {};
window._enqAdpParam.sid = sid;
window._enqAdpParam[`id_utiq_${sid}`] = mtid;
// Load Emetriq loader script
const s = document.createElement('script');
s.type = 'text/javascript';
s.src = `https://ups.xplosion.de/loader/${sid}/default.js`;
s.async = true;
document.head.appendChild(s);
});
});
});
});
// If onInitialised never fires (meaning Utiq not present), fallback after short delay
setTimeout(() => {
if (!consentFinished) {
console.info('Utiq - Utiq not initialised, fallback immediately');
runFallback();
}
}, 1000); // 1 second grace to detect Utiq init
});
Documentation:
Testing: Filter Network for xplosion.de/data and check attribute id_utiq_<sid>
Segment
Last update: July 2025 (check vendor documentation)
window.Utiq ||= {};
window.Utiq.queue ||= [];
const handleIdsAvailable = ({ mtid, category }) => {
// Callback action for onIdsAvailable
if (mtid && typeof analytics === 'object' && typeof analytics.identify === 'function') {
analytics.identify({
utiq_mtid: mtid,
utiq_category: category
});
// Optional: track event if you want to trigger workflows
/*
analytics.track('utiqUserIdReady', {
utiq_mtid: mtid,
utiq_category: category
});
*/
} else {
console.error('Segment is not available, or MTID is missing.');
}
};
window.Utiq.queue.push(() => {
window.Utiq.API.addEventListener('onIdsAvailable', handleIdsAvailable);
});
Documentation:
https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#identify
https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#track
Testing:
For trait: Filter Network for
api.segment.io/v1/iand check attributetraitsFor event: Filter Network for
api.segment.io/v1/tand check attributeeventandproperties