LiveIntent Conversions API
Datafly Signal delivers conversion events to LiveIntent server-to-server using the Conversions API. LiveIntent is a people-based platform: conversions are matched on the visitor’s email (hashed before it leaves your infrastructure), so delivery does not depend on third-party cookies, ad blockers, or browser tracking prevention.
Prerequisites
Before configuring LiveIntent in Signal, you need three values, all supplied by your LiveIntent account manager:
- Customer ID — identifies your LiveIntent account. It forms part of the Conversions API request path.
- API Token — a static Bearer token used to authenticate every request.
- Pixel ID — the numeric LiveIntent conversion pixel you are attributing events against.
The Conversions API is not self-serve. Contact your LiveIntent account manager to be provisioned and to receive your Customer ID, API Token, and Pixel ID. The API reference lives at conversions.liveintent.com/api-guide.
Configuration
Configuration Fields
| Field | Required | Description |
|---|---|---|
customer_id | Yes | Your LiveIntent customer ID. Forms part of the request path. |
api_token | Yes | Static Bearer token issued by LiveIntent. Sent as the Authorization header. |
pixel_id | Yes | Numeric LiveIntent conversion pixel ID. Sent as pixelId on every event. |
Configure in Signal
- Go to Integrations > Add Integration > LiveIntent.
- Select the Default preset (page visits, product views, and purchases).
- Enter your
customer_id,api_token, andpixel_id. - Select consent categories (typically
advertisingormarketing). - Click Save.
API Endpoint
POST https://conversions.liveintent.com/conversions/{customer_id}
Authorization: Bearer {api_token}
Content-Type: application/jsonThe request body is a JSON array of conversion events. Signal sends up to 100 events per request and batches automatically.
A successful request returns 204 No Content (all signals processed). A 200 response means the batch was only partially processed and the returned signal IDs should be retried. 400 indicates a malformed body, 401 a missing or invalid token, and 403 that the token lacks access to the customer or pixel.
Identity Signals
LiveIntent matches each conversion against its Identity Graph using the visitor’s email plus device signals. The more signals you provide, the higher your match rate.
| Signal | Field | Hashing | Description |
|---|---|---|---|
| Email (MD5) | userData.md5 | MD5, lowercased, trimmed | LiveIntent’s preferred email match key. |
| Email (SHA-256) | userData.sha2 | SHA-256, lowercased, trimmed | Secondary email match key. |
| IP address | userData.ip | None | Visitor IP, forwarded from the original request. |
| User agent | userData.ua | None | Visitor User-Agent, forwarded from the original request. |
All email hashing is performed server-side by Signal before any data leaves your infrastructure. Raw email is never sent to LiveIntent. Either a hashed email or a LiveIntent decisionId is required for attribution, so make sure users are identified via datafly.identify().
How to Send User Data
Call datafly.identify() when a user logs in, registers, or submits a form. Signal normalises (lowercase + trim) and hashes the email with both MD5 and SHA-256 automatically:
datafly.identify("user-123", {
email: "jane.doe@example.com"
});Event Mapping
Default preset
| Signal event | LiveIntent source | Notes |
|---|---|---|
page | web | Page visit; carries sourceUrl. |
Product Viewed | web | Product view; carries sourceUrl, optional currency / value. |
Order Completed | web | Purchase; carries orderId, value, currency. |
Every record posted to the Conversions API is a conversion identified by your pixelId — there is no per-event name on the wire. Signal sets source to web and routes purchase detail into the purchaseData object. All other Signal events are dropped (the blueprint default is drop).
To customise, edit the integration’s Field Mappings in the Management UI.
Example: Purchase Event
Datafly.js call:
datafly.identify("user-123", { email: "jane.doe@example.com" });
datafly.track("Order Completed", {
order_id: "ORD-001",
revenue: 129.99,
currency: "USD"
});LiveIntent Conversions API payload sent by Signal:
[
{
"eventId": "evt_abc123def456",
"pixelId": 67890,
"eventTime": 1717668000,
"source": "web",
"userData": {
"md5": "f0e166dc34d14d6c228ffac576c9a43c",
"sha2": "62a14e1de526e9bbe8524c5113597e6131a3995027c0a1c75d3a3c8a8a04c2f9",
"ip": "203.0.113.50",
"ua": "Mozilla/5.0 ..."
},
"purchaseData": {
"sourceUrl": "https://example.com/checkout/confirmation",
"orderId": "ORD-001",
"value": 129.99,
"currency": "USD"
}
}
]eventTime is a Unix timestamp in seconds and must be earlier than the time the event is sent. LiveIntent accepts events up to 7 days in the past.
Testing
Trigger a test conversion
Identify a user and fire an Order Completed event on your site, or replay one through Signal’s event debugger.
Confirm the request
In the Signal event debugger, inspect the outbound request. Confirm the Authorization: Bearer header is present, the URL path ends with your customer_id, the body is a JSON array, and each element carries eventId, pixelId, eventTime, source, and a userData.md5 / userData.sha2 hash.
Confirm acceptance
A successful delivery returns 204 No Content. A 200 indicates partial processing.
Confirm attribution
Ask your LiveIntent account manager to confirm conversions are landing against your pixel. Match rate depends on the hashed email being present, so verify users are identified before the conversion fires.
Troubleshooting
| Problem | Solution |
|---|---|
401 responses | The API token is missing or invalid. Confirm the api_token is set and sent as Authorization: Bearer. |
403 responses | The token does not have access to the configured customer_id / pixel_id. Confirm all three values with your account manager. |
400 responses | Malformed body or a missing required field. Check that eventId, pixelId, eventTime, and source are present, and that eventTime is in epoch seconds (not milliseconds). |
| Low match rate | Conversions without a hashed email rely on IP + user agent only. Ensure datafly.identify() runs with the user’s email before the conversion event fires. |
| Events rejected as too old / too new | eventTime must be earlier than send time and no more than 7 days in the past. |
| Whole batch rejected | If any event in a batch is invalid, LiveIntent rejects the entire batch. Inspect the rejected payload in Signal’s event debugger. |