Adobe Journey Optimizer
Datafly Signal delivers your first-party events to Adobe Journey Optimizer (AJO) by streaming XDM ExperienceEvents to the Adobe Experience Platform Edge Network Server API. Events flow through an Experience Platform datastream to Real-Time Customer Profile and any AJO journey listening for them, so you can trigger orchestrations and enrich profiles from the server without a client-side Web SDK collecting the same data twice.
Why route Adobe Journey Optimizer through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Adobe Journey Optimizer even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- The email Journey Optimizer sends to is the visitor’s own address. Signal trims and lower-cases it and sends it in the standard
Emailidentity namespace: a messaging platform cannot email a hash. - Delivery is batched, rate-limited, and retried. Signal buffers to Kafka, respects the Adobe Journey Optimizer rate limit, and retries on 429 or transient failure rather than dropping the event.
- One consent decision governs every destination. Adobe Journey Optimizer is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
- An Adobe Experience Platform / Journey Optimizer organization with a configured sandbox.
- A datastream (Data Collection > Datastreams) whose target schema is an XDM ExperienceEvent class that includes the Web Details and Commerce Details field groups. Note its Datastream ID.
- An Adobe Developer Console project with an OAuth Server-to-Server credential, granting access to the Experience Platform Data Collection APIs. Note the Client ID and Client Secret and your IMS Organization ID (ends in
@AdobeOrg). - The identity namespaces you intend to match on (for example
EmailandECID) must exist in your sandbox.
Configuration
Signal authenticates to the Edge Network with an Adobe IMS access token that you paste in. The token expires after about 24 hours and Signal does not refresh it yet (#1498), so the integration stops authenticating until a new token is pasted.
| Field | Description |
|---|---|
| Datastream ID | The ID of the datastream that routes events to your sandbox, schema, and Journey Optimizer. |
| IMS Access Token | A current Adobe IMS bearer token from your OAuth Server-to-Server credential. Sent as Authorization: Bearer. |
| IMS Organization ID | Your Experience Cloud org ID (...@AdobeOrg). Sent as x-gw-ims-org-id. |
| API Key (Client ID) | The Client ID of your OAuth Server-to-Server credential. Sent as x-api-key. |
Configure in Signal
- In the Signal management UI, open Integrations and add Adobe Journey Optimizer.
- Paste your Datastream ID, IMS Access Token, IMS Organization ID, and API Key.
- Select the Default preset and attach it to a pipeline.
- Save. Signal begins delivering matching events as XDM ExperienceEvents.
API Endpoint
Signal sends events to the authenticated Edge Network collect endpoint:
POST https://server.adobedc.net/ee/v2/collect?datastreamId={DATASTREAM_ID}Headers:
Authorization: Bearer {IMS_ACCESS_TOKEN}
x-gw-ims-org-id: {IMS_ORG_ID}
x-api-key: {API_KEY}
Content-Type: application/jsonA successful request returns 202 Accepted (the event is queued for processing). Malformed payloads, an expired token, insufficient scope, or an unknown datastream return a 4xx and are not retried.
Identity Signals
| Namespace | Source | Notes |
|---|---|---|
Email | the email trait, else the event’s email property | The trimmed, lower-cased email in plain text (Journey Optimizer sends email to the profile; see Personal data by integration); primary when present. |
ECID | the collected Experience Cloud ID | Primary when there is no email. |
An event with neither is not sent: the Edge Network needs an identity. Consent is not an ExperienceEvent field; Signal gates delivery on consent.
The access token is a pasted IMS token that expires after about 24 hours. Minting it from OAuth client credentials is #1498.
Event Mapping
Every event is an XDM ExperienceEvent posted to https://server.adobedc.net/ee/v2/collect?datastreamId={datastream_id} in events[].xdm, with _id (the Signal event ID, for de-duplication), timestamp, the browser user agent and an identityMap.
| Signal event | XDM eventType | Preset |
|---|---|---|
page | web.webpagedetails.pageViews (URL, name, referrer) | Default, Retail |
view_item_list, view_cart | commerce.productListViews | Retail |
view_item | commerce.productViews | Default, Retail |
add_to_cart / remove_from_cart | commerce.productListAdds / commerce.productListRemovals | Default, Retail / Retail |
add_to_wishlist | commerce.saveForLaters | Retail |
begin_checkout | commerce.checkouts | Default, Retail |
purchase | commerce.purchases with commerce.order (purchaseID, priceTotal, currencyCode) | Default, Retail |
generate_lead | leadOperation.newLead | Default |
Commerce events carry productListItems built from the Signal items: SKU, name, quantity, priceTotal (price times quantity) and the upper-case currencyCode.
Consent
When you map a canonical marketing-consent signal, Signal writes it to xdm.consents.marketing.preferred.val (y for granted, n otherwise). Because the standard Consents and Preferences field group is only valid on Profile schemas, your datastream’s ExperienceEvent schema must include a custom consent field group for this value to be accepted. If your schema does not carry consent, remove the consent mapping from the blueprint.
Testing
- Trigger an event on a page running your Signal pipeline (or use the Event Debugger in the management UI).
- Confirm Signal received a
202 Acceptedfrom the Edge Network. - In Experience Platform, use the datastream’s monitoring or Profile lookup to confirm the event landed and merged onto the expected profile.
- In Journey Optimizer, verify any journey using this event as its entry condition advanced as expected.
Troubleshooting
- 401 Unauthorized — the IMS access token is expired or invalid. Confirm token rotation is running and the token belongs to the credential whose Client ID you entered as the API Key.
- 403 Forbidden — the credential lacks the datastream’s collection scope, or the IMS Organization ID does not match the credential’s org.
- 404 Not Found — the Datastream ID is wrong or the datastream was deleted.
- 400 Bad Request — the XDM is malformed or references fields/eventTypes not present in your schema. XDM field names are case-sensitive (for example
web.webpagedetails.pageViewsfor the eventType butweb.webPageDetailsfor the object). Confirm your schema includes the Web Details and Commerce Details field groups. - Event accepted but no profile / journey — confirm the
identityMapnamespace you send (for exampleEmail) matches the identity your AJO journey and schema key on, and that the datastream forwards to Profile and AJO.