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

  1. In the Monetate platform, go to Settings and open the API tab of the integration page.
  2. Note the retailer short name — the parent identifier for your account, used in the API endpoint path.
  3. Note your account ID — the value after a_ in your channel string (for example, in a_887f2483/p/example.com the account ID is 887f2483).

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

FieldRequiredDescription
retailer_short_nameYesYour Monetate retailer short name. Used in the endpoint path /api/engine/v1/decide/{retailer_short_name}.
account_idYesAccount identifier used to build the channel string a_{account_id}/p/{domain}.
domainYesYour 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 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/json

The 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.

SignalFieldDescription
Monetate IDmonetateIdThe 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 IDdeviceIdCookieless alternative to monetateId. Signal maps the Datafly anonymous_id here so events still stitch when no Monetate cookie is present.
Customer IDcustomerIdYour 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 eventMonetate event type
pagemonetate:context:PageView
Product List Viewedmonetate:context:ProductThumbnailView
Product Viewedmonetate:context:ProductDetailView
Cart Viewedmonetate:context:Cart
Product Addedmonetate:context:Cart
Order Completedmonetate: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

ProblemSolution
400 Bad RequestCheck 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 endpointVerify the retailer_short_name in the endpoint path is correct and the account is provisioned for Engine API ingestion.
Events not appearing in MonetateConfirm the account_id and domain match the channel Monetate expects for this account.
Server and tag events not mergingEnsure the monetateId Signal forwards matches the Monetate tag cookie; otherwise rely on deviceId and customerId.
No personalization actions returnedThis integration sends context/measurement events only. To retrieve personalization decisions, add a monetate:decision:DecisionRequest event to the blueprint.