Mapp
Datafly Signal delivers events to Mapp Engage server-to-server using the Engage Integration Event API (subtype=product). Each event is matched to an existing Engage contact by email, user ID, or mobile number, then becomes available for segmentation, Whiteboard automations, and personalised cross-channel messaging.
Because delivery happens from your own Signal endpoint, no Mapp pixel or browser SDK is required, and the events are not affected by ad blockers or third-party cookie restrictions.
Prerequisites
- A Mapp Engage account with API access enabled.
- A system user with the API or Hybrid role (Administration > Users). HTTP Basic authentication uses this user’s email and password.
- An Integration created in Engage (Administration > Integrations). Note its numeric Integration ID.
- Your Engage host — the host portion of your login URL (for example, if you log in at
https://email.acme.mapp.com/home/login.jsp, the host isemail.acme). - The contacts you reference must already exist in Engage. An event for an unknown contact is silently not saved, so pair this with your existing contact-import or registration flow.
Configuration
Collect the following before configuring Signal:
| Field | Where to find it |
|---|---|
| Engage Host | The host of your Engage login URL, without .mapp.com (e.g. email.acme). |
| Integration ID | Administration > Integrations — the numeric ID of your integration. |
| API User Email | The email of your API/Hybrid system user. |
| API User Password | That user’s password. |
Configure in Signal
- In the management UI, open Integrations and add Mapp.
- Enter the Engage Host, Integration ID, API User Email, and API User Password.
- Select the Default preset and attach it to your pipeline.
- Map your Signal events to the Mapp product fields (see Event Mapping).
- Save and enable the integration.
API Endpoint
Signal sends a POST request per event to the Engage Integration Event API:
POST https://{host}.mapp.com/api/rest/v19/integration/{integration_id}/event?subtype=productAuthentication is HTTP Basic. Signal builds the Authorization header by Base64-encoding {api_user}:{api_password}:
Authorization: Basic <base64(api_user:api_password)>
Content-Type: application/jsonThe subtype=product query parameter selects the product event schema. The request body is flat JSON.
Identity Signals
Mapp Engage resolves the contact using the first identifier present, in this order: userId, then email, then mobileNumber.
| Signal field | Mapp field | Notes |
|---|---|---|
user_id | userId | The Engage contact ID, if you store it. |
$traits.email | email | Trimmed and lowercased before sending. |
$traits.phone | mobileNumber | Normalised to E.164 before sending. |
Mapp’s Integration Event API expects these identifiers in plain text (not hashed) so the contact can be matched. At least one identifier must be present, or the event is rejected.
Event Mapping
The Default preset maps Signal’s GA4-style events to the Mapp product event schema. Unmapped events are dropped.
| Signal event | Mapp fields populated |
|---|---|
page | productURL, productName |
Product Viewed | productSKU, productName, productPrice, brand, productURL, imageURL, customAttribute1 (category) |
Product Added | as above plus productQuantity |
Product Added to Wishlist | productSKU, productName, productPrice, brand, productURL, imageURL, customAttribute1 |
Order Completed | productSKU, productName, productPrice, customAttribute2 (order_id), customAttribute3 (currency) |
Example
A Product Viewed event from Datafly.js:
datafly.track("Product Viewed", {
product_id: "aaa-bbb-ccc",
product_name: "Merino Crew Jumper",
price: 89.0,
brand: "Acme",
category: "Knitwear",
url: "https://acme.com/p/merino-crew",
image_url: "https://acme.com/img/merino-crew.jpg"
}, {
traits: { email: "Jo.Shopper@Example.com " }
});Resulting request body sent to Mapp:
{
"email": "jo.shopper@example.com",
"productSKU": "aaa-bbb-ccc",
"productName": "Merino Crew Jumper",
"productPrice": "89",
"brand": "Acme",
"productURL": "https://acme.com/p/merino-crew",
"imageURL": "https://acme.com/img/merino-crew.jpg",
"customAttribute1": "Knitwear",
"createdAt": "1749200000000"
}Testing
- Send a test event from a page running Datafly.js, or replay one from the Event Debugger.
- Confirm Signal records a
2xxresponse from Mapp for the delivery. - In Engage, open the contact you targeted and verify the product event appears in their activity / behavioural data.
- If you have a Whiteboard automation listening for the integration event, confirm it triggers.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Wrong API user email/password, or the Basic header is missing. | Re-enter the credentials; confirm the user can log in. |
403 Forbidden | The system user lacks the API or Hybrid role. | Grant the API or Hybrid role in Administration > Users. |
404 Not Found | Wrong host or unknown Integration ID. | Re-check the host (login URL) and the numeric Integration ID. |
400 Bad Request | Missing identifier, or malformed JSON. | Ensure at least one of email / userId / mobileNumber is mapped. |
2xx but no data in Engage | The contact does not exist. | Events for unknown contacts are not saved — import or register the contact first. |
For full API reference see the Mapp Engage API documentation and Getting Started with Engage API.