Monetate
Datafly Signal delivers events to Monetate (now part of Kibo Personalization) server-to-server using the Engine API. Signal sends visitor context and conversion events — page views, product views, cart contents, and purchases — directly to Monetate’s decision engine so personalization, A/B testing, and recommendations work without a client-side Monetate tag.
Prerequisites
Before configuring Monetate in Signal, you need an active Monetate (Kibo Personalization) account that is provisioned for Engine API server-side integration, plus three values from your account settings.
Step 1: Confirm Engine API access
Some Monetate accounts are configured for the client-side tag only. Ask your Monetate services team to confirm your account is enabled for Engine API server-side ingestion.
Step 2: Find your retailer short name and account ID
- In the Monetate platform, go to Settings and open the API tab of the integration page.
- Note the retailer short name — the parent identifier for your account, used in the API endpoint path.
- Note your account ID — the value after
a_in your channel string (for example, ina_887f2483/p/example.comthe account ID is887f2483).
Step 3: Confirm your channel domain
Confirm the site domain Monetate has configured for this account (for example example.com). Signal builds the channel string as a_{account_id}/p/{domain}.
The /p/ segment denotes the production channel. Monetate uses /d/ for development channels. Use the production form unless your services team tells you otherwise.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
retailer_short_name | Yes | Your Monetate retailer short name. Used in the endpoint path /api/engine/v1/decide/{retailer_short_name}. |
account_id | Yes | Account identifier used to build the channel string a_{account_id}/p/{domain}. |
domain | Yes | Your production site domain, used in the channel string. |
Management UI Setup
Add the integration
Go to Integrations > Add Integration > Monetate.
Enter your account details
Enter your retailer_short_name, account_id, and domain.
Select consent categories
Select the consent categories that gate delivery (typically personalisation or analytics), then click Save.
API Endpoint
POST https://engine.monetate.net/api/engine/v1/decide/{retailer_short_name}
Content-Type: application/jsonThe Engine API /decide endpoint has no per-request API key or token. Each request is scoped to your account by the retailer_short_name in the URL path and the channel field in the body. Every request carries a single visitor-scoped event in the events array.
Identity Signals
Monetate matches server events to a visitor using its own identifiers. Signal forwards whichever are available; you do not need to hash any of these values.
| Signal | Field | Description |
|---|---|---|
| Monetate ID | monetateId | The Monetate visitor cookie identifier (e.g. 2.309132816.1519728587304). Signal forwards this so server events stitch to the same visitor the Monetate tag sees. |
| Device ID | deviceId | Cookieless alternative to monetateId. Signal maps the Datafly anonymous_id here so events still stitch when no Monetate cookie is present. |
| Customer ID | customerId | Your logged-in customer identifier. Signal maps the Datafly user_id when the visitor is identified, enabling a unified customer view across devices. |
For server and tag events to merge into one visitor, the monetateId Signal forwards must match the cookie Monetate’s own tag sets. If you are not running the Monetate tag, Signal falls back to deviceId.
How to identify a user
Call datafly.identify() when a customer logs in so Signal can populate customerId:
datafly.identify("87654321");Event Mapping
Retail preset
| Signal event | Monetate event type |
|---|---|
page | monetate:context:PageView |
Product List Viewed | monetate:context:ProductThumbnailView |
Product Viewed | monetate:context:ProductDetailView |
Cart Viewed | monetate:context:Cart |
Product Added | monetate:context:Cart |
Order Completed | monetate:context:Purchase |
To customise, edit the integration’s Field Mappings in the Management UI.
Example: Product Viewed
Datafly.js call:
datafly.track("Product Viewed", {
product_id: "product72",
sku: "product72-large-green"
});Monetate Engine API payload sent by Signal:
{
"channel": "a_887f2483/p/example.com",
"monetateId": "2.309132816.1519728587304",
"deviceId": "a1b2c3d4-e5f6-...",
"customerId": "87654321",
"events": [
{
"eventType": "monetate:context:ProductDetailView",
"products": [
{ "productId": "product72", "sku": "product72-large-green" }
]
}
]
}Example: Order Completed
Datafly.js call:
datafly.track("Order Completed", {
order_id: "123456789",
currency: "GBP",
products: [
{ product_id: "product72", sku: "product72color2", quantity: 2, price: "24.00" }
]
});Monetate Engine API payload sent by Signal:
{
"channel": "a_887f2483/p/example.com",
"monetateId": "2.309132816.1519728587304",
"events": [
{
"eventType": "monetate:context:Purchase",
"purchaseId": "123456789",
"purchaseLines": [
{ "sku": "product72color2", "pid": "product72", "quantity": 2, "currency": "GBP", "value": "24.00" }
]
}
]
}Testing Your Integration
Trigger events
Browse your site so Signal sends page, product, cart, and purchase events, or use Signal’s Event Debugger to send a test event.
Verify in Monetate
In the Monetate platform, check the session stream / analytics for your account. Events arriving via the Engine API should appear against the matching monetateId or deviceId.
Confirm identity stitching
Confirm that server events and any client-side tag events resolve to the same visitor. If they do not merge, verify the monetateId value Signal forwards matches the Monetate tag cookie.
Page views sent via the Engine API are not used by Monetate to calculate average-page-view or bounce-rate metrics. Use Monetate’s own reporting expectations for those metrics.
Troubleshooting
| Problem | Solution |
|---|---|
400 Bad Request | Check the channel string is a_{account_id}/p/{domain} and the event type is a valid monetate:context:* value. Review the payload in Signal’s Event Debugger. |
403 / 404 from the decide endpoint | Verify the retailer_short_name in the endpoint path is correct and the account is provisioned for Engine API ingestion. |
| Events not appearing in Monetate | Confirm the account_id and domain match the channel Monetate expects for this account. |
| Server and tag events not merging | Ensure the monetateId Signal forwards matches the Monetate tag cookie; otherwise rely on deviceId and customerId. |
| No personalization actions returned | This integration sends context/measurement events only. To retrieve personalization decisions, add a monetate:decision:DecisionRequest event to the blueprint. |