Promotion guide
Use case
Correlate promotion redemption context
Use device observations alongside campaign eligibility and account history. Start without precise location, telephony, accessibility, or installed-app visibility.
Redemption event flow
Bind the raw event to a server-created promotion_redemption action_id, not to a persistent client-generated identifier.
Minimal starting profile
const promotionIntel = new DeviceIntel({
consent: consentFor([
"device_identity",
"application",
"os_integrity",
"device_security_posture",
"locale",
"runtime",
]),
config: {
probes: {
geolocation: { enabled: false },
telephony: { enabled: false },
media_bluetooth_apps: { enabled: false },
transaction_safety: { enabled: false },
},
},
});
const observations = await promotionIntel.collect({
sessionId: redemptionAttempt.id,
clientId: authenticatedAccountId,
});Add sensitive data only for a documented purpose
Network
Add VPN, proxy, transport, or country-adjacent context only after privacy review and measurement of legitimate usage.
Telephony
Enable selected SIM or carrier fields only where eligibility rules and user expectations justify them. The SDK never requests phone permission.
Geolocation
Keep geolocation off by default. If separately justified, use existing permission and project only necessary fields such as authorization, accuracy, source, or age. The SDK never shows a location prompt or starts updates.
Backend handling
Join the event with campaign ID, account age, prior redemptions, household or business rules, server-side velocity, and the redemption outcome. Version any derived feature and monitor it by OS, app version, geography, and missing-data state.
{
"action_id": "promo_01JEXAMPLE",
"action_type": "promotion_redemption",
"campaign_id": "summer-referral-2026",
"sdk_version": "0.8.1",
"platform": "android",
"observations": { "...RawSignalEvent": "..." }
}