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
| Field | Required | Description |
|---|---|---|
company_id | Yes | Your Epsilon Company ID (dtm_cid). |
company_magic | Yes | Your 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
- Go to Integrations → Add Integration → Epsilon.
- Choose the Default preset (page browsing + purchase conversion).
- Enter your
company_idandcompany_magic. - Set the browsing and conversion Form IDs in the event field mappings.
- Select consent categories (typically
advertisingormarketing). - 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:
| Signal | Parameter | Description |
|---|---|---|
| IP address | dtm_user_ip | Visitor’s IP, forwarded from the original browser request. |
| User-Agent | dtm_user_agent | Visitor’s User-Agent, forwarded from the original request. |
| First-party cookie | dtm_cookie_id | Epsilon’s first-party cookie identifier, when present. |
| Page location | dtmc_loc | The URL of the page where the event occurred. |
| Referrer | dtm_ref | The 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:
| Signal | Parameter | Hashing |
|---|---|---|
dtm_email_hash | SHA-256, lowercased, trimmed | |
| Customer ID | dtm_user_id | Sent 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.
Consent
Epsilon honours IAB consent strings. Signal forwards whichever your CMP produced:
| Standard | Parameter |
|---|---|
| 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 event | Epsilon event | Key parameters |
|---|---|---|
page | browsing | dtm_fid, dtmc_loc |
Product Viewed | browsing | dtm_fid, dtm_product_id, dtm_category, dtm_brand |
Order Completed | conversion | dtm_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
- Trigger a
pageand anOrder Completedevent on your site. - In Signal’s Event Debugger, confirm the outbound request to
fp.dotomi.comshows yourdtm_cid, the correctdtm_fid, and the conversion parameters. - Confirm a
200 OK(or image) response. - 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
| Problem | Solution |
|---|---|
| Events not appearing in Epsilon | Confirm 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 responses | The firing path is wrong. Confirm the path segment after fp.dotomi.com against your Epsilon tagging document. |
401 / 403 responses | The Company ID is disabled or dtm_cmagic does not match dtm_cid. Re-check both values. |
| Low match rate | Ensure email is passed via datafly.identify(), and that IP and User-Agent forwarding are enabled. |
| Events dropped before delivery | Marketing consent is not granted, or the event is not in the blueprint’s event map (defaults.action is drop). |