Viant
Datafly Signal delivers conversion events to the Viant DSP (Adelphic) server-to-server using the VDP Connect Conversion API. This onboards your online and offline conversions for measurement, reporting, and campaign optimisation without a browser pixel, so delivery is unaffected by ad blockers or browser tracking prevention.
Prerequisites
Before configuring Viant in Signal you need a Viant DSP account with VDP Connect enabled and a set of API credentials.
Request VDP Connect API access
Contact your Viant Programmatic Account Specialist or Account Manager and request VDP Connect Conversion API access for your account. Viant provisions this per account.
Obtain your OAuth credentials
Viant issues an OAuth Client ID and Client Secret for your VDP Connect account. These are exchanged for a short-lived access token on every batch of conversions.
Note your Account ID and Advertiser ID
Find your numeric Account ID (the account that owns the conversion data) and the Advertiser ID the conversions should be attributed to in your Viant DSP account settings.
Configuration
| Field | Required | Description |
|---|---|---|
client_id | Yes | OAuth Client ID issued by Viant for your VDP Connect account. |
client_secret | Yes | OAuth Client Secret paired with your Client ID. Stored securely; exchanged for a Bearer access token. |
account_id | Yes | Numeric Viant Account ID that owns the conversion data. |
advertiser_id | Yes | Numeric Viant Advertiser ID the conversions are attributed to. Sent in the advertisers array. |
Configure in Signal
- Go to Integrations > Add Integration > Viant.
- Choose the Retail preset (page, product view, cart, checkout, payment, purchase, and lead events) or Default.
- Enter your
client_id,client_secret,account_id, andadvertiser_id. - Select the consent categories that apply (typically
advertisingormarketing). - Click Save.
API Endpoint
PUT https://vdp-connect-api.viantinc.com/v1/conversionsAuthentication is OAuth 2.0: Signal exchanges your client_id and client_secret for a short-lived Bearer access token at https://vdp-connect-api.viantinc.com/v1/oauth2/token, then sends the conversions with Authorization: Bearer <token>. The token is cached and refreshed automatically.
The request body is a JSON array of conversion records (up to 10 MB per request). Signal batches events automatically.
Identity Signals
Viant matches conversions to users using an identifiers array. Each entry has a type and a value. The more signals you provide, the higher your match rate.
| Type | Source | Hashing | Description |
|---|---|---|---|
email_sha256 | datafly.identify() email trait | SHA-256, lowercase, trimmed | User’s email address |
address_sha256 | identify address trait | SHA-256, normalised | User’s postal address |
ip | original request | none | Visitor’s IP address, forwarded automatically |
cookie | Signal anonymous_id | none | Stable first-party identifier |
mobile_id | mobile SDK | none | Mobile advertising ID (IDFA / GAID) |
All PII hashing is performed server-side by Signal before the data leaves your infrastructure. Raw email and address values are never sent to Viant.
How to send user data
Call datafly.identify() when a user logs in, registers, or submits a form. Signal normalises and hashes the email before sending it to Viant as email_sha256:
datafly.identify("user-123", {
email: "jane.doe@example.com"
});IP and anonymous_id (cookie) are attached automatically on every event — no configuration needed.
Event Mapping
Retail preset
Signal maps GA4-style event names to Viant conversionEventType values:
| Signal event | Viant conversionEventType |
|---|---|
page | PageView |
Product Viewed | ItemView |
Product Added | AddToCart |
Checkout Started | InitiateCheckout |
Payment Info Entered | AddPaymentInfo |
Order Completed | Purchase |
Lead Generated | Lead |
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",
products: [
{ product_id: "SKU-A", product_name: "Widget", price: 49.99, quantity: 2 },
{ product_id: "SKU-B", product_name: "Gadget", price: 30.01, quantity: 1 }
]
});Viant payload sent by Signal:
[
{
"accountId": 12345,
"advertisers": [67890],
"salesData": {
"transactionId": "ORD-001",
"conversionEventType": "Purchase",
"conversionTimestamp": "2026-06-06T15:32:00Z",
"amount": 129.99,
"currency": "USD",
"identifiers": [
{ "type": "email_sha256", "value": "5e8848...e3b0c4" },
{ "type": "ip", "value": "203.0.113.50" },
{ "type": "cookie", "value": "a1b2c3d4e5f6" }
],
"purchasedItems": [
{ "itemId": "SKU-A", "productName": "Widget", "price": 49.99, "quantity": 2 },
{ "itemId": "SKU-B", "productName": "Gadget", "price": 30.01, "quantity": 1 }
]
}
}
]Testing
- Trigger a conversion event on your site (e.g. complete a test order).
- In Signal’s event debugger, confirm the event resolves to the correct
conversionEventTypeand that theidentifiersarray contains a hashed email, IP, and cookie. - In your Viant DSP account, check the conversion onboarding / measurement reports for the records to appear. Onboarded conversions are queued for processing, so allow time for them to surface in reporting.
- A
200response means the batch was accepted; a400response includes abad_recordscount and per-record validation details.
Troubleshooting
| Problem | Solution |
|---|---|
401 / 403 errors | Client ID or Client Secret is wrong, or the account lacks Conversion API access. Confirm credentials with your Viant account manager. |
400 validation errors | A record is missing a required field (transactionId, conversionEventType, conversionTimestamp, or at least one identifier) or uses an unknown conversionEventType. Review the payload in Signal’s event debugger. |
| Conversions not appearing in reports | Confirm the correct account_id and advertiser_id. Allow processing time — onboarded conversions are queued, not real-time. |
| Low match rate | Add user identity via datafly.identify() so email_sha256 is sent alongside IP and cookie. |