Attentive

📘

This integration is currently in beta. Contact your MetaRouter support team to get started.

What Is Attentive?

Attentive is a mobile-first messaging and customer engagement platform that helps brands grow revenue through personalized SMS and email experiences. It enables event-driven marketing, audience segmentation, and automated Journeys based on customer behavior and commerce activity.


Product Type: Advertising

Integration Type: Starter Kit

Event Source Type: Web

Event Scope: Full-Funnel Events


Capabilities

  • Sends events to Attentive for marketing automation, audience segmentation, optimization, and reporting use cases.
  • Supports eCommerce events (product view, add to cart, purchase) using Attentive’s eCommerce APIs.
  • Supports custom events for additional behavioral tracking using Attentive’s Custom Events API.
  • Supports identity resolution to link user identifiers for downstream event matching using Attentive’s Identity API.
  • Supports passing custom identifiers (for example, a username) when available.

Considerations

  • A user must first provide at least one primary identifier (email or phone).
  • If you send custom identifiers, they must be fully populated with non-empty values; empty fields are not accepted.
  • Use ISO 8601 timestamps for when the action occurred. Events older than ~12 hours may be accepted but not trigger Journeys or appear in the dashboard.
  • For custom events, type is case-sensitive and must avoid certain special characters; use simple, predictable event names.
  • For custom events, properties keys are case-sensitive and must follow Attentive’s character restrictions for object keys.
  • Custom event nested objects and lists are supported in emails only; nested and list objects are not supported for SMS rendering.
  • URLs included in custom events may be auto-shortened when they are 1,024 characters or fewer using your brand’s link shortener.
  • Custom events must be triggered by the same app/source context that created them in Attentive.
  • Custom events support a maximum of 200 object keys per event; larger payloads may be accepted but not fully usable in Journeys or macros.

Limitations

  • Identity resolution can unintentionally link separate people if duplicate identifiers are sent; use stable, unique identifiers and avoid reuse.
  • The Identity API capability is in beta and may change behavior over time.
  • Avoid sending nulls or empty strings for identifiers; if an identifier is not available, omit it rather than sending an empty value.
  • Some invalid or out-of-policy events (for example, timestamp-related issues) may receive a success response but still be discarded by Attentive.

Starter Kit Setup Guide

1. Gather Credentials

2. Add a Attentive Integration

  • From the integration library, add a Attentive integration. Then, fill out the Connection Parameters:
Connection ParameterDescription
API_TOKENAttentive API token used to authorize requests.

3. Configure Event Mapping

  • MetaRouter provides all of the event mappings that Attentive integrations typically require. You may add custom events, parameters, or mappings in accordance with Attentive’s API documentation.

4. Deploy to Pipeline

  • In the Pipelines tab, add your Attentive integration.
  • Select the correct integration revision
  • Click Add Integration to finalize deployment.

Event Mappings

Global

Global mappings will be applied to all events. If your parameter names do not match the Expected Inputs provided, you will need to overwrite the Inputs provided with your own.

Global Filters: This integration applies global filters to ensure events are only sent to Attentive when a user can be identified. Events are allowed only if at least one of the following is present: traits.email, traits.phone, or userId. This aligns with Attentive’s requirement that events be associated with a known or linkable user and helps prevent events from being accepted but discarded downstream.

Event Specific

Identify

Output KeyDescriptionExpected Input
phone *RequiredString: User phone number (E.164 recommended when available).traits.phone
email *RequiredString: User email address.traits.email
clientUserIdString: Your internal user ID used as an external identifier. This should be your own system-assigned, stable unique identifier for a user (for example, an internal user ID). Do not use email addresses or phone numbers as the clientUserId, since those should be sent in their dedicated fields.userId
**customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

*Either phone or email is required to identify a user.

**If you send custom identifiers, they must be fully populated with non-empty values; empty fields are not accepted.

Product Viewed

Output KeyDescriptionExpected Input
user.email Required (one of)String: User email address.traits.email
user.phone Required (one of)String: User phone number.traits.phone
items RequiredArray: Single-item product payload mapped from product properties.Expression – map properties to Attentive item fields
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Product Added

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
items RequiredArray: Single-item cart-add payload mapped from product properties.Expression – map properties to Attentive item fields
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Order Completed

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
items RequiredArray: Line items mapped from the products array.Expression – map properties.products[] into Attentive item fields
orderId RequiredString: Order identifier.properties.order_id
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Page

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event type value passed through from the source event.type
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
properties.pathString: Page path.properties.path
properties.referrerString: Referrer value.properties.referrer
properties.searchString: Search/query string.properties.search
properties.titleString: Page title.properties.title
properties.urlString: Page URL.properties.url
externalEventIdString: External event ID for reference or deduplication.messageId
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Checkout Started

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAtRequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
properties.affiliationString: Store or affiliation value.properties.affiliation
properties.couponString: Coupon code applied.properties.coupon
properties.currencyString: Currency code (uppercased).properties.currency
properties.productsArray: Products in the checkout.properties.products
properties.discountNumber: Discount amount.properties.discount
properties.order_idString: Order identifier (if available at checkout).properties.order_id
properties.revenueNumber: Revenue amount.properties.revenue
properties.shippingNumber: Shipping amount.properties.shipping
properties.taxNumber: Tax amount.properties.tax
properties.valueNumber: Total value amount.properties.value
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Product List Viewed

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Product list view properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Cart Viewed

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
properties.cart_idString: Cart identifier.properties.cart_id
properties.currencyString: Currency code (uppercased).properties.currency
properties.productsArray: Products currently in the cart.properties.products
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Order Updated

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
properties.affiliationString: Store or affiliation value.properties.affiliation
properties.couponString: Coupon code applied.properties.coupon
properties.currencyString: Currency code (uppercased).properties.currency
properties.discountNumber: Discount amount.properties.discount
properties.order_idString: Order identifier.properties.order_id
properties.productsArray: Products included in the update.properties.products
properties.revenueNumber: Revenue amount.properties.revenue
properties.shippingNumber: Shipping amount.properties.shipping
properties.taxNumber: Tax amount.properties.tax
properties.totalNumber: Total amount.properties.total
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Order Refunded

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
properties.affiliationString: Store or affiliation value.properties.affiliation
properties.checkout_idString: Checkout identifier (if available).properties.checkout_id
properties.couponString: Coupon code applied.properties.coupon
properties.currencyString: Currency code (uppercased).properties.currency
properties.discountNumber: Discount amount.properties.discount
properties.order_idString: Order identifier.properties.order_id
externalEventIdString: External event ID for reference or deduplication.messageId
properties.productsArray: Products included in the refund.properties.products
properties.revenueNumber: Revenue amount.properties.revenue
properties.shippingNumber: Shipping amount.properties.shipping
properties.taxNumber: Tax amount.properties.tax
properties.totalNumber: Total amount.properties.total
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Products Searched

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Search event properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Product Clicked

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Product click properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Product Removed

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Product removal properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Payment Info Entered

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Payment step properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Promotion Clicked

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Promotion click properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Promotion Viewed

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Promotion view properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Coupon Entered

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Coupon entry properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Product Added To Wishlist

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
type RequiredString: Event name passed through as the type.event
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
propertiesObject: Wishlist add properties passed through.properties
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Order Canceled

Output KeyDescriptionExpected Input
user.phone Required (one of)String: User phone number.traits.phone
user.email Required (one of)String: User email address.traits.email
type RequiredString: Event name passed through as the type.event
occurredAt RequiredString: ISO 8601 timestamp for when the event occurred.Expression – normalize timestamp / originalTimestamp / sentAt
user.externalIdentifiers.clientUserIdString: Your internal user ID for external identifier matching.userId
externalEventIdString: External event ID for reference or deduplication.messageId
properties.affiliationString: Store or affiliation value.properties.affiliation
properties.order_idString: Order identifier.properties.order_id
properties.totalNumber: Total amount.properties.total
properties.revenueNumber: Revenue amount.properties.revenue
properties.shippingNumber: Shipping amount.properties.shipping
properties.taxNumber: Tax amount.properties.tax
properties.discountNumber: Discount amount.properties.discount
properties.couponString: Coupon code applied.properties.coupon
properties.currencyString: Currency code (uppercased).properties.currency
properties.productsArray: Products included in the canceled order.properties.products
user.externalIdentifiers.customIdentifiersArray: Custom identifiers (for example, username) when present.Expression – conditionally map traits.username into name/value pairs

Required & Recommended Identifiers

These identifiers must be mapped to Attentive in order for successful user matching to occur. Without these IDs, any events sent to Attentive may not be accurately reflected in reporting.

AttributeExampleSync Injector Required?
email Required (one of)[email protected]No
phone Required (one of)+14155552671No
clientUserIduser_12345No
customIdentifiers.usernamejane_doe_92No

Integration Validation

  • Confirm events in Attentive - In the Attentive dashboard, open the custom app created for this integration, then navigate to the Performance tab and review endpoint activity to confirm that event requests are being received

  • Work with your Attentive rep - Ask your Attentive representative to validate event ingestion and identity matching on the backend.

  • Test Journey triggers - Ensure Journeys configured on these events are triggering as expected. If events appear but do not trigger, check timestamps and identifiers.

  • Validate audiences - Create an audience based on incoming events and confirm users are populating.

  • Validate conversions in analytics - In the Attentive dashboard, navigate to Analytics and confirm that conversions, revenue, or other downstream metrics tied to your events are populating as expected.

  • Work with your Attentive team - Ask your Attentive representative to validate event ingestion and identity matching on the backend.


Additional Attentive Documentation