Xtremepush
Datafly Signal delivers events to Xtremepush server-to-server using the External Event API (event hits). Each event can trigger a real-time Xtremepush campaign or workflow (email, push, SMS, web, in-app) and updates the matching user profile — with no client-side Xtremepush SDK in the page.
Why route Xtremepush through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Xtremepush even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- Token lifecycle is handled for you. Signal obtains and refreshes the OAuth credentials Xtremepush requires, so nothing expires quietly in the middle of a campaign.
- One consent decision governs every destination. Xtremepush is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Before configuring Xtremepush in Signal you need an active Xtremepush project and its App Token.
Step 1: Find your project region
Xtremepush projects are hosted in a region. Note whether your project is on the EU or US platform — this determines the API host:
- EU:
https://api.eu.xtremepush.com - US:
https://api.us.xtremepush.com
Sending events to the wrong region will silently fail to match your project.
Step 2: Get your App Token
- Sign in to your Xtremepush project.
- Go to Settings > Integrations.
- Copy the App Token for your project.
App Tokens are deprecated: Xtremepush’s External API overview says they are not available on projects created after the June 2026 release and will be removed for existing projects. Signal does not support Xtremepush’s OAuth 2.0 client credentials yet (#1491), so a project without an App Token cannot use this integration today.
Step 3: Decide your external user ID
Xtremepush identifies users by an external user_id. Use the same identifier you use elsewhere in Xtremepush (your web/mobile SDK external ID, your CRM/customer ID). If Xtremepush receives a user_id it has not seen, it auto-creates a new profile — so a mismatched ID silently creates orphan users.
Configuration
| Field | Required | Description |
|---|---|---|
app_token | Yes | Your Xtremepush project App Token (Settings > Integrations). Sent in the request body to authenticate event hits. |
api_base_url | Yes | Region host: https://api.eu.xtremepush.com (EU) or https://api.us.xtremepush.com (US). |
Configure in Signal
Add the integration
- Go to Integrations > Add Integration > Xtremepush.
- Choose the Default preset, or Retail for the ecommerce funnel.
- Enter your App Token and select the correct API Base URL for your region.
- Select the consent categories that should gate delivery.
- Click Save.
Map your external user ID
Make sure your pipeline supplies a stable user_id. Call datafly.identify() with your customer/CRM ID when a user is known so server events stitch to the right Xtremepush profile:
datafly.identify("crm-12345", {
email: "jane.doe@example.com",
first_name: "Jane",
last_name: "Doe",
phone: "+44 7700 900123"
});API Endpoint
POST https://api.eu.xtremepush.com/api/external/hit/event(or https://api.us.xtremepush.com/... for US projects)
Authentication is carried in the request body as the apptoken field. Each event is sent as a single JSON object. Xtremepush returns {"success": true, "code": 200} on acceptance.
A higher-throughput batch endpoint (/api/external/hit/events, up to 1,000 events per request) is also available; contact Datafly support if you need batching enabled.
Identity Signals
Xtremepush matches events to user profiles using the external user_id. Additional profile traits ride along in user_attributes and update the profile before any triggered campaign fires.
| Signal | Field | Notes |
|---|---|---|
| External user ID | user_id | Required: events without a user ID are dropped. Auto-creates the user if unknown. |
user_attributes.email | System attribute. Trimmed and lower-cased; plain (not hashed), because Xtremepush messages the user. | |
| First / last name | user_attributes.first_name, user_attributes.last_name | From datafly.identify() traits. |
| Phone | user_attributes.mobile_number | System attribute, normalised to E.164. |
| Locale | user_attributes.language | Two-letter ISO 639-1 code (en-GB becomes en). |
Unlike advertising destinations, Xtremepush is a customer engagement platform that sends messages to your users, so identity fields such as email and phone are delivered as plain profile attributes (not SHA-256 hashed). All delivery is server-side from your own Signal infrastructure.
Consent
consent_preferences is not set. It records communications permissions (email, SMS, WhatsApp opt-ins), and cookie consent must never set them; an unknown consent state would also have written 0, opting users out. Send it from your own preference centre if you need it.
Event Mapping
Signal uses GA4-style event names. The Default preset maps them to Xtremepush event names; everything else is dropped (defaults.action: drop).
| Signal event | Xtremepush event | value |
|---|---|---|
page | page_view | page_location, page_title, page_referrer |
sign_up | sign_up | method |
login | login | method |
search | search | query (search_term) |
view_item | product_viewed | product_id, product_name, category (from items[]), value, currency, items |
add_to_cart | add_to_cart | as product_viewed |
begin_checkout | checkout_started | value, currency, coupon, items |
purchase | purchase | order_id (transaction_id, required), revenue (value), currency (required), tax, shipping, coupon, items |
The Retail preset adds remove_from_cart, order_shipped and refund. Currency is upper-cased; timestamp is Xtremepush’s 2024-12-13 11:36:00 +00:00 form. Every other event is dropped.
Example: Purchase event
Datafly.js call:
datafly.identify("crm-12345", { email: "jane.doe@example.com" });
datafly.track("purchase", {
transaction_id: "ORD-001",
value: 129.99,
currency: "usd"
});Xtremepush event hit sent by Signal:
{
"apptoken": "YOUR_APP_TOKEN",
"user_id": "crm-12345",
"event": "purchase",
"timestamp": "2026-06-06 11:36:00 +00:00",
"user_attributes": {
"email": "jane.doe@example.com"
},
"value": {
"order_id": "ORD-001",
"revenue": 129.99,
"currency": "USD"
}
}Testing
- In Signal, open the Event Debugger for your Xtremepush integration.
- Trigger an event on your site (e.g. a purchase).
- Confirm Signal received
{"success": true, "code": 200}from Xtremepush. - In Xtremepush, open the user profile for the
user_idyou sent and confirm the event appears in the profile’s event/activity history. - If you have a campaign triggered by the event, confirm it fires.
Troubleshooting
| Problem | Solution |
|---|---|
success: false / 401 / 403 | App Token is wrong or unauthorised, or the project has no App Token (created after June 2026; OAuth support is #1491). |
| Events accepted but not visible | Check you are sending to the correct region host (EU vs US). Wrong region returns success but matches nothing useful. |
| New/duplicate users appearing | The user_id doesn’t match your existing Xtremepush identifier. Align user_id with the external ID used by your web/mobile SDK or CRM. |
| 400 errors | Missing required user_id or event, or malformed body. Inspect the payload in Signal’s Event Debugger. |