Skip to Content

Dynamic Yield

Sync user profiles, events, and product catalogs to Dynamic Yield (a Mastercard company) for AI-powered personalization, product recommendations, A/B testing, and experience optimization. Zeotap keeps your Dynamic Yield data in sync with your warehouse, enabling real-time audience targeting and product discovery.

Prerequisites

  • A Dynamic Yield (Mastercard) account with access to Experience OS
  • A server-side API key with the required ACL permissions enabled
  • Your data center region (United States or Europe)
  • Feed ID for user data or product feed syncs (found in Assets > Data Feeds)

Permissions

Your Dynamic Yield API key must have the following ACL permissions enabled depending on the object type you are syncing:

Object TypeRequired Permissions
User DataUser Data Profile
EventsExperience API, User Data Events
Product FeedFeed

To manage permissions, go to Settings > API Keys in Dynamic Yield and edit the key’s ACL settings.

Authentication

Dynamic Yield uses API Key authentication with a dedicated HTTP header.

  1. In Dynamic Yield Experience OS, navigate to Settings > API Keys
  2. Click New Key and enter a descriptive name (e.g. “Zeotap Sync”)
  3. Select Server-side as the source type
  4. Enable the required ACL permissions for your sync type (see Permissions above)
  5. Click Save and copy the generated API key
  6. Paste the API key into the API Key field in Zeotap

The API key is sent as the DY-API-Key HTTP header on every request.

Configuration

FieldTypeRequiredDescription
Data CenterSelectYesThe Dynamic Yield API data center region for your account. Options: United States (dy-api.com) or Europe (dy-api.eu).

Target Settings

FieldTypeRequiredDescription
Object TypeSelectYesThe type of data to sync: User Data, Events, or Product Feed.
Feed IDTextConditionalRequired for User Data and Product Feed syncs. The numeric feed ID found in Assets > Data Feeds in Dynamic Yield.
User ID TypeSelectConditionalRequired for User Data and Events syncs. The type of user identifier: Customer User ID (cuid), Hashed Email (he), Dynamic Yield ID (dyid), or Dynamic Yield Server ID (dyid_server).

Supported Operations

Sync Modes

ModeSupported
UpsertYes
InsertYes
Update
Mirror

Audience Sync Modes

Dynamic Yield does not have a list or segment membership API. Audience segments in Dynamic Yield are computed from user attributes and behavioral data, so membership is managed by the platform rather than via direct API calls. Use regular sync modes to update user profiles with attributes that Dynamic Yield can use for audience segmentation.

Features

  • Field Mapping: Yes
  • Schema Introspection: No

Required Mapping Fields

User Data

FieldDescription
user_idThe user identifier value matching the selected User ID Type (e.g. customer user ID, hashed email, or Dynamic Yield ID).

Events

FieldDescription
user_idThe user identifier value matching the selected User ID Type.
nameThe name of the event to send (e.g. Add to Cart, Purchase, Login).

Product Feed

FieldDescription
skuUnique product identifier (Stock Keeping Unit) used to match products in the feed.

Default Destination Fields

User Data

user_id, email, first_name, last_name, phone, country, city, loyalty_tier

Events

user_id, name, properties

Product Feed

sku, group_id, product_name, url, price, in_stock, image_url, categories

How It Works

  1. Zeotap transforms your warehouse data using the configured field mappings
  2. Rows are dispatched to the appropriate Dynamic Yield API endpoint based on the selected object type
  3. Data is sent with authentication via the DY-API-Key header to your selected data center

User Data

  • User records are sent in bulk via POST /v2/userdata/{feed_id}/bulk
  • The user_id value is emitted under the selected ID type key (e.g. cuid, he)
  • All other mapped fields are attached to the same item as profile attributes
  • Items are batched in chunks of up to 100 per request

Payload Format:

{ "items": [ { "cuid": "user-123", "email": "jane@example.com", "first_name": "Jane", "loyalty_tier": "gold" } ] }

Events

  • Each event is sent individually via POST /v2/collect/user/event
  • The name field becomes the event name
  • All other mapped fields are sent as event properties

Payload Format:

{ "user": { "cuid": "user-123" }, "session": {}, "events": [ { "name": "Add to Cart", "properties": { "productId": "SKU-456", "value": 29.99 } } ] }

Product Feed

  • Products are sent in bulk via POST /v2/feeds/{feed_id}/bulk
  • Each item carries an action of UPSERT
  • The sku field is used as the product identifier for matching
  • Items are batched in chunks of up to 100 per request
  • The API returns a transaction_id — propagation takes up to 90 seconds

Payload Format:

{ "items": [ { "action": "UPSERT", "sku": "SKU-456", "product_name": "Running Shoes", "price": 89.99, "in_stock": true, "categories": "Footwear > Running" } ] }

Rate Limits

  • The Choose endpoint is limited to 22,000 requests per minute per section
  • The Profile Anywhere endpoint is limited to 50 calls per second
  • Product feed and user data endpoints have transaction-based limits — each bulk update returns a transaction_id and takes up to 90 seconds to propagate
  • Batch endpoints support up to 100 items per request

When rate limits are exceeded, Dynamic Yield returns HTTP 429. Zeotap automatically retries with exponential backoff.

Best Practices

  • Use a consistent user ID type across all syncs to avoid duplicate user profiles
  • For product feeds, always include the mandatory fields: sku, group_id, price, url, image_url, in_stock, and categories
  • Use the Customer User ID (cuid) ID type when you have a stable, cross-device user identifier
  • For high-volume product catalog updates, prefer scheduled syncs to stay within rate limits
  • Keep your Feed ID consistent — changing it will create a new feed rather than updating the existing one
  • Use event syncs for real-time behavioral signals (cart actions, purchases) and user data syncs for profile enrichment

Troubleshooting

Authentication failed (401/403)

Verify your API key is correct and has the required ACL permissions enabled. Go to Settings > API Keys in Dynamic Yield to check. Ensure the key was created with Server-side as the source type.

Feed not found (404)

Double-check the Feed ID in your target settings. Find the correct ID by navigating to Assets > Data Feeds in Dynamic Yield Experience OS. The Feed ID is a numeric identifier visible in the feed details.

User profiles not updating

Ensure the User ID Type matches the identifier format you are sending. For example, if you selected Hashed Email (he), the user_id field must contain MD5-hashed email addresses. Mismatched ID types will create new profiles instead of updating existing ones.

Product feed items not appearing

Product feed updates take up to 90 seconds to propagate after a successful API call. If items still don’t appear, verify that your product data includes all mandatory fields (sku, group_id, price, url, image_url, in_stock, categories).

Events not recording

Ensure the event name field uses a recognized Dynamic Yield event type identifier (e.g. add-to-cart-v1, purchase-v1). Custom event names are supported but must be configured in Dynamic Yield first. Also verify that the User Data Events ACL permission is enabled on your API key.

Rate limit errors (429)

Zeotap retries automatically on 429 responses with exponential backoff. If you consistently hit rate limits, reduce sync frequency or batch size. For product feeds, prefer fewer large batches over many small ones.

Data center mismatch

Ensure the data center selected in Zeotap matches your Dynamic Yield account region. US accounts use dy-api.com and EU accounts use dy-api.eu. Using the wrong data center will result in authentication failures or missing data.

Transaction still processing

Product feed bulk updates are asynchronous. After a successful API call (HTTP 202), the transaction may take up to 90 seconds to fully propagate. Check the transaction status in Dynamic Yield if items appear delayed.

Last updated on