Oracle Responsys

Datafly Signal delivers events to Oracle Responsys Marketing Cloud server-to-server using the Trigger Custom Event REST API (v1.3). Each Signal event triggers a named Responsys custom event for the matched profile-list member, which then runs your Responsys Program logic (for example, entering the contact into a welcome or abandoned-cart journey).

Why route Oracle Responsys through Datafly Signal

  • Profiles are updated from the server, not the browser. Events reach Oracle Responsys even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
  • One consent decision governs every destination. Oracle Responsys is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

Before configuring Oracle Responsys in Signal you need:

  • A Responsys account with REST API access enabled.
  • A Custom Event defined in Responsys (Data > Events). For near-real-time messaging, the event must be of type Real-time.
  • A Profile List that already contains the contacts you want to enact, with a match key (email address recommended).
  • Responsys API credentials (username + password) to obtain an auth token.

Step 1: Find your API endpoint

  1. In Responsys, go to Account > Global settings > Account configuration.
  2. Copy the value of the WS End Point field. For Global Routing accounts this looks like https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com.

This is your account-specific REST base URL. It is also returned as endPoint in the authentication response.

Step 2: Create the custom event

  1. Go to Data > Events and create (or note the name of) the custom event you want Signal to trigger.
  2. Attach that event as the entry trigger of the Program / campaign you want enacted.

Step 3: Obtain an auth token

Responsys uses a two-stage authentication flow. Authenticate with your username and password to receive a token (valid for 2 hours):

curl -X POST "https://login.rsys9.net/rest/api/v1.3/auth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "user_name=YOUR_USERNAME&password=YOUR_PASSWORD&auth_type=password"

The response returns the token and your endpoint:

{
  "authToken": "abc123...",
  "issuedAt": 1645123456789,
  "endPoint": "https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com"
}
⚠️

The authToken expires after 2 hours. Automatic refresh is not yet available in this integration, so provide a token from a long-lived service account and rotate it as part of your operational schedule.

Configure in Signal

Configuration Fields

FieldRequiredDescription
api_endpointYesAccount-specific REST base URL (the WS End Point value, e.g. https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com).
auth_tokenYesA current Responsys authToken from the auth/token endpoint.
event_nameYesThe Custom Event name to trigger (defined under Data > Events).
folder_nameYesThe folder containing the target profile list.
list_nameYesThe profile list (objectName) whose members are matched.

Management UI Setup

  1. Go to Integrations > Add Integration > Oracle Responsys.
  2. Choose the Default preset.
  3. Enter your api_endpoint, auth_token, event_name, folder_name, and list_name.
  4. Select the consent category that maps to marketing (typically marketing).
  5. Click Save.

API Endpoint

POST {api_endpoint}/rest/api/v1.3/events/{event_name}
Authorization: {auth_token}
Content-Type: application/json

The auth token is sent as the literal value of the Authorization header — there is no Bearer prefix.

A single trigger request is limited to 200 recipients. Signal sends one recipient per event, so this limit is not reached under normal operation.

Identity Signals

Triggers an Oracle Responsys custom event via the v1.3 REST Trigger Custom Event endpoint for a profile-list member matched by email address (plain text, trimmed and lowercased: the documented match keys are recipientId, emailAddress, customerId and mobileNumber) or customerId, with event context as optionalData name/value pairs. Not deliverable yet: the Responsys authToken expires after two hours and the delivery driver cannot log in to refresh it (#1482).

FieldSourceNotes
recipient.emailAddresstraits.emailPlain text, trimmed and lowercased. Responsys matches on the first of recipientId, emailAddress, customerId and mobileNumber.
recipient.customerIduser_idUsed when there is no email.
recipient.listNameProfile List Folder and Name settingsThe profile list to match against.

Event Mapping

⚠️

Not deliverable in production yet: a Responsys authToken expires after two hours and Signal cannot log in to refresh it (#1482). The request below is what Signal sends with a valid token.

Blueprint 0.5.0, reviewed against the vendor’s documentation on 2026-09-23. Each preset maps the events below; every other event is dropped. Events use the canonical names from the event specs (transaction_id, value, items[], search_term); the legacy order_id, revenue and flat product fields are still read as a fallback.

Default (default)

Triggers the Responsys custom event named in the integration settings for a profile-list member, matched by email address (trimmed, lowercased; Responsys matches on the first of recipientId, emailAddress, customerId and mobileNumber it is given, and does not document a hashed match key for this call) else customerId (the Signal user_id); events with neither are not sent. Event context travels as optionalData name/value pairs (PAGE_URL, PRODUCT_ID, ORDER_ID, ORDER_TOTAL, CURRENCY …) for use in the Program.

Datafly eventVendor event / callFields
pagetrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PAGE_URL, PAGE_TITLE
view_itemtrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PRODUCT_ID, PRODUCT_NAME, PRICE
add_to_carttrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PRODUCT_ID, PRODUCT_NAME, QUANTITY
purchasetrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, ORDER_ID, ORDER_TOTAL, CURRENCY
sign_uptrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, SIGNUP_METHOD

Retail / E-commerce (ecommerce)

Triggers the Responsys custom event named in the integration settings for a profile-list member, matched by email address (trimmed, lowercased; Responsys matches on the first of recipientId, emailAddress, customerId and mobileNumber it is given, and does not document a hashed match key for this call) else customerId (the Signal user_id); events with neither are not sent. Event context travels as optionalData name/value pairs (PAGE_URL, PRODUCT_ID, ORDER_ID, ORDER_TOTAL, CURRENCY …) for use in the Program. The retail preset adds wishlist, checkout started and refund triggers alongside the default events.

Datafly eventVendor event / callFields
pagetrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PAGE_URL, PAGE_TITLE
view_itemtrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PRODUCT_ID, PRODUCT_NAME, PRICE
add_to_carttrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PRODUCT_ID, PRODUCT_NAME, QUANTITY
purchasetrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, ORDER_ID, ORDER_TOTAL, CURRENCY
sign_uptrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, SIGNUP_METHOD
add_to_wishlisttrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, PRODUCT_ID, PRODUCT_NAME
begin_checkouttrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, CART_TOTAL, CURRENCY
refundtrigger_custom_eventMARKETING_CONSENT, ANONYMOUS_ID, ORDER_ID, REFUND_TOTAL, CURRENCY

An identified purchase (preset default) is delivered as:

POST https://abc123.rsys9.net/rest/api/v1.3/events/SIGNAL_EVENT
{
  "customEvent": {
    "eventDateDataMapping": null,
    "eventNumberDataMapping": null,
    "eventStringDataMapping": null
  },
  "recipientData": [
    {
      "optionalData": [
        {
          "name": "ANONYMOUS_ID",
          "value": "df_anon_m3"
        },
        {
          "name": "CURRENCY",
          "value": "GBP"
        },
        {
          "name": "MARKETING_CONSENT",
          "value": "I"
        },
        {
          "name": "ORDER_ID",
          "value": "T-1001"
        },
        {
          "name": "ORDER_TOTAL",
          "value": "439.99"
        }
      ],
      "recipient": {
        "customerId": "crm-user-7",
        "emailAddress": "jane.doe@example.com",
        "emailFormat": "HTML_FORMAT",
        "listName": {
          "folderName": "Signal",
          "objectName": "CONTACTS_LIST"
        }
      }
    }
  ]
}

Signal maps the canonical marketing consent state to a Responsys opt flag in optionalData:

ConsentValue sent
GrantedI (opt-in)
Denied / unknownO (opt-out)

Map this field to your profile list’s opt-in/opt-out column so Responsys respects the contact’s marketing preference.

Testing Your Integration

Trigger a test event

Use a known contact that already exists in your profile list, then trigger an event from your site:

datafly.identify("test-user", { email: "test@example.com" });
datafly.track("Order Completed", { order_id: "TEST-1", revenue: 1, currency: "USD" });

Confirm enactment in Responsys

In Responsys, open the Program attached to your custom event and check the enactment / program activity to confirm the recipient entered.

Inspect the payload

Use Signal’s Event Debugger to confirm the recipient match key and optionalData are populated as expected before the request is sent.

Troubleshooting

ProblemSolution
401 UnauthorizedThe authToken has expired (2-hour lifetime) or is invalid. Generate a fresh token from /rest/api/v1.3/auth/token and update the integration config.
404 Not FoundCheck api_endpoint matches your account’s WS End Point and that event_name is an existing custom event.
Recipient not enactedThe email address does not match any member of the configured profile list. Confirm the contact exists and the folder/list names are correct.
400 Bad RequestUsually a missing match key or malformed optionalData. Review the payload in the Event Debugger.
Values not storedEnsure each optionalData name matches a column in your profile list or supplemental table.