MoEngage
MoEngage is a cross-channel customer engagement platform. Datafly Signal delivers your first-party events server-to-server to the MoEngage Track Event (Data Import) API, so user actions captured on your site reach MoEngage without a browser SDK — feeding segmentation, journeys, and campaign triggers.
Prerequisites
- A MoEngage account with API access enabled.
- Your Workspace ID (formerly “App ID”) and Data API key, both from Settings → Account → APIs.
- Your MoEngage data center number (the cluster shown in your dashboard URL:
01,02,03,04,05,06, or101). - A user identifier on your events. Signal maps its
user_idto MoEngage’scustomer_id.
Configuration
In MoEngage, go to Settings → Account → APIs:
| Value | Where to find it |
|---|---|
| Workspace ID | Under Workspace ID — click the copy icon. Used as both the URL path and the Basic Auth username. |
| Data API key | In the API keys section, copy the key from the Data tile. Used as the Basic Auth password. |
| Data center | The cluster number in your dashboard URL (e.g. dashboard-01.moengage.com → 01). |
Configure in Signal
- In Signal, add the MoEngage integration.
- Enter your Workspace ID, Data API Key, and Data Center.
- Attach the MoEngage blueprint to your pipeline and choose a preset (Retail or B2B / SaaS).
- Enable the events you want to forward, then save.
API Endpoint
Signal sends a POST request per event:
POST https://api-{data_center}.moengage.com/v1/event/{workspace_id}
Authorization: Basic base64(workspace_id:api_key)
Content-Type: application/jsonA 200 response means the event was accepted and will be processed asynchronously. MoEngage enforces a limit of 30,000 events per minute and a 128 KB maximum payload size.
Identity Signals
MoEngage resolves a profile from the customer_id first. Signal also forwards reserved identity attributes so MoEngage can match and enrich the profile:
| Signal source | MoEngage field | Notes |
|---|---|---|
user_id | customer_id (root) | Primary user identifier. Required. |
$traits.email | user_identifiers.u_em | Reserved email attribute. |
$traits.phone | user_identifiers.u_mb | Reserved mobile attribute, normalised to E.164. |
$traits.first_name | attributes.u_fn | Standard first-name attribute. |
$traits.last_name | attributes.u_ln | Standard last-name attribute. |
MoEngage does not require hashing for these fields — it stores the raw values on the profile, so Signal sends email and phone in clear within the encrypted server-to-server request. Phone numbers are normalised to E.164 before sending.
Reserved prefix: never use
moe_as a prefix on event names or attributes — it is reserved by MoEngage and may cause events to be dropped.
Event Mapping
Signal maps each event to a MoEngage action. The event name becomes action, identity fields land at the payload root, and event properties land in the action’s attributes object.
Example — a purchase captured with Datafly.js:
datafly.track("Order Completed", {
order_id: "ORD-1001",
revenue: 89.99,
currency: "GBP",
coupon: "WELCOME10",
});Resulting MoEngage payload:
{
"type": "event",
"customer_id": "u_8842",
"user_identifiers": {
"u_em": "jane@example.com",
"u_mb": "+447700900123"
},
"actions": [
{
"action": "Order Completed",
"platform": "web",
"attributes": {
"order_id": "ORD-1001",
"value": 89.99,
"currency": "GBP",
"coupon": "WELCOME10"
}
}
]
}The default presets map these events:
| Signal event | MoEngage action |
|---|---|
page | Page Viewed |
Products Searched | Products Searched |
Product Viewed | Product Viewed |
Product Added | Product Added |
Checkout Started | Checkout Started |
Order Completed | Order Completed |
Signed Up | Signed Up |
Logged In | Logged In |
Subscription Started | Subscription Started |
Events not in your blueprint are dropped before delivery.
Testing
- Trigger a mapped event on your site (e.g. complete a test order).
- In Signal’s Event Debugger, confirm the event delivered with a
200response. - In MoEngage, open the user profile for that
customer_idand confirm the action appears under the user’s activity. Processing is asynchronous, so allow a short delay.
Troubleshooting
| Symptom | Likely cause |
|---|---|
401 Unauthorized | Wrong Workspace ID or Data API key, or the wrong key type (use the Data tile key, not a campaign/report key). |
403 Forbidden | Account suspended or blocked. |
404 / connection error | Wrong data center — confirm the cluster number from your dashboard URL. |
400 Bad Request | Missing customer_id, or malformed attributes. |
413 Payload Too Large | Event exceeds 128 KB — reduce array/attribute size. |
429 Too Many Requests | Over 30,000 events/minute; Signal retries with backoff. |
| Events deliver but profile not updating | customer_id does not match an existing profile and Identity Resolution is off — confirm your identifier strategy. |