The IDs side by side
| Platform | ID | What it is | Resettable | Limit Ad Tracking |
|---|---|---|---|---|
| Samsung Tizen | TIFA | Advertising ID | Yes (PSID reset, factory reset) | Yes, isLATEnabled() |
| LG webOS | LGUDID | Device unique ID; user agreement required | Not documented | No public flag |
| Whale TV | WAID | Advertising ID in ad macros | Yes, per Whale | lmt in the VAST tag |
| Titan OS | WhaleAdID, ifa | Advertising IDs in the Titan SDK | Not documented | Not documented |
Samsung Tizen: TIFA
The Tizen Identifier for Advertising is resettable by the user (a PSID reset or a factory reset), supports Limit Ad Tracking, and per Samsung is not linked to personal information or the device's DUID. The adinfo privilege is public and available since Tizen 2.4.
<!-- config.xml -->
<tizen:privilege name="http://developer.samsung.com/privilege/adinfo"/>
const tifa = webapis.adinfo.getTIFA();
const lmt = webapis.adinfo.isLATEnabled() ? 1 : 0;
// Ad request: ifa = tifa, ifa_type = "tifa", lmt = lmt
When Limit Ad Tracking is on, Samsung says no interest-based ads may be shown: send lmt=1 and expect contextual ads only.
LG webOS: LGUDID
LG offers no public advertising ID to third-party apps. LGUDID is a device unique ID, generated from the MAC address as a seed plus a random UUID, available from webOS TV 3.0. LG's reference says you must get the user's agreement to use their personal information before calling the API, and it doesn't document a reset.
webOS.service.request("luna://com.webos.service.sm", {
method: "deviceid/getIDs",
parameters: { idType: ["LGUDID"] },
onSuccess: (res) => {
const entry = res.idList.find((i) => i.idType === "LGUDID");
// entry.idValue: use only with the user's agreement
},
onFailure: () => { /* use your own install ID */ },
});
Because it isn't resettable as far as LG documents, treat LGUDID as a persistent device identifier: ask first, and prefer your own resettable install ID where you can. How exchanges label it in bid requests varies; ask your demand partners.
Whale TV: WAID
Whale TV's ad macros include [whale_ad_id], the WAID: a "unique resettable ID" in UUID format, sent with ifa_type waid (or ppid when you use an app-level ID), plus an lmt parameter; a separate [device_lmt] macro controls IP obfuscation. The macros are filled through Whale's WhaleAds SDK.
We could not find a public API for a third-party HTML5 app to read the WAID directly. Whale's development guide says to use cookies if you need to identify a device. Until an API is public, use an app-level ID.
Titan OS: WhaleAdID and ifa
The Titan SDK's getDeviceInfo() returns, under Product: WhaleAdID ("the advertising ID"), and ifa with ifaType (example type dpid). It also returns deviceID and mac, which are hardware identifiers and shouldn't be used for advertising.
import { getTitanSDK } from "@titan-os/sdk";
const { Product } = await getTitanSDK().deviceInfo.getDeviceInfo();
const adId = Product.WhaleAdID && Product.WhaleAdID !== "unknown" ? Product.WhaleAdID : null;
Titan notes that the IFA is currently not returned on 2020 to 2022 Philips devices, so a fallback is required.
Consent in the EU: TCF
Reading an identifier from a device is storing or accessing information on that device, which in the EU needs consent unless it is strictly necessary. Ad networks and buyers read that consent from an IAB Transparency & Consent Framework (TCF) string. In practice:
- Show a consent screen that works with a remote (focusable buttons, readable from the sofa) before you read or send device IDs for advertising.
- Pass the TCF string with every ad request.
- Without consent, send no device ID; contextual ads still work.
- Respect Limit Ad Tracking regardless of consent.
- Offer a way to reset your own ID from the settings or consent screen.
Fallback: your own install ID
Every app needs a fallback for devices without a usable platform ID: a random UUID generated on first launch and stored by the app. It is resettable (generate a new one), scoped to your app, and not tied to the hardware. In OpenRTB it is usually sent as a publisher-provided ID (ppid).
function installId() {
let id = localStorage.getItem("my_install_id");
if (!id) {
const b = crypto.getRandomValues(new Uint8Array(16));
b[6] = (b[6] & 0x0f) | 0x40; b[8] = (b[8] & 0x3f) | 0x80; // UUID v4
const h = Array.from(b, (x) => ("0" + x.toString(16)).slice(-2)).join("");
id = h.slice(0, 8) + "-" + h.slice(8, 12) + "-" + h.slice(12, 16) + "-" + h.slice(16, 20) + "-" + h.slice(20);
localStorage.setItem("my_install_id", id);
}
return id;
}
Use it for your own analytics too: it keeps usage numbers stable even when the user resets the platform's advertising ID.
Early access
How SofAds handles IDs
The SofAds SDK reads TIFA with Limit Ad Tracking on Tizen, LGUDID on webOS, accepts a WAID getter on Whale TV, and reads WhaleAdID on Titan OS (treating "unknown" as missing, never using deviceID). IDs are passed unchanged. Under GDPR it sends no device ID without consent. Its fallback is its own resettable install ID, which also keys the free usage analytics; without analytics consent it runs cookieless and stores no ID. Our privacy policy lists each identifier. SofAds is in early access.
Frequently asked questions
What is TIFA on a Samsung TV?
The Tizen Identifier for Advertising: Samsung's resettable advertising ID with a Limit Ad Tracking flag, read with webapis.adinfo.getTIFA().
Is LGUDID an advertising ID?
No. LG documents it as a device unique ID and requires the user's agreement before you use it. LG has no public advertising ID for third-party apps.
What is WAID?
Whale TV's advertising ID: a unique, resettable UUID passed to ad servers through the [whale_ad_id] macro.
What should I do when Limit Ad Tracking is on?
Send the flag with the ad request (lmt=1) and show only contextual ads. Samsung says no interest-based ads may be shown when it is on.
Sources
Checked on October 7, 2026. Platform rules change; when a source and this page disagree, the source wins.