Attentive
Sync subscriber data, custom attributes, and custom events to Attentive for personalized SMS marketing campaigns. Zeotap keeps your Attentive subscriber profiles enriched with the latest warehouse data for better segmentation and targeting.
Prerequisites
- An Attentive account with API access enabled
- An Attentive API key with the required scopes (
attributes:write,subscriptions:write,events:write) - Phone numbers in E.164 format (e.g.,
+15551234567) for subscriber operations
Authentication
Attentive uses API Key authentication with a Bearer token.
- Log in to your Attentive dashboard
- Navigate to Settings > API keys
- Click Create API Key (or use an existing key)
- Ensure the key has the required scopes for your sync type:
attributes:writefor Custom Attributes syncssubscriptions:writefor Subscriber syncsevents:writefor Custom Events syncs
- Copy the API key
- In Zeotap, paste the key into the API Key field when creating the destination
Configuration
Attentive does not require any additional configuration fields beyond authentication.
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Object Type | Select | Yes | The type of data to sync. Options: Custom Attributes, Custom Events, Subscribers. Default: Custom Attributes. |
Custom Attributes
Syncs profile attributes to Attentive subscribers. Use this to enrich subscriber profiles with data from your warehouse such as loyalty tier, lifetime value, or preferences. Attentive creates new custom attributes automatically if they do not already exist.
Custom Events
Sends custom event data to Attentive for triggering journeys and building segments. Event type names are case-sensitive. Events older than 12 hours do not trigger journeys.
Subscribers
Manages subscriber opt-in and opt-out status. Use audience sync modes (Add, Remove, Mirror) to control subscription membership.
Supported Operations
Sync Modes
| Mode | Supported | Description |
|---|---|---|
| Upsert | Yes | Create or update custom attributes for subscribers |
| Insert | Yes | Send custom events to Attentive |
| Update | — | |
| Mirror | — |
Audience Sync Modes
| Mode | Supported | Description |
|---|---|---|
| Add | Yes | Subscribe users (opt-in) |
| Remove | Yes | Unsubscribe users (opt-out) |
| Mirror | Yes | Subscribe new members and unsubscribe removed members |
| Upsert | — |
Features
- Field Mapping: Yes
- Schema Introspection: No
Required Mapping Fields
| Field | Object Type | Description |
|---|---|---|
phone | Custom Attributes, Subscribers | Subscriber phone number in E.164 format. Required if email is not provided (for Custom Attributes). Always required for Subscribers. |
type | Custom Events | The custom event type name (case-sensitive) |
Default Destination Fields
| Field | Type | Available For |
|---|---|---|
phone | string | All object types |
email | string | All object types |
first_name | string | Custom Attributes, Subscribers |
last_name | string | Custom Attributes, Subscribers |
client_user_id | string | All object types |
type | string | Custom Events |
timestamp | timestamp | Custom Events |
properties | json | Custom Events |
How It Works
Custom Attributes Flow
- Zeotap reads rows from your model
- Each row is sent individually to Attentive’s
POST /v1/attributes/customendpoint - The subscriber is identified by
phoneoremail - All non-identifier fields are sent as custom attribute key-value pairs
- Attentive creates new attributes or updates existing ones
Custom Events Flow
- Zeotap reads rows from your model
- Each row is sent as a custom event to Attentive’s
POST /v1/events/customendpoint - The event type, user identifier, timestamp, and properties are extracted from the row
- Events can trigger journeys and are available for segmentation in Attentive
Subscriber Management Flow
- For Add syncs: each row sends a subscribe request via
POST /v1/subscriptions - For Remove syncs: each row sends an unsubscribe request via
POST /v1/subscriptions/unsubscribe - For Mirror syncs: new/changed rows are subscribed, removed rows are unsubscribed
Rate Limits
Attentive enforces per-second rate limits on API endpoints:
| Endpoint | Rate Limit |
|---|---|
| Custom Attributes | 150 requests/second |
| Custom Events | 150 requests/second |
| Subscribe | 10 requests/second |
| Unsubscribe | 5 requests/second |
Zeotap automatically retries requests that receive a 429 Too Many Requests response with exponential backoff. Monitor the x-ratelimit-remaining header to track consumption.
Best Practices
- Use E.164 phone format: Attentive requires phone numbers in E.164 format (e.g.,
+15551234567). Use a SQL transform in your model to normalize phone numbers before syncing. - Prefer phone over email for identification: Phone is the primary identifier in Attentive. While email works for custom attributes, subscriber operations always require phone.
- Keep event types consistent: Custom event type names are case-sensitive. Use a consistent naming convention (e.g.,
purchase_completed) across your models. - Mind the 12-hour journey window: Custom events older than 12 hours do not trigger Attentive journeys. Schedule syncs frequently if you rely on event-triggered journeys.
- Avoid sensitive data: Attentive prohibits sending sensitive or special categories of information as defined by CCPA and CPRA. Do not sync fields like SSN, health data, or financial account numbers.
- Custom attribute naming: Attribute keys are case-sensitive.
favorite_colorandFavorite_Colorare treated as different attributes.
Troubleshooting
Authentication failed: invalid API key
Verify your API key is correct and has not been revoked. Generate a new key in Settings > API keys if needed. Ensure the key has the required scopes for your sync type.
Phone number rejected
Attentive requires phone numbers in E.164 format (e.g., +15551234567). Ensure your phone numbers include the country code prefix. Numbers without the + prefix or with formatting characters (dashes, spaces, parentheses) are rejected.
Custom attribute not appearing in Attentive
Custom attributes created via API may take a few minutes to appear in the Attentive UI. If the attribute was previously created in the Attentive UI, you cannot add new values for it via the API — you must define all possible values in the Attentive platform first.
Rate limit exceeded (429 errors)
Zeotap retries 429 responses automatically with exponential backoff. If you see persistent rate limit errors, reduce your sync frequency or batch size. Subscribe and unsubscribe endpoints have lower rate limits (10 req/s and 5 req/s respectively).
Custom event not triggering journey
Events older than 12 hours do not trigger Attentive journeys. Ensure your sync schedule runs frequently enough and that the timestamp field contains recent ISO 8601 timestamps. Also verify the event type name matches exactly (case-sensitive) with the journey trigger configuration.
Subscriber already opted out
If a subscriber has previously opted out, re-subscribing them via the API may not succeed depending on their opt-out status and applicable regulations. Check the subscriber’s status in the Attentive dashboard and ensure you have proper consent documentation.