Comms preference deep links
Link a customer from an email or SMS straight into their Profile Portal comms preferences, optionally changing one preference on the way in, and choose between the profile-ID and ID-token mechanisms.Profile Portal’s messaging page can be opened for a specific customer without a login, and can apply one communication preference change as it loads. This is what makes one-tap “manage your preferences” and category toggles in campaign email possible. It is also what makes the link dangerous in the wrong place: it acts on load, and anyone holding the URL can use it.
Two ways to link into preferences
Use the profile-ID parameters for evergreen footer links and for category toggles in campaign email. Use the ID-token link when the message is Flow-triggered and sent immediately, and the link leads anywhere more sensitive than a category toggle. Neither replaces your comms platform’s native unsubscribe; see Before you send.
URL contract
p on its own opens the preference centre and changes nothing. That is the safe default for a footer link.
What happens on load
When the change parameters are present, the page applies the change to the profile, shows a confirmation, then renders the full preferences form so the customer can adjust anything else. One attribute is processed per request; a campaign that needs two changes needs two links, or the plain?p= link.
Consent timestamps (email_consent_updated_at, sms_consent_updated_at) are recorded on every change made this way, the same as a change made on the form. See Comms preferences.
Standard and custom attributes
Standard comms fields are the flags on the profile’s comms record:email_promo, sms_promo, the channel and category combinations, and the *_optout fields. For these, commsValue=1 means on and 0 means off.
Custom comms attributes reached by deep link are arrays of option values. commsValue=1 adds the option in commsAttribute to the array, 0 removes it. What that means to the customer depends on how the attribute was configured for your portal:
- Inclusion attributes hold what the customer wants.
1means “send me this”. - Exclusion attributes hold what the customer does not want.
1means “stop sending me this”.
The unsubscribe route
email_optout: true unless configured otherwise, and shows a confirmation with a link to manage notifications. Everything in Before you send applies to it.
Embedding in your comms platform
You need two things in the sending platform: your portal domain, and the Omneo profile ID on the contact record. The profile ID reaches your platform through the extension’s profile sync, under whatever property name is configured for your tenant. Not every contact has one. Contacts created by a platform-side form, an import, or a list Omneo has not touched will have no Omneo ID, and a link with an emptyp renders the portal’s error state. Every embedded link needs a fallback, and for an unsubscribe link the fallback must be your platform’s own native unsubscribe.
Klaviyo example
Klaviyo exposes the synced property directly and{% unsubscribe_link %} for its native unsubscribe URL. Paste this into an HTML block; the drag-and-drop editor cannot wrap a button in a conditional.
{% unsubscribe_link %}outputs the bare URL and belongs in anhref.{% unsubscribe %}renders a complete anchor.&is correct inside an HTML block; a plain&is correct in a button’s link field.- Substitute your mapped property name. Where it contains spaces, use
person|lookup:'Omneo ID':''in both the condition and the output. - The no-code equivalent is two blocks with display conditions on the property.
?p= link is the safer default for a footer “manage your preferences” call to action. Other platforms have their own template syntax and native unsubscribe tags; do not carry the Klaviyo example over unchanged.
Before you send
- The link is unauthenticated. A forwarded email lets anyone change that customer’s preferences. Acceptable for interest toggles; weigh it before it drives suppression, and prefer the ID-token link where the message is sent immediately.
- Gmail and Apple Mail show their own unsubscribe control from the
List-Unsubscribeheader your platform generates. Some unsubscribes will always land at the platform first, so make sure the platform-to-Omneo sync is live. - Check what share of your list carries an Omneo profile ID before relying on the deep link branch.