Epsilon

Datafly Signal delivers events to Epsilon (formerly Conversant / Dotomi) server-to-server using the Epsilon Event API — the server-side surface of Epsilon’s DTM (Data & Tag Management) tag. This sends your browsing and conversion data to Epsilon for first-party audience building and conversion attribution without a client-side pixel, so delivery is not affected by ad blockers or browser tracking prevention.

Prerequisites

Before configuring Epsilon in Signal you need an active Epsilon (Conversant) advertiser account and the tagging document Epsilon issues for it. That document contains the values you will enter in Signal.

Get your Company ID and Secondary Company ID

From your Epsilon tagging document (or your Epsilon account team), note:

  • Company ID (dtm_cid) — the numeric identifier for your Epsilon account.
  • Secondary Company ID (dtm_cmagic) — the “Company Magic” value that confirms the Company ID.

Get your Form IDs

Epsilon keys each event on a Form ID (dtm_fid). You will typically have:

  • A browsing Form ID for page and product-view events.
  • A conversion Form ID for purchase / order events.

Your Epsilon account team assigns these. If you have a single Form ID, use it for both.

Confirm your firing path

The Event API host is fp.dotomi.com. The path segment of the firing URL is issued per account in your tagging document. The Signal default is /dtm/track; confirm yours matches before going live.

Configure in Signal

Configuration Fields

FieldRequiredDescription
company_idYesYour Epsilon Company ID (dtm_cid).
company_magicYesYour Epsilon Secondary Company ID (dtm_cmagic).

The browsing and conversion Form IDs are set on the integration’s field mappings (dtm_fid) per event, so a single integration can route page views and purchases to different Epsilon forms.

Management UI Setup

  1. Go to IntegrationsAdd IntegrationEpsilon.
  2. Choose the Default preset (page browsing + purchase conversion).
  3. Enter your company_id and company_magic.
  4. Set the browsing and conversion Form IDs in the event field mappings.
  5. Select consent categories (typically advertising or marketing).
  6. Click Save.

API Endpoint

GET https://fp.dotomi.com/dtm/track?dtm_cid={company_id}&dtm_cmagic={company_magic}&dtm_fid=...

The Epsilon Event API is a GET “fire pixel”: every field is carried on the URL query string and the response is a 1×1 image. There is no JSON body and no API key — the account is authenticated by dtm_cid plus dtm_cmagic, which Signal appends to every request.

Identity Signals

Epsilon matches server events to user profiles using several signals. The more you provide, the higher your match rate.

Automatic Signals

Sent automatically by Signal — no configuration needed:

SignalParameterDescription
IP addressdtm_user_ipVisitor’s IP, forwarded from the original browser request.
User-Agentdtm_user_agentVisitor’s User-Agent, forwarded from the original request.
First-party cookiedtm_cookie_idEpsilon’s first-party cookie identifier, when present.
Page locationdtmc_locThe URL of the page where the event occurred.
Referrerdtm_refThe referring URL.

User-Provided Signals (Hashed)

When a user is identified via datafly.identify(), the email is normalised (trim + lowercase) and SHA-256 hashed before delivery:

SignalParameterHashing
Emaildtm_email_hashSHA-256, lowercased, trimmed
Customer IDdtm_user_idSent as-is (your own identifier)

All PII hashing is performed server-side by Signal before the data leaves your infrastructure. Raw email is never sent to Epsilon.

How to Send User Data

datafly.identify("user-123", {
  email: "jane.doe@example.com"
});

Signal normalises and hashes the email automatically before sending to Epsilon.

Epsilon honours IAB consent strings. Signal forwards whichever your CMP produced:

StandardParameter
IAB TCF (GDPR)dtmc_tcf_string
IAB GPP (US states)dtmc_gpp_string

Events only deliver when the visitor’s canonical marketing consent is granted, per the integration’s selected consent categories.

Event Mapping

Default preset

Signal eventEpsilon eventKey parameters
pagebrowsingdtm_fid, dtmc_loc
Product Viewedbrowsingdtm_fid, dtm_product_id, dtm_category, dtm_brand
Order Completedconversiondtm_fid, dtmc_transaction_id, dtm_conv_val, dtm_conv_curr, dtm_items

To customise, edit the integration’s Field Mappings in the Management UI.

Example: Purchase Event

Datafly.js call:

datafly.track("Order Completed", {
  order_id: "ORD-001",
  revenue: 129.99,
  currency: "USD",
  products: [
    { product_id: "SKU-A", price: 49.99, quantity: 2 },
    { product_id: "SKU-B", price: 30.01, quantity: 1 }
  ]
});

Epsilon Event API request sent by Signal:

GET https://fp.dotomi.com/dtm/track
  ?dtm_cid=1234567
  &dtm_cmagic=abc123def
  &dtm_fid=conversion-form
  &dtmc_conv_type=purchase
  &dtmc_transaction_id=ORD-001
  &dtm_conv_val=129.99
  &dtm_conv_curr=USD
  &dtm_user_ip=203.0.113.50
  &dtm_email_hash=5e88489...
  &dtmc_loc=https%3A%2F%2Fexample.com%2Fcheckout%2Fconfirmation
  &dtmc_tcf_string=CPxxxx...

The visitor User-Agent is sent as the request’s User-Agent header.

Testing Your Integration

  1. Trigger a page and an Order Completed event on your site.
  2. In Signal’s Event Debugger, confirm the outbound request to fp.dotomi.com shows your dtm_cid, the correct dtm_fid, and the conversion parameters.
  3. Confirm a 200 OK (or image) response.
  4. Ask your Epsilon account team to confirm the events are landing against the expected Company ID and Form IDs — Epsilon does not provide a self-serve real-time event inspector.

Troubleshooting

ProblemSolution
Events not appearing in EpsilonConfirm dtm_cid and dtm_cmagic match the tagging document exactly, and that the dtm_fid for each event is a Form ID assigned to your account.
404 responsesThe firing path is wrong. Confirm the path segment after fp.dotomi.com against your Epsilon tagging document.
401 / 403 responsesThe Company ID is disabled or dtm_cmagic does not match dtm_cid. Re-check both values.
Low match rateEnsure email is passed via datafly.identify(), and that IP and User-Agent forwarding are enabled.
Events dropped before deliveryMarketing consent is not granted, or the event is not in the blueprint’s event map (defaults.action is drop).