Adobe Campaign

Datafly Signal triggers Adobe Campaign Standard transactional messages server-to-server using the Message Center real-time event (transactional messaging) REST API. Each Signal event becomes a transactional trigger that Adobe Campaign uses to send a personalised message (email, SMS, or push) to a known profile.

This integration targets Adobe Campaign Standard (the mc.adobe.io REST API). Adobe Campaign Classic (v7/v8) uses a different SOAP-based nms:rtEvent flow and is not covered here.

Prerequisites

Before configuring Adobe Campaign in Signal, you need:

  • An Adobe Campaign Standard instance with transactional messaging enabled.
  • A published transactional event in Campaign (this generates the event ID).
  • An Adobe Developer Console project with an OAuth Server-to-Server credential that has access to the Adobe Campaign API.
  • Your Adobe IMS Organization ID.
⚠️

Adobe deprecated JWT / Service Account credentials on 27 January 2025. You must use an OAuth Server-to-Server credential. JWT credentials no longer work.

Step 1: Create and publish a transactional event

  1. In Adobe Campaign, go to Marketing activities and create a transactional message event (Message Center).
  2. Configure the event payload fields and the message template. Template variables reference your context data as <%= context.<field> %> — for example <%= context.firstName %> or <%= context.orderId %>.
  3. Publish the event. Unpublished events return 404 from the API.
  4. Open the event and note the event ID (for example EVTcartAbandonment) and the transactional API name shown in the API preview (for example mcSubscriptions).

Step 2: Create an OAuth Server-to-Server credential

  1. Go to the Adobe Developer Console and create (or open) a project.
  2. Add the Adobe Campaign API to the project.
  3. When prompted for the credential type, choose OAuth Server-to-Server.
  4. After creation, the credential page shows your Client ID (API Key), Client Secret, and the scopes assigned to the credential. Note all three.

Step 3: Find your Organization ID

Your IMS Organization ID looks like ABC123DEF456@AdobeOrg. You can find it in the Adobe Developer Console project overview, or in the Adobe Admin Console under your organisation settings.

Configuration

Signal needs the following values to deliver events to Adobe Campaign:

FieldDescriptionExample
Organization IDYour Adobe IMS Org ID (the ORGANIZATION path segment).ABC123DEF456@AdobeOrg
Transactional API NameThe transactional messaging service name configured on your instance.mcSubscriptions
Transactional Event IDThe ID of the published event to trigger.EVTcartAbandonment
API Key (Client ID)OAuth Server-to-Server Client ID; also sent as X-Api-Key.1a2b3c4d...
Client SecretOAuth Server-to-Server Client Secret.p8q9...

Configure in Signal

Add the integration

In the Signal management UI, go to Integrations, choose Adobe Campaign, and attach it to the pipeline you want to deliver events from.

Enter your credentials

Fill in the Organization ID, Transactional API Name, Transactional Event ID, API Key (Client ID), and Client Secret from the steps above.

Map your events

The default blueprint maps page, Signed Up, and Order Completed to a transactional trigger keyed on the profile email, with personalisation data delivered under ctx. Adjust the mappings so the ctx field names match the variables your Campaign message template expects.

Save and test

Save the integration. Use the Event Debugger to send a test event and confirm Adobe Campaign accepts it.

API Endpoint

Signal delivers each event as a POST to the Campaign Standard transactional event endpoint:

POST https://mc.adobe.io/{organization}/campaign/{transactional_api}/{event_id}

All three path segments come from your integration configuration. Authentication uses an Adobe IMS bearer token (minted automatically by Signal from your OAuth Server-to-Server credential) plus the X-Api-Key header:

Authorization: Bearer <access_token>
X-Api-Key: <client_id>
Content-Type: application/json;charset=utf-8

Signal obtains the bearer token from the Adobe IMS token endpoint (https://ims-na1.adobelogin.com/ims/token/v3) using the client_credentials grant and caches it until it expires (tokens are valid for roughly 24 hours).

Identity Signals

Adobe Campaign transactional messages target a known profile, identified by email at the payload root. The email address is taken from the visitor’s identity traits ($traits.email).

Unlike advertising connectors, Adobe Campaign does not accept hashed identifiers — the transactional API needs the real email so Campaign can resolve the profile and deliver the message. Email is therefore sent in plain text inside the encrypted server-to-server request. Events without an email cannot be delivered and are dropped.

Event Mapping

The default blueprint sends the profile email at the root and all personalisation fields under ctx. Your Campaign message template references these as context.<field>.

Example: Order Completed

A Datafly.js call like this:

datafly.track('Order Completed', {
  order_id: 'ORD-1042',
  revenue: 125.00,
  currency: 'GBP',
  coupon: 'WELCOME10'
});

with the visitor’s email identified as jack@example.com, produces this request body to Adobe Campaign:

{
  "email": "jack@example.com",
  "ctx": {
    "firstName": "Jack",
    "userId": "user-77",
    "orderId": "ORD-1042",
    "orderAmount": 125.00,
    "currency": "GBP",
    "coupon": "WELCOME10",
    "marketingConsent": "true",
    "eventTimestamp": "2026-06-06T10:15:30Z"
  }
}

Adobe Campaign responds with a primary key and status:

{
  "PKey": "@xyz...",
  "status": "pending",
  "href": "mc.adobe.io/.../EVTcartAbandonment/@xyz..."
}

Default event map

Signal eventDelivered asKey ctx fields
pagetransactional triggerpageUrl, pageTitle, pageReferrer
Signed Uptransactional triggersignupMethod, plan
Order Completedtransactional triggerorderId, orderAmount, currency, coupon

All events also carry the global fields: email (root), firstName, lastName, userId, anonymousId, eventTimestamp, and marketingConsent. Events not in the map are dropped.

Marketing consent is forwarded as ctx.marketingConsent (true / false), derived from Signal’s canonical marketing consent category. Your Campaign workflow or message template can use this value to gate optional content. Because these are transactional messages tied to a specific profile action, they are typically sent regardless of marketing consent — confirm your own legal basis before relying on the consent flag to suppress sends.

Testing

  1. In the Signal management UI, open the Event Debugger for the pipeline with Adobe Campaign attached.
  2. Send a test Order Completed event with a known email address.
  3. Confirm the delivery shows a 200/201 response with "status": "pending" and a PKey.
  4. In Adobe Campaign, open the transactional event and check the delivery logs for the message.

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedBad or expired credentials, or missing X-Api-Key.Re-check the Client ID and Client Secret from the OAuth Server-to-Server credential. Confirm the credential has the Adobe Campaign API enabled.
403 ForbiddenThe credential lacks the required scope.In the Developer Console, confirm the OAuth credential’s scopes include access to the Adobe Campaign API.
404 Not FoundWrong organization, transactional_api, or event_id in the URL, or the event is not published.Copy the exact URL from the API preview on your event configuration screen, and confirm the event is published.
400 Bad RequestMalformed body or an unknown personalisation field.Ensure every ctx field name matches a variable referenced in the Campaign message template.
Message accepted but not deliveredProfile not found, or targeting/delivery failure.Check the event status (ignored, targetingFailed, deliveryFailed) and the Campaign delivery logs. Confirm the email maps to a resolvable profile.