Dotdigital

Dotdigital is a customer engagement platform. Datafly Signal writes your events to Dotdigital as insight (transactional) data on the contact (POST /v2/contacts/transactional-data/{collectionName}), for programs, automations and segments.

Why route Dotdigital through Datafly Signal

  • Events come from your server, not the browser. They reach Dotdigital even when a tracker blocker or a failed page unload would have dropped a client-side call.
  • Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
  • One consent decision governs every destination. Dotdigital is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Get your Dotdigital credentials

Create an API user

In Dotdigital go to Settings > Access > API users and create one. Note its email address and password.

Note your region

The host of your API user page tells you the region: r1, r2 or r3.

Choose a collection name

Letters, digits and underscores, not starting with a digit. Use one collection per preset (for example signal_events); for the Retail preset use orders, the collection name Dotdigital’s commerce features read.

Configuration

FieldRequiredDescription
regionYesYour Dotdigital region prefix (e.g. r1, r2, r3). This forms the API host https://{region}-api.dotdigital.com. Find it in the host portion of your Dotdigital app URL or your API user setup page.
api_user_emailYesThe email address of a Dotdigital API user. Create one under Settings > Access > API users. Used as the Basic Auth username.
api_user_passwordYesThe password for the Dotdigital API user. Used as the Basic Auth password.
collection_nameYesThe transactional-data collection these events are written to. Alphanumeric and underscores only, no spaces, must not start with a digit, max 255 characters. Use different collections to keep pipelines separate.

Management UI setup

  1. Go to Integrations in the sidebar and open the Integration Library tab.
  2. Find Dotdigital under Marketing Automation and click Install.
  3. Choose a preset, enter the fields above and click Install Integration.

Management API setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/dotdigital/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Dotdigital",
  "variant": "default",
  "config": {
    "region": "your_region",
    "api_user_email": "your_api_user_email",
    "api_user_password": "your_api_user_password",
    "collection_name": "your_collection_name"
  },
  "delivery_mode": "server_side"
}'

What Signal sends

An example request, rendered from the default preset for purchase:

POST https://r1-api.dotdigital.com/v2/contacts/transactional-data/signal_events
 
{
  "contactIdentifier": "neill@example.com",
  "json": {
    "coupon": "AUTUMN10",
    "currency": "GBP",
    "eventName": "order_completed",
    "orderId": "ORD-1001",
    "pageUrl": "https://www.example.co.uk/shop/jackets",
    "products": [
      {
        "category": "Jackets",
        "price": 129.99,
        "productId": "SKU-1",
        "productName": "Parka Jacket",
        "quantity": 2
      },
      {
        "category": "Hats",
        "price": 20,
        "productId": "SKU-2",
        "productName": "Wool Hat",
        "quantity": 1
      }
    ],
    "revenue": 279.98,
    "shipping": 4.99,
    "tax": 46.66,
    "timestamp": "2025-09-22T00:13:20Z",
    "userId": "crm-user-7"
  },
  "key": "msg-m2-1"
}
FieldSource
keyThe record key: the Signal message ID, or the order ID for order records (Retail preset), so a retried order is the same record.
contactIdentifierThe contact’s email from identify() traits, trimmed and lower-cased. Required.
jsonThe event name (eventName), user ID, timestamp, page URL and the event’s properties; products as a list; currency upper-cased. Retail order records use the names of Dotdigital’s orders schema: order_total, order_subtotal (sum of price x qty), currency, purchase_date, delivery_total, couponCode and products (sku, name, category, price, qty).

Dotdigital matches the contact on the email address and accepts no hashed identifier, so it is sent in plain text. Names are not copied into records: the contact already holds them. An event without an email is not sent.

Presets

PresetSignal event → vendor event
Defaultsearch, view_item → product_viewed, add_to_cart, begin_checkout → checkout_started, purchase → order_completed, refund → order_refunded, sign_up → signed_up, generate_lead → lead_generated
Retailpurchase → order

Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.

Notes and limits

  • The v2 transactional-data call is marked deprecated by Dotdigital in favour of the Insight Data v3 service; no sunset date is published. The move to v3 is tracked in #1493.
  • Page views are not sent: the Dotdigital tag records site browsing, and this call is in the low call-rate tier.

Marketing-automation integrations have no consent category by default. Assign the marketing category when you install Dotdigital, so an event is delivered only when the visitor has granted it. Cookie-banner consent is not email or SMS opt-in: keep messaging opt-in in Dotdigital.

Verify it’s working

  1. Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
  2. Confirm a 2xx response from Dotdigital.
  3. Find the contact in Dotdigital and check the event or record arrived.

Troubleshooting

SymptomResolution
401The API user email or password is wrong.
404Wrong region, or an invalid collection name.
429Your account’s call-rate tier is exhausted; Signal retries with backoff.