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
- In Adobe Campaign, go to Marketing activities and create a transactional message event (Message Center).
- 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 %>. - Publish the event. Unpublished events return
404from the API. - Open the event and note the event ID (for example
EVTcartAbandonment) and the transactional API name shown in the API preview (for examplemcSubscriptions).
Step 2: Create an OAuth Server-to-Server credential
- Go to the Adobe Developer Console and create (or open) a project.
- Add the Adobe Campaign API to the project.
- When prompted for the credential type, choose OAuth Server-to-Server.
- 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:
| Field | Description | Example |
|---|---|---|
| Organization ID | Your Adobe IMS Org ID (the ORGANIZATION path segment). | ABC123DEF456@AdobeOrg |
| Transactional API Name | The transactional messaging service name configured on your instance. | mcSubscriptions |
| Transactional Event ID | The 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 Secret | OAuth 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-8Signal 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 event | Delivered as | Key ctx fields |
|---|---|---|
page | transactional trigger | pageUrl, pageTitle, pageReferrer |
Signed Up | transactional trigger | signupMethod, plan |
Order Completed | transactional trigger | orderId, 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.
Consent
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
- In the Signal management UI, open the Event Debugger for the pipeline with Adobe Campaign attached.
- Send a test
Order Completedevent with a known email address. - Confirm the delivery shows a
200/201response with"status": "pending"and aPKey. - In Adobe Campaign, open the transactional event and check the delivery logs for the message.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Bad 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 Forbidden | The credential lacks the required scope. | In the Developer Console, confirm the OAuth credential’s scopes include access to the Adobe Campaign API. |
404 Not Found | Wrong 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 Request | Malformed body or an unknown personalisation field. | Ensure every ctx field name matches a variable referenced in the Campaign message template. |
| Message accepted but not delivered | Profile 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. |