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 is email.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:

FieldWhere to find it
Engage HostThe host of your Engage login URL, without .mapp.com (e.g. email.acme).
Integration IDAdministration > Integrations — the numeric ID of your integration.
API User EmailThe email of your API/Hybrid system user.
API User PasswordThat user’s password.

Configure in Signal

  1. In the management UI, open Integrations and add Mapp.
  2. Enter the Engage Host, Integration ID, API User Email, and API User Password.
  3. Select the Default preset and attach it to your pipeline.
  4. Map your Signal events to the Mapp product fields (see Event Mapping).
  5. 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=product

Authentication 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/json

The 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 fieldMapp fieldNotes
user_iduserIdThe Engage contact ID, if you store it.
$traits.emailemailTrimmed and lowercased before sending.
$traits.phonemobileNumberNormalised 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 eventMapp fields populated
pageproductURL, productName
Product ViewedproductSKU, productName, productPrice, brand, productURL, imageURL, customAttribute1 (category)
Product Addedas above plus productQuantity
Product Added to WishlistproductSKU, productName, productPrice, brand, productURL, imageURL, customAttribute1
Order CompletedproductSKU, 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

  1. Send a test event from a page running Datafly.js, or replay one from the Event Debugger.
  2. Confirm Signal records a 2xx response from Mapp for the delivery.
  3. In Engage, open the contact you targeted and verify the product event appears in their activity / behavioural data.
  4. If you have a Whiteboard automation listening for the integration event, confirm it triggers.

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedWrong API user email/password, or the Basic header is missing.Re-enter the credentials; confirm the user can log in.
403 ForbiddenThe system user lacks the API or Hybrid role.Grant the API or Hybrid role in Administration > Users.
404 Not FoundWrong host or unknown Integration ID.Re-check the host (login URL) and the numeric Integration ID.
400 Bad RequestMissing identifier, or malformed JSON.Ensure at least one of email / userId / mobileNumber is mapped.
2xx but no data in EngageThe 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.