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

FieldRequiredDescription
client_idYesOAuth Client ID issued by Viant for your VDP Connect account.
client_secretYesOAuth Client Secret paired with your Client ID. Stored securely; exchanged for a Bearer access token.
account_idYesNumeric Viant Account ID that owns the conversion data.
advertiser_idYesNumeric Viant Advertiser ID the conversions are attributed to. Sent in the advertisers array.

Configure in Signal

  1. Go to Integrations > Add Integration > Viant.
  2. Choose the Retail preset (page, product view, cart, checkout, payment, purchase, and lead events) or Default.
  3. Enter your client_id, client_secret, account_id, and advertiser_id.
  4. Select the consent categories that apply (typically advertising or marketing).
  5. Click Save.

API Endpoint

PUT https://vdp-connect-api.viantinc.com/v1/conversions

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

TypeSourceHashingDescription
email_sha256datafly.identify() email traitSHA-256, lowercase, trimmedUser’s email address
address_sha256identify address traitSHA-256, normalisedUser’s postal address
iporiginal requestnoneVisitor’s IP address, forwarded automatically
cookieSignal anonymous_idnoneStable first-party identifier
mobile_idmobile SDKnoneMobile 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 eventViant conversionEventType
pagePageView
Product ViewedItemView
Product AddedAddToCart
Checkout StartedInitiateCheckout
Payment Info EnteredAddPaymentInfo
Order CompletedPurchase
Lead GeneratedLead

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

  1. Trigger a conversion event on your site (e.g. complete a test order).
  2. In Signal’s event debugger, confirm the event resolves to the correct conversionEventType and that the identifiers array contains a hashed email, IP, and cookie.
  3. 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.
  4. A 200 response means the batch was accepted; a 400 response includes a bad_records count and per-record validation details.

Troubleshooting

ProblemSolution
401 / 403 errorsClient ID or Client Secret is wrong, or the account lacks Conversion API access. Confirm credentials with your Viant account manager.
400 validation errorsA 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 reportsConfirm the correct account_id and advertiser_id. Allow processing time — onboarded conversions are queued, not real-time.
Low match rateAdd user identity via datafly.identify() so email_sha256 is sent alongside IP and cookie.