System events
Automatic platform events that can trigger campaigns without custom integration
System events are automatic events fired by the Xtremepush platform, without any custom event tracking code in your app or website. They can be used as campaign triggers in the same way as custom events.
application_install
This event fires the first time a profile is created as a result of a device installing and launching your mobile application.
Available for: Mobile app campaigns (iOS and Android)
Use cases:
- Welcome push notification on first launch
- Onboarding campaign enrolment
This event fires once per profile, on first install. Re-installs on the same device linked to an existing profile do not re-fire this event.
session_start
This event fires each time a user opens your mobile application and begins a new session.
Available for: In-app campaigns (iOS and Android only, not on-site)
Use cases:
- Re-engagement campaign triggered after a period of inactivity
- Contextual in-app message shown at app open
session_startis available as a named system event in the campaign trigger selector. When selected, it bypasses the standard event validation check (which requires the event to have been recorded in the past year), since no event record is stored in the event history for session starts.
profile_create
This event fires when a new profile record is created in Xtremepush, typically via a profile import (CSV or API import).
Use cases:
- Welcome email or SMS triggered at the point of profile creation during a data import
- Initial segmentation or lifecycle entry campaign
profile_createis triggered by profile imports, not by a device app install. For app install behaviour, useapplication_install. Not all profile creation paths fire this event — it is specifically associated with the import pipeline.
preference_trigger
This event fires when a profile's consent preference changes, for example, when a user opts in or out of a named marketing preference.
This event is only available on projects that have the Subscription Preferences and Campaign Trigger by Consent Preference Events features enabled.
Use cases:
- Confirmation message when a user opts in to a specific marketing category
- Suppression or re-engagement logic driven by preference changes
- Double opt-in confirmation flow
Event payload
Unlike other system events, preference_trigger carries a structured payload that can be used for event filter conditions:
{
"user_id": "u123",
"customer_id": "c456",
"preferences": {
"marketing": [
{
"preference_id": 1,
"name": "marketing",
"display_name": "Marketing Emails",
"channel": "email",
"status": 1,
"timestamp": 1713100000,
"source": "manual",
"metadata": { "channel": "branch" }
}
]
}
}| Field | Description |
|---|---|
user_id | The profile's user ID |
customer_id | The profile's customer ID (only present if enabled on the project) |
preferences | Object keyed by preference name. Each key maps to an array of preference change records |
preferences[name][].preference_id | ID of the subscription preference definition |
preferences[name][].name | Preference name (matches the outer key) |
preferences[name][].display_name | Human-readable preference label |
preferences[name][].channel | Channel the preference applies to, e.g. email, sms |
preferences[name][].status | 1 = opted in, 0 = opted out |
preferences[name][].timestamp | Unix timestamp of when the change occurred |
preferences[name][].source | How the change was made: manual, api, import, etc. |
preferences[name][].metadata | Optional arbitrary metadata attached to the preference record |
Filtering on preference payload
When Limit triggering on some events is enabled for a preference_trigger campaign, conditions are evaluated against the preference properties listed above. For example, you can trigger a campaign only when source equals manual, or only when channel equals email.
Multiple preference changes for the same profile are batched into a single event firing with a short delay. The
preferencesobject may therefore contain more than one preference entry per event. When event filter conditions are applied, only the preference entries that match the conditions are included in the payload passed to the campaign.
Targeting a specific preference
A preference_trigger campaign can be scoped to a specific named preference by setting the Trigger event field to the preference name. Setting it to 0 (or leaving it unconfigured for "any") will trigger for changes to any preference.
Updated about 9 hours ago