Set of methods to notify external tracking & engagement SDKs about user session events (login/logout).

The single mandatory field is customerId. The known user attributes are passed as top-level fields; any other data goes inside extras as free-form key/value pairs.

Every known field below is accepted and forwarded to all configured SDKs — send everything you have. The marker only tells you how the field lands in that SDK:

  • 🟢 P — maps to a native/default identification field.
  • 🟡 S — still sent and stored, just as a generic custom attribute.
  • 🔴 -not sent to that SDK at all.

Keys you place in extras are also accepted as custom by Insider, Netcore, Dito, Inngage and Salesforce. Only customerId is required.

Send each value once. If a known field is sent both at the top level and again under extras with the same key, the extras value wins for custom data and the top-level one is dropped (the top-level value still feeds the native field on SDKs that have one). Duplicating a key like this is a misuse — prefer the top-level field for known attributes and reserve extras for keys outside this list.

TikTok is used only for advanced matching: it receives customerId, email, phone; the other known fields and extras are not sent to it.

Insider and Netcore additionally receive the user's age, but it is not a payload field — it is derived internally from birthday against the current date. Send birthday and the age is computed for you.

Salesforce Marketing Cloud has a single native identity field: customerId becomes the SFMC contact key (profileId). Every other known field — and the keys in extras — is stored as a generic profile attribute under the field names in the table below. SFMC profile attributes are string-only, so extras values are forwarded when they are strings or numbers (numbers are stringified); boolean and nested values are dropped for Salesforce.

field Insider Netcore Dito Inngage TikTok Salesforce
email 🟢 P 🟢 P 🟢 P 🟢 P 🟢 P 🟡 S
phone 🟢 P 🟢 P 🟡 S 🟢 P 🟢 P 🟡 S
name 🟢 P 🟢 P 🟢 P 🟡 S 🔴 - 🟡 S
first_name 🟢 P 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
last_name 🟢 P 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
birthday 🟢 P 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
gender 🟢 P 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
city 🟡 S 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
state 🟡 S 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
country 🟡 S 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
zipcode 🟡 S 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
street 🟡 S 🟢 P 🟡 S 🟡 S 🔴 - 🟡 S
extras 🟡 S 🟡 S 🟡 S 🟡 S 🔴 - 🟡 S

Methods

  • Notifies all configured tracking / engagement SDKs about a user login.

    Parameters

    Returns Promise<undefined>

    • This method uses a fire-and-forget approach. Notifications are sent asynchronously without waiting for confirmation from external services, and failures are handled silently without throwing errors.
    • This method should be called immediately after a successful user authentication.
    • Providing email and phone (when available) improves tracking accuracy and user matching.
    const modules = await Eitri.modules();
    const notifyLogin = modules?.session?.notifyLogin;
    if (!notifyLogin) return;
    await notifyLogin({
    customerId: 'cust-12345',
    email: '[email protected]',
    phone: '11987654321'
    });
  • Notifies all configured tracking / engagement SDKs that the user has logged out, clearing the user's identity from each one.

    Returns Promise<undefined>

    Promise that resolves to undefined once the notification has been dispatched.

    • This method uses a fire-and-forget approach. Notifications are sent asynchronously without waiting for confirmation from external services, and failures are handled silently without throwing errors.
    • This method should be called when a user explicitly logs out of the application.
    • Calling this method helps external services track user session duration accurately.
    • No parameters are required as the logout is associated with the current active session.
    const modules = await Eitri.modules();
    const notifyLogout = modules?.session?.notifyLogout;
    if (!notifyLogout) return;
    await notifyLogout();