IntegrationsMarketing AutomationSalesforce Marketing Cloud

Salesforce Marketing Cloud

Fires Journey Builder API entry events in Marketing Cloud Engagement from Signal events, keyed by ContactKey.

Why route Salesforce Marketing Cloud through Datafly Signal

  • Profiles are updated from the server, not the browser. Events reach Salesforce Marketing Cloud even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
  • Token lifecycle is handled for you. Signal obtains and refreshes the OAuth credentials Salesforce Marketing Cloud requires, so nothing expires quietly in the middle of a campaign.
  • One consent decision governs every destination. Salesforce Marketing Cloud is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

Find your tenant subdomain

Setup > Apps > Installed Packages: the REST Base URI is https://{subdomain}.rest.marketingcloudapis.com.

Create a server-to-server API integration

In the installed package, add an API Integration component of type Server-to-Server with the Journeys read and write scope. Copy the Client ID and Client Secret.

Create the API entry event

In Journey Builder, create an API Event entry source whose data extension has the fields the presets send (email, first_name, last_name, phone, user_id, event_name, event_time and the event fields listed below). Copy its Event Definition Key.

Configuration

FieldTypeRequiredDescription
tenant_subdomainstringYesYour Marketing Cloud tenant-specific subdomain, the part before .rest.marketingcloudapis.com in the REST base URI of your installed package.
client_idstringYesClient ID of a server-to-server API integration (Setup > Apps > Installed Packages) with the Journeys read and write scope.
client_secretsecretYesClient secret of the same installed package. Used with the client ID to request an access token from the tenant’s auth host.
event_definition_keystringYesThe Event Definition Key of the API Event entry source (Journey Builder > Entry Sources, or Event Administration). Every event is sent to this entry event; override it per event in the blueprint to feed different journeys.

Signal Setup

  1. Navigate to Integrations in the sidebar and open the Integration Library tab.
  2. Find Salesforce Marketing Cloud, click Install and fill in the fields above.
  3. Pick the preset for your vertical, then review the mappings in the blueprint editor.
curl -X POST http://localhost:8084/v1/admin/integration-catalog/salesforce_marketing_cloud/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Salesforce Marketing Cloud",
    "config": {
      "tenant_subdomain": "mc563885gvwrzjw02k96zk2zp4",
      "client_id": "YOUR_CLIENT_ID",
      "client_secret": "YOUR_CLIENT_SECRET",
      "event_definition_key": "APIEvent-00000000-0000-0000-0000-000000000000"
    },
    "delivery_mode": "server_side"
  }'

API endpoint

POST https://{tenant_subdomain}.rest.marketingcloudapis.com/interaction/v1/events
Token: POST https://{tenant_subdomain}.auth.marketingcloudapis.com/v2/token (client_credentials)

Example body:

{"ContactKey": "jane.doe@example.com", "EventDefinitionKey": "APIEvent-3d1b...",
 "Data": {"email": "jane.doe@example.com", "first_name": "Jane", "event_name": "checkout_started", "cart_value": 120, "currency": "GBP", "item_ids": "SKU_1"}}

The presets turn on the strict output contract: only the fields the blueprint maps are sent.

Event mapping

Retail preset (ecommerce)

Trigger Marketing Cloud journeys from sign-ups, leads, identify, add-to-cart, checkout (abandoned cart) and orders. ContactKey is the contact’s email (trimmed, lowercased) and the email, name and phone travel in plain text in Data, because the journey sends to them. EventDefinitionKey comes from the Event Definition Key setting (the API entry event in Journey Builder); Data.event_name carries the event so one entry event can branch. Every Data field must exist on the entry event’s data extension.

Signal eventSent to the vendor as
generate_leadlead_submitted
sign_upsigned_up
identifyidentified
add_to_cartproduct_added
begin_checkoutcheckout_started
purchaseorder_completed

Default preset (default)

Trigger Marketing Cloud journeys from sign-ups, leads, identify and orders. ContactKey is the contact’s email (trimmed, lowercased) and the email, name and phone travel in plain text in Data, because the journey sends to them. EventDefinitionKey comes from the Event Definition Key setting (the API entry event in Journey Builder); Data.event_name carries the event so one entry event can branch. Every Data field must exist on the entry event’s data extension.

Signal eventSent to the vendor as
generate_leadlead_submitted
sign_upsigned_up
identifyidentified
purchaseorder_completed

Identity and personal data

ContactKey is the contact’s email (trimmed, lowercased). Email, name and phone are sent in plain text in Data (the phone shaped to E.164), because the journey sends to them. If you key contacts on a CRM ID, change the ContactKey mapping to user_id. Every event goes to the entry event named in Event Definition Key; Data.event_name carries the Signal event so a Decision Split can branch, or override EventDefinitionKey per event in the blueprint to feed different journeys.

Known limitations

  • Every Data field must exist on the entry event’s data extension. The integration sends only mapped fields.
  • The token request uses the business unit that owns the installed package; a separate business unit (account_id) is not supported yet.

Troubleshooting

SymptomCause and fix
400 event definition not foundEvent Definition Key does not match an API entry event.
400 contact not activeThe contact exists but is not active in Marketing Cloud.
401Client ID or secret wrong, or the package lacks the Journeys scope.