# Agent alerting Source: https://docs.hightouch.com/ai-decisioning/agent-alerting Agent alerting notifies you about engine run failures, long-running or stalled agents, and unexpected drops in recommendation volume before they impact your campaigns. ## Before you begin * A running [agent](/ai-decisioning/agents) ## Overview AI Decisioning agents support automated alerting for engine runs — the daily runs that generate and schedule AID messages for your users. The alerting system for AID agents follows the same model used for [syncs](/syncs/alerting) and journeys in Hightouch. Every agent comes pre-configured with a default run failure monitor. No setup is required for monitoring to begin. To access alerting, open an agent and go to the **Alerting** tab. ![Alerting tab showing recipients and trigger configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/alerting/aid-alerting-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f7b83313134bf7d7fab27940850d54e3) ## Alert triggers There are four alert triggers available for AID agents: **Agent run failure:** Triggers when one or more consecutive engine runs fail. Each engine run is responsible for generating and scheduling the AID messages sent to your users, so a failure means messages may not be produced or delivered for that cycle. The alert fires regardless of which pipeline stage caused the failure and links directly to the specific failed run, taking you to the **View details** page on the [Health tab](/ai-decisioning/agent-health#view-details). From View details, you can see each pipeline stage and its status, which stage the run failed at, and an error message explaining what went wrong. For more information, see [Agent health > View details](/ai-decisioning/agent-health#view-details). ![Agent run failure trigger configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/alerting/alert-agent-run-failure.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3698b8d478dc831bce3f64790c7df273) **Agent run duration:** Triggers when an agent has been running for longer than a threshold you define (in minutes). Use this to detect runs that are taking unusually long, which may indicate a warehouse performance issue or a bottleneck in the pipeline. ![Agent run duration trigger configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/alerting/alert-agent-run-duration.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f6a52e1b1f12f350aef6292cec810a5e) **Agent idle time:** Triggers when no new agent run has started within a specified number of minutes. Use this to detect situations where your agent has stopped running entirely, which could mean a scheduling issue or an upstream dependency failure. ![Agent idle time trigger configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/alerting/alert-agent-idle-time.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=15d55f321a6c7bb272831cad6298cb8e) **Low number of recommendations generated:** Triggers when the number of interactions (messages) generated in an engine run falls below a threshold you define. Use this to catch unexpected drops in decision volume that may not surface as an outright failure but could signal an upstream data issue or audience eligibility problem. ![Low number of recommendations trigger with custom severity thresholds](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/alerting/alert-low-number.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8636e2b953fcbf58b7e486d5be2c705b) ## Alert severity Each trigger can be configured with a severity level: * **Critical:** For high-urgency issues that require immediate attention, such as a run failure. * **Warning:** For lower-urgency signals, such as a drop in recommendation volume that may warrant investigation but is not blocking. * **Custom:** Set separate thresholds for Critical and Warning severity on the same trigger. For example, fire a Warning if fewer than 500 interactions are generated and a Critical if fewer than 100. ## Notification channels Alerts can be routed to the following destination types: Slack, Email, PagerDuty, SMS, and Webhook. Each recipient can be scoped to receive only Critical alerts or all alerts. ## Set up alerting 1. Go to any AID agent and select the **Alerting** tab. 2. Review the pre-configured **Agent run failure** monitor. Adjust the severity or switch to a Custom threshold if needed. 3. Click the **+** button under **Recipients** to add a notification channel (Slack, Email, PagerDuty, SMS, or Webhook). 4. Optionally, configure additional triggers such as **Agent run duration**, **Agent idle time**, or **Low number of recommendations generated** with your preferred thresholds and severity. 5. Select **Save changes**. Alerts fire on the next qualifying run. ## Next steps * [Agent health](/ai-decisioning/agent-health) to monitor pipeline runs and delivery rates. * [Insights](/ai-decisioning/insights) to measure agent and message performance. * [Agents](/ai-decisioning/agents) to configure goals, audiences, and scheduling. # Agent health Source: https://docs.hightouch.com/ai-decisioning/agent-health The Health tab gives you real-time visibility into your agent's pipeline runs, channel delivery rates, and the freshness of the outcome data powering optimization. ## Before you begin * A running [agent](/ai-decisioning/agents) * [Send event tracking](/ai-decisioning/configuration#configure-send-tracking) configured for channel delivery metrics ## Overview The `Health` tab provides operational visibility into your agent from a single view. No additional setup is required — the tab automatically pulls data from your existing agent configuration, runs, and event models. To access it, open an agent and go to the **Health** tab. ![Health tab overview](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-health-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f4da2af2905a11ffdc3eed20731997a3) ## Message generation The **Message generation** section shows the current and historical state of your agent's daily runs — the runs that schedule and produce AID messages. **Current run:** If a generation is in progress, you can see when it started and how long it has been running. To see its current pipeline step, click **View details**. **Last run:** Shows when the most recent generation completed, how long it took, and how many recommendations were produced. **Historical runs:** A table of recent runs with start time, duration, run status, and recommendation count. **Failed runs:** If a run encountered an error, it is flagged in red. Click **View details** to see per-stage durations and actionable error messages. ### View details Click **View details** on any run to open a per-stage pipeline breakdown. This view is useful for diagnosing run failures, identifying bottlenecks, and understanding where time is spent across the generation process. Each run includes the following pipeline phases: * **Cache Interactions** — Loads recent interaction data * **Assign User Groups** — Assigns users to treatment or holdout groups * **Pull Warehouse** — Retrieves data from your warehouse * **Generate Interactions** — Produces message recommendations for eligible users * **Write Warehouse** — Writes results back to your warehouse * **Compact Interactions** — Cleans up interaction records * **Trigger Analytics** — Updates reporting and analytics data Each phase shows its duration and status (`Completed`, `In progress`, `Pending`, or `Failed`). Stages that haven't started yet show as `Pending`. ![Pipeline phase details](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-health-details.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=59348b1f249523072d71775b92cf24db) When a run fails, the error message includes guidance on what went wrong and what you can do to fix it. Errors fall into two categories: * **External issues (actionable by you):** Problems originating from your data or configuration. For example, a column may have been dropped or renamed in your warehouse while the agent's parent model, user feature matrix, audience, or event goals still reference it. Update the affected configuration and re-run the agent. * **Internal issues:** Problems on Hightouch's side. Hightouch receives internal alerting for all agent run failures and proactively investigates. You can also reach out to your Hightouch contact for support. > [!TIP] > > If a run fails at **Pull Warehouse**, check that your data warehouse is > running and accessible, and verify that your connection credentials in > Hightouch are correct. > [!WARNING] > > A common cause of run failures is a column being dropped or renamed in your > warehouse while the agent's audience, feature matrix, event models, or parent > model still reference it. If you see a missing column error, check each of > those configurations for stale references, update them to reflect the current > schema, and re-run the agent. ## Channel send success > [!NOTE] > > Send event tracking must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. The **Channel send success** section shows how successfully your agent's messages are being delivered to users, broken down by channel (Email, SMS, Push, and others). * **Send success:** The percentage of scheduled messages confirmed sent by your ESP, based on the send event model configured for each channel. * **Sent, dropped, failed, and unverified counts:** When reconciliation data is available, columns break down how many messages were sent, dropped or failed at sync, or remain unverified. * **Syncing to:** Shows which destination is handling delivery for that channel. * **Time filter:** Use the dropdown in the top-right corner to filter by **Last 30 days**, **Last 60 days**, or **Last 90 days**. ![Send success insights](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-send-success-insights.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ae998eba9141c461ccd69efcf959b038) If send success is not configured for a channel, click **Open send success insights** or go to [Insights > Send success](/ai-decisioning/insights) to configure it. > [!NOTE] > > Send success tracking requires send events to be linked to your channels. See > [Send event tracking](/ai-decisioning/configuration#configure-send-tracking) > for setup instructions. ### Troubleshoot low delivery rates If you see unexpected delivery numbers, here are the most common causes: * **"Not configured":** No send event model is set for that channel. Configure send event tracking so Hightouch can match recommendations to confirmed sends. * **"No data":** Send event tracking is configured, but no data has appeared yet. Data typically appears within 24 hours of configuration. If it was configured more than 24 hours ago, review the event model for that channel. * **Below 50% (highlighted in red):** This threshold flags channels that may have a misconfigured event model or a delivery issue worth investigating. This is particularly common during initial setup, when send tracking is first being validated. ## Outcome health The **Outcome health** section tracks the freshness of the event data powering each of your agent's configured outcomes (goals). This helps you catch reverse ETL pipeline issues before they affect agent optimization. * **Recent timestamp:** Outcome event data is flowing correctly. * **Stale or missing timestamp ("--"):** Event data has not been loaded recently. Investigate whether the reverse ETL pipeline feeding that outcome has stalled or broken. > [!NOTE] > > Each outcome's "Last data loaded" timestamp reflects when event data was most > recently ingested, not when the agent last ran. If you see a stale timestamp, > check your reverse ETL sync for that outcome before the next agent run. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Channel send success shows "Not configured" or "No data" | No send event model is set for that channel, or data hasn't appeared yet. | Confirm the event model tracking send confirmations from your ESP is correctly configured and scoped to the relevant business units or campaign identifiers for your AID campaigns. | | Outcome health shows a stale or missing timestamp | The reverse ETL pipeline feeding that outcome has stalled or broken. | Check the reverse ETL sync for the affected outcome and resolve any pipeline issues before the next agent run. | | Pipeline run fails at Pull Warehouse | Your data warehouse is unreachable or credentials are invalid. | Verify that your warehouse is running and accessible, and confirm your connection credentials in Hightouch are correct. | | Pipeline run fails with a missing column error | A column was dropped or renamed in your warehouse while your parent model, audience, feature matrix, or event models still reference it. | Update the affected configurations to reflect the current schema, then re-run the agent. | ## Next steps * [Agent alerting](/ai-decisioning/agent-alerting) to get notified about run failures and volume drops. * [Insights](/ai-decisioning/insights) to measure agent and message performance. * [Agents](/ai-decisioning/agents) to configure goals, audiences, and scheduling. # AI Decisioning agents Source: https://docs.hightouch.com/ai-decisioning/agents Agents are the foundation of AI Decisioning. Each agent defines who to target, what to optimize for, and when messages can be sent. ## Before you begin * [Configuration](/ai-decisioning/configuration) * [Prepare data for AID](/ai-decisioning/prepare-data) * At least one connected destination ([SFMC](/ai-decisioning/sfmc), [Braze](/ai-decisioning/braze), [Iterable](/ai-decisioning/iterable)) ## Overview An **Agent** in AI Decisioning combines your audience, messages, and goals into a single adaptive campaign. ![Agents overview dashboard](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-overview-dashboard.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6bfc1166025ce402e86622976ed9b14e) Agents use reinforcement learning to decide which message, timing, and channel will drive the best outcome for each user. They operate continuously, learning from real user outcomes such as clicks, purchases, or sign-ups. Each new message helps the model understand which creative and timing combinations perform best for different audiences. > [!NOTE] > > Agents don’t replace your content or rules—they learn within the goals, > audiences, and guardrails you define. ## Create a new agent 1. Go to `AI Decisioning >` [`Agents`](https://app.hightouch.com/ai/flows?from=docs). 2. Click `+ Add agent`. ![Add agents button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-add-agent.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c5f9f6bccdf43e8657598e3dad80664b) 3. Enter a name that reflects your campaign’s purpose, such as `Win-back customers` or `Subscription renewals`. 4. Select a **parent model**. The parent model defines which users this agent can evaluate. All agents in the same decision engine must use models from the same data source. 5. Choose a **target audience** from [Customer Studio > Audiences](/customer-studio/usage). The audience list is filtered to audiences built from the selected parent model. 6. (Optional) Add a **holdout group** to measure incremental lift (for example, `20%`). 7. Click `Add agent`. ![Add a new agent window showing parent model and audience selection](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-add-agent-modal.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=57fed4d706b8d0d76ef163bf089abcbd) ## Configure your agent After creation, click your agent to open the `Configuration` tab. From here, you can set audience eligibility, goals, Smart suppression, and scheduling preferences. Messages have their own top-level `Messages` tab — see [Messages](/ai-decisioning/messages). ![Agent configuration overview](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-configuration.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b10e1803d1927e172949d7ebc2ee6360) ### 1. Set audience eligibility This section shows the audience your agent targets and its experiment setup. | Setting | Description | | - | - | | **Target audience** | The audience defined in Customer Studio. | | **Experiment setup** | Controls the holdout used to measure true lift. Set the holdout percentage (for example, `20%`) within this setting. | ![Agent audience eligibility panel](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=08937a74dcf5c17f1c1b280b5c109daf) > [!NOTE] > > Holdouts let you compare users who receive messages with users who don’t, so > you can measure incremental lift. ### 2. Add and manage goals Goals define what your agent optimizes toward. Each goal represents a measurable event (like a purchase or click) and includes a priority level—helping AID decide which outcomes matter most. To add a goal: 1. In your agent’s `Configuration` tab, under `Goals`, click `+ Add goal`. ![Add goal button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-goals.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=753b37827bccd8f6586dd51fa77a3239) 2. Configure the goal. * Select an event model (for example, `Purchase event`, `Viewed Product`, or `Redeemed offer`). * (Optional) Add a filter to refine the event, such as `Performed > Where property is campaign = Summer Sale`. ![Add goal step 1 – Configure event model](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-goal-modal.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=af50a23cd3e4caccd4c928cda8b748e0) 3. Click `Continue` to move to the `Impact` step. * Choose whether to include this goal in decisioning or track it for measurement only. * Select a classification: * `Best` — Primary success metric * `Very good` / `Good` — Positive supporting outcomes * `Bad` / `Very bad` / `Worst` — Negative outcomes such as `Unsubscribe` * (Optional) Add a weight column to scale results by value (for example, `Price` or `Order Value`). ![Add goal step 2 – Classify impact and weighting](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-goal-impact.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=220acd010a07a192481d08812a60ce4d) 4. Click `Continue` to finalize. * Enter a clear, descriptive goal name (for example, `Redeemed offer`). * Click `Add goal` to save. ![Add goal step 3 – Finalize and name goal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-add-goal-finalize.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=569e63aeb1f21088e9ca2eb57e0c44e0) > [!NOTE] > > Goals replace the older “Outcomes” field from earlier versions of AI > Decisioning. Each agent learns continuously based on these metrics. > [!TIP] > > Start with one clear `Best` goal (for example, purchase) before adding > supporting or negative signals. ### 3. (optional): Configure scheduling Use the `Scheduling` panel to control when your agent sends messages. | Setting | Description | | - | - | | **Quiet hours** | Prevents sends during off-hours (for example, weekends or late nights). | | **Blackout days** | Pauses messaging during specific holidays or events. | To cap how often a user can receive messages, use **Message limits** (for example, up to 3 sends per week per user), configured separately from scheduling. ![Scheduling configuration with quiet hours and blackout days](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-scheduling.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2cbf5c908db3c412b52c15e8fe4d60e0) > [!TIP] > > Use scheduling rules to maintain consistency across agents. Combine with smart > suppression to control both *when* and *whether* messages are sent. ### 4. (optional): Enable smart suppression Smart suppression predicts which messages are most likely to drive incremental conversions and holds back the rest. It uses the [goals](/ai-decisioning/agents#step-2-add-and-manage-goals) you’ve already configured to evaluate each send. 1. In **Configuration**, scroll to **Smart suppression (optional)**. 2. Select **Enabled**. 3. Set the percentage of eligible users to send to (for example, send messages to the top **67%**). 4. Select **Save changes**. A predicted performance curve appears once the model has enough data, typically after about two weeks. ![Smart suppression configuration panel showing the toggle, send percentage, and expected conversions chart](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/smart-suppression/aid-expected-conversions-total.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=47e21cc24744ce95169a1214d36be569) > [!NOTE] > > For detailed guidance, see Enable smart > suppression. ### 5. (optional): Advanced settings Use `Advanced` settings to connect your agent with your organization’s downstream campaign tracking. | Setting | Description | | - | - | | **Customer managed campaign attribution** | Enter one or more campaign IDs from your ESP or internal tracking system to tie AID results to your own reporting. | ![Advanced settings panel showing Campaign ID field](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-advanced-campaign-id.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b90b0624e70d532b89f409dde182e2ba) > [!NOTE] > > Campaign IDs help maintain consistent reporting between Hightouch and your > connected destinations. For example, you can enter Braze, Iterable, or SFMC > campaign identifiers to align AID outcomes with your existing analytics. ## Monitor and manage agents Once your agent is running, open the `Overview` tab to review live performance and experiment results. ![Agent Overview dashboard showing performance charts](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-agents-agent-overview-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=deacdd6c6f48fdbe79daa2cd116fbe1a) The Overview includes several key panels: | Section | Description | | - | - | | **Eligible users** | Shows the number of users who currently qualify for your agent’s audience and can receive messages, excluding holdouts and ineligible users. | | **Performance overview** | Shows conversion and engagement metrics for each goal, including the current **winning group**, **holdout**, and **treatment** performance with confidence intervals. | | **Sends summary** | Displays total sends and messages scheduled for today and tomorrow. | | **Sends over time** | Charts daily send volume to help you spot delivery trends and campaign pacing. | | **Sends breakdown by message** | Compares message-level send volume and engagement across your agent. | Use this view to monitor how your messages are distributed, which goals are performing best, and how holdout results compare to treatment performance. > [!NOTE] > > Performance updates automatically as your agent runs. Confidence levels appear > once enough event data has been collected for statistical analysis. > [!TIP] > > Use [Insights](/ai-decisioning/insights) for deeper breakdowns of message > performance, goal impact, and timing analysis across agents. ## Messages **Messages** define what an agent can send and where those messages are delivered. Each message connects an agent to a destination (such as Braze, Iterable, or Salesforce Marketing Cloud). Agents evaluate messages continuously to determine which content, timing, and channel perform best for each user. Message setup includes: * Connecting the agent to a destination * Adding optimized content and variants * Applying message- and variant-level guardrails For step-by-step instructions, see [Messages](/ai-decisioning/messages). ## Offers The `Offers` tab lets you create and manage offers that agents can factor into their decisioning. When an offer is attached to a message, the agent weighs the message's expected value (value minus cost, weighted by conversion likelihood) alongside engagement signals when choosing what to send. To create an offer: 1. Open an agent and go to the `Offers` tab. 2. Click `+ Add offer`. 3. Configure the offer: * **Name**: A short, human-readable name (for example, `$10 off first order`). * **Description** *(optional)*: Additional context about the offer. * **External ID** *(optional)*: A stable identifier in your source system. Required for CSV upserts to match existing offers. * **Tags** *(optional)*: Key-value attributes to help organize and categorize offers. * **Offer type**: **Static** offers apply the same cost to every user. **Column** offers read per-user values from warehouse columns. * **Cost value**: A fixed cost associated with each conversion (for example, \$10 off). * **Cost multiplier**: A discount rate applied to each conversion's value (for example, `0.2` = 20% discount). 4. Click `Add offer`. Cost value and cost multiplier are independent. Use either, both, or neither. Leave both at zero for a metadata-only offer. ![Add offer dialog](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-add-offer.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6a543568aae9b1566871751533c3c909) Once created, attach offers to individual messages from the message [Configuration tab](/ai-decisioning/messages#offers). Each message can have at most one attached offer, and not all messages require one. > [!TIP] > > Use offers when your agent needs to balance engagement with cost efficiency — > for example, choosing between a high-discount winback offer and a lower-cost > loyalty reminder. ## Health The **Health** tab gives you real-time visibility into your agent's pipeline runs, channel delivery rates, and outcome data freshness. From a single view, you can monitor message generation status, diagnose pipeline failures, and catch data issues before they affect optimization. For full details, see [Agent health](/ai-decisioning/agent-health). ## Localization The `Localization` tab lets you translate content variants to a user's preferred language. When enabled, the agent serves localized versions of your message content based on each user's locale. Localization is opt-in per agent — existing agents keep working as-is until you enable it. To configure localization: 1. Open an agent and go to the `Localization` tab. 2. Toggle on **Enable localization**. 3. Configure the following settings: * **User locale field**: Select the column from the agent's parent model that contains each user's locale (for example, `locale` or `language`). * **Locales**: Define the locales supported by this agent. Suggestions are pulled from values that already exist in your warehouse, but you can add any string (for example, `en-US`, `fr-FR`, or a non-ISO value like `mx`). * **Default locale**: The locale displayed in the UI. It's used for users whose locale is missing or unsupported when the missing-locale behavior is set to **Use default locale**. * **Missing locale**: Choose what the system should do when a user doesn't qualify for any locale: * **Use default locale** — Send the default locale content * **Send nothing** — Skip the user * **Raise an error** — Flag the issue for review ![Localization tab](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-localization-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8829806aea68914b041b316249d6a569) > [!NOTE] > > Locale values in your `User locale field` column must exactly match the > locales you configure here, including case and separators. A user whose value > doesn't match any configured locale is treated as missing a locale. > [!TIP] > > Start with a small number of high-value locales and expand as you validate > translation quality and conversion impact. Adding a locale later doesn't > retroactively translate existing content — each localized variant needs a > value for the new locale before it's eligible to send in that language. Once localization is enabled, translate individual message variants on the [Content tab](/ai-decisioning/messages#localize-message-content) of each message. ## Alerting The **Alerting** tab lets you set up automated notifications for engine run failures, long-running or stalled agents, and unexpected drops in recommendation volume. Every agent comes pre-configured with a default run failure monitor — no setup is required for monitoring to begin. You can add notification channels (Slack, Email, PagerDuty, SMS, or Webhook) and configure severity levels and thresholds. For full details, see [Agent alerting](/ai-decisioning/agent-alerting). ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Agent isn’t sending messages | The target audience is empty, or the destination connection is paused. | Check audience eligibility in `Configuration > Eligibility`, and confirm destination status under `Integrations`. | | Messages not appearing in ESP | Message or automation identifier mismatch. | Verify the correct destination and automation identifier when adding messages. | | No performance data visible | The agent is new, paused, or running only a holdout group. | Wait 24–48 hours after activation, or adjust your holdout percentage to include active treatments. | | Smart suppression chart missing | Suppression is off or not enough send data has been collected. | Enable `Smart suppression` and allow at least 2 weeks of message activity for predictions to populate. | | Goals not updating or showing results | The event model or schema changed in your workspace. | Reopen the goal configuration, reselect the event model, and save the update so the agent can rebuild its data relationships. | > [!NOTE] > > If you recently updated goals, audiences, or connected destinations, allow > time for the agent to refresh data before performance metrics stabilize. ## Next steps * [Messages](/ai-decisioning/messages) to create and manage message variants. * [Agent health](/ai-decisioning/agent-health) to monitor pipeline runs and delivery rates. * [Agent alerting](/ai-decisioning/agent-alerting) to get notified about run failures and volume drops. * [QA guide](/ai-decisioning/qa-guide) to validate messages before launch. * Smart suppression to control send volume based on predicted impact. * [Tags](/ai-decisioning/tags) to add and analyze message tags. * [Insights](/ai-decisioning/insights) to measure agent and message performance. * [AI Decisioning configuration](/ai-decisioning/configuration) for channels, scheduling, agent prioritization, and feature matrices. # Braze integration with AID Source: https://docs.hightouch.com/ai-decisioning/braze Connect Braze to AI Decisioning so agents can deliver personalized emails, SMS, push notifications, and in-app messages through your existing Braze Campaigns and Canvases. ## Before you begin * [Prepare data for AID](/ai-decisioning/prepare-data) ## Overview Delivering relevant and timely customer experiences in Braze requires up-to-date, contextual data. By integrating Hightouch's AI Decisioning (AID) with Braze, you can: * Automatically trigger Braze Campaigns or Canvases based on predictions and behaviors surfaced by AID Agents * Personalize message content using dynamic variables from your data warehouse * Centralize targeting and decision logic in Hightouch, while using Braze to handle message delivery ## 1. Set up Braze as a destination > [!NOTE] > > Already configured Braze? Even if you’ve previously set Braze up as a > destination, you’ll still need to apply the required permissions for AID. To [connect Braze to Hightouch](/destinations/braze), you’ll need: * An **API key** with the correct permissions * Your **Braze region** identifier ### Step 1: Create API key **In Braze:** 1. Go to **Settings > APIs and Identifiers** 2. Select **Create API Key** ![Create API key](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-create-api-key.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a7bfb32e5032bfeed1b4e4011b6e7231) ### Step 2: Set required permissions 1. Assign the following permissions: | Feature | Required Permissions | | - | - | | Campaigns | `campaigns.trigger.send`, `campaigns.list`, `campaigns.details`, `campaigns.trigger.schedule.create` | | Canvas | `canvas.trigger.send`, `canvas.list`, `canvas.details` | | Messages | `messages.send` | | Templates | `templates.email.list`, `templates.info` | ![Campaign permissions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-campaign-permissions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ea8535fdeffe9cf965f292b6d38535d0) ![Canvas permissions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-canvas-permissions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4cc0e115660ab68b0a8446b2fc76e787) ![Message permissions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-message-permissions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b8dcdcaa978fe649c3107c3d0f421461) ![Template permissions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-template-permissions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=36053cedf47ec0a8da67dc38141ecc9d) ### Step 3: Find your Braze region Use the table below to find your Braze region: | URL | Region | | - | - | | [https://dashboard-01.braze.com](https://dashboard-01.braze.com) | `iad-01.braze.com` | | [https://dashboard-02.braze.com](https://dashboard-02.braze.com) | `iad-02.braze.com` | | [https://dashboard-03.braze.com](https://dashboard-03.braze.com) | `iad-03.braze.com` | | [https://dashboard-04.braze.com](https://dashboard-04.braze.com) | `iad-04.braze.com` | | [https://dashboard-05.braze.com](https://dashboard-05.braze.com) | `iad-05.braze.com` | | [https://dashboard-06.braze.com](https://dashboard-06.braze.com) | `iad-06.braze.com` | | [https://dashboard-07.braze.com](https://dashboard-07.braze.com) | `iad-07.braze.com` | | [https://dashboard-08.braze.com](https://dashboard-08.braze.com) | `iad-08.braze.com` | | [https://dashboard-01.braze.eu](https://dashboard-01.braze.eu) | `fra-01.braze.eu` | | [https://dashboard-02.braze.eu](https://dashboard-02.braze.eu) | `fra-02.braze.eu` | Braze also supports additional regions — `eu-01` and `eu-02` (`.braze.eu`), and `au-01`, `id-01`, and `us-10` (`.braze.com`). Match your dashboard URL to the region shown in your Braze account settings. ### Step 4: Connect to Hightouch 1. Go to **Integrations > Destinations** 2. Select **Add destination** 3. Select **Braze** and select **Continue** ![Select destination](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-select-destination.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8447a54479ae70bfcc932ad788d6587c) 4. Paste your API key and select your Region. 5. Select **Test Connection** to verify setup. You should see `Success` for Campaigns and Canvases. 6. Select **Continue**. ![Connect destination](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-connect-destination.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f22a1af751d0371e8abe946669ea48cd) 7. Optional: configure alerts. You can also do this later in **Integrations > Alerting**. ![Configure alerts](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-configure-alerts.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=943472f0cd30ae83584b4ecb47cd87bf) 8. Finalize destination settings and select **Finish**. ![Finalize destination](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-finalize-destination.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=863b3b31b32048b3afa1e35fc141709c) ## 2. Add channels in AI Decisioning Once Braze is set up as a destination, you can add **channels**. Channels define how Hightouch sends messages to Braze—via Campaigns or Canvases. ### Set up a channel 1. Go to **AI Decisioning > Configuration > Channels**. 2. Select **Add channel**. 3. Choose a channel type: Email, SMS, Push, or In-App. 4. Select **Braze** as the destination. 5. Choose a [sync type](/ai-decisioning/braze#sync-type): * **Campaign trigger**: One-time, real-time sends. Recommended for email, SMS, and push. * **Canvas trigger**: Sends through a Braze Canvas flow. Recommended for in-app messages. 6. Select an **identifier** — the user column that identifies the recipient, such as `external_id` or `email`. 7. Select **Add channel**, 8. Select your new channel and select **Save changes**. ![Add channel button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-add-channel.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7946c54e287209f688a39a513c81c186) ![New channel modal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-add-channel-braze.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5194ccc48bc6401fb774b72e20b539c2) ### Sync type comparison The **Sync Type** determines how Hightouch sends messages through Braze. Here’s a breakdown of the available options: | Channel | Campaign trigger | Canvas trigger | | - | - | - | | Email | ✅ (recommended) | ✅ | | SMS | ✅ (recommended) | ✅ | | Push | ✅ (recommended) | ✅ | | In-App | ✅ | ✅ (recommended) | | **Sync type** | Best for | Message timing | Dynamic vars | | - | - | - | - | | **Campaign trigger** | Immediate, single-send campaigns for Email, SMS, and Push | Immediate | Fully supported | | **Canvas trigger** | In-app messages | Immediate | Limited (no API-triggered overrides) | ## 3. Add messages After you add channels in AI Decisioning, you can add **messages** to your agents. Each message connects an agent’s decision to a Braze Campaign or Canvas. For full details on message configuration, variants, and tags, see [Messages](/ai-decisioning/messages). ### Add a message from Braze 1. Go to **AI Decisioning > Agents** and select your agent. 2. Open the **Messages** tab. 3. Select **Add messages**, then select **Add messages individually**. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-add-messages.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=85b2cc548b7b9280757ebff29c83518a) 4. Select your configured Braze **channel and destination** tile (for example, **Push - Braze (Campaign)**). 5. Under **Braze campaign**, select the campaign or canvas you created in Braze. 6. Enter a **message name** and select **Add messages**. ![Add message modal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-new-message-modal.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bb578a744cdadb69cc844c4eb1350f00) You can repeat this process for each channel: * [Email via campaign trigger](/ai-decisioning/braze#campaign-trigger) * [SMS via campaign trigger](/ai-decisioning/braze#campaign-trigger) * [Push via campaign trigger](/ai-decisioning/braze#campaign-trigger) * [In-app messages via canvas trigger](/ai-decisioning/braze#canvas-trigger) ### Test a message 1. Open the message and go to the **Content** tab. 2. Under **Optimized content**, confirm your variants are configured. If your message uses [dynamic variables](/ai-decisioning/braze#use-variables-in-braze), set values for testing. 3. In the **Preview** panel, verify the rendered message looks correct. 4. Select **Send test** to send the message to a test user in Braze. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=9b5502dadeb444ed7df0f9fcd9923222) #### Test requirements Your test will only succeed if: * The Braze Campaign or Canvas is **Active** (not a draft or scheduled). * **Frequency Capping** is turned **off** in Braze. * The test user exists in Braze and has the appropriate **identifier** (for example, `user_id`, `external_id`, `email`). * The user meets eligibility for the channel (for example, email opted-in, has a push token). To test accurately, use a Braze user whose `user_id` or `external_id` matches the identifier configured for the channel. You can confirm delivery in Braze by checking message logs or the user’s messaging history. ## 4. Configure Braze Campaigns and Canvases for AID Before adding a message in Hightouch, you need to configure or create the corresponding Campaign or Canvas in Braze. ### For Campaign triggers [Create a Campaign](https://www.braze.com/docs/user_guide/engagement_tools/campaigns/building_campaigns/creating_campaign) in Braze that supports API triggering. **In Braze** 1. Go to **Campaigns > Create Campaign** ![Create campaign](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-create-campaign.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=36d30b353c85fce31a4866bc7fe837f0) 2. Choose your channel (Email, SMS, Push) and complete Campaign Details * [Create an email campaign](https://www.braze.com/docs/user_guide/message_building_by_channel/email/html_editor/creating_an_email_campaign/#step-1-choose-where-to-build-your-message) * [Create an SMS campaign](https://www.braze.com/docs/user_guide/message_building_by_channel/sms_mms_rcs/sms/create) * [Create a push campaign](https://www.braze.com/docs/user_guide/message_building_by_channel/push/creating_a_push_message) 3. On the **Schedule Delivery** step, select [API Triggered](https://www.braze.com/docs/user_guide/engagement_tools/campaigns/building_campaigns/delivery_types/api_triggered_delivery) as the Delivery Type 4. In **Target Audiences**, set a broad audience or include your test user via filters 5. In **Assign Conversions**, optionally define conversion goals 6. On the **Review** step, ensure your campaign is: * **Active** (not saved as Draft) * Has **Frequency Capping disabled** if applicable * Displays a full message preview 7. Note the **Campaign ID** for reference in Hightouch **In Hightouch** 8. Select the **Campaign** when [adding a message](/ai-decisioning/braze#3-add-messages). 9. [Test the message](/ai-decisioning/braze#test-a-message) to confirm delivery. ### For Canvas triggers [Create a Canvas](https://www.braze.com/docs/user_guide/engagement_tools/canvas/create_a_canvas/create_a_canvas) with an API entry event **In Braze** 1. Go to **Canvases > Create Canvas** ![Create canvas](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-create-canvas.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=0bada67a79bc3bae2060f2bdc0120835) 2. Fill out **Canvas Details**, and note the **Canvas ID** 3. On the **Entry Schedule** step, choose [API Triggered](https://www.braze.com/docs/user_guide/engagement_tools/canvas/create_a_canvas/create_a_canvas/?tab=scheduled%20delivery) 4. In **Target Audience**, optionally add filters or include a known test user 5. In **Send Settings**, confirm eligibility settings (e.g., subscription status, quiet hours, frequency capping) 6. Use the **Build Canvas** step to drag in components (like message or delay) 7. Use the **Summary** screen to review your configuration before launch **In Hightouch** 8. Select the **Canvas** when [adding a message](/ai-decisioning/braze#3-add-messages). 9. [Test the message](/ai-decisioning/braze#test-a-message) to confirm delivery. > [!NOTE] > > AID cannot override message properties in Canvas messages. Use default > template values instead. ## Use variables in Braze Hightouch variables allow you to personalize Braze messages using live warehouse data, any variable you’ve defined within the message such as subject line variations, or different media assets or content blocks in your Braze library. ### Access variables 1. Open a message in Hightouch and go to the **Content** tab. 2. Under **Optimized content**, expand a content type (for example, **title** or **body**) and add your variants. 3. Select the `...` menu on a variant and select **Copy code snippet** to get the variable code, for example: `{{ api_trigger_properties.${hightouch}.recommendation.variables.subject }}`. 4. In Braze, paste the variable tag into the corresponding field in your message template (for example, the **Subject** field). Always copy the snippet from the message rather than typing it — the exact prefix depends on the channel. Campaign triggers use `api_trigger_properties`, Canvas uses `canvas_entry_properties`, and email and in-app variables include a `| newline_to_br` filter. ![Copy snippet](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-copy-code.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=52ea53e1103307b1ad9f46f8a48f7f4c) ![Preview variables](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/braze/aid-braze-preview-variables.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=43cab87e088c2186f52c629b0edec3d6) ### Important notes * **Campaign triggers**: Variables are fully supported. * **Canvas triggers**: Only template-level defaults can be used—API-triggered variables won’t override content. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Message fails to send | API errors or misconfigured destination | Check Hightouch logs for API errors. | | Test user not receiving messages | Identifier mismatch | Ensure your identifier matches a valid `external_id` or user property in Braze. | | Canvas sends not triggering | Canvas not published or entry event misconfigured | Confirm the Canvas is published and the API entry event is configured. | ## Next steps * [Messages](/ai-decisioning/messages) to create and manage the message variants each agent sends through Braze. * [QA guide](/ai-decisioning/qa-guide) to validate messages before you launch. * [Agents](/ai-decisioning/agents) to configure the agents that decide which messages to send. * [Insights](/ai-decisioning/insights) to measure how your agents and messages perform. # AI Decisioning configuration Source: https://docs.hightouch.com/ai-decisioning/configuration Configure settings that apply across AI Decisioning, to individual agents, and to individual messages. ## Before you begin * Access to [AI Decisioning](/ai-decisioning/overview) * At least one agent created ## Overview AI Decisioning settings are configured at three levels: * **Shared configuration** applies across agents or provides resources that multiple agents can use. Go to **AI Decisioning > Configuration** to access it. * **Agent configuration** controls how an individual agent evaluates users, optimizes, and sends messages. Open the agent's **Configuration** tab. * **Message configuration** controls behavior specific to an individual message. Open the message's **Configuration** tab. Use the most broadly applicable level for a rule. For example, configure an SMS opt-in rule at the channel level when it should apply to every agent using SMS, rather than recreating the rule for each agent. ## Shared configuration Go to **AI Decisioning > Configuration** to manage settings that apply across agents. ### Control channel availability and eligibility Use **Channels** to control which destinations agents can use and which users are eligible to receive messages through each channel. Each channel row shows its destination, configuration, eligibility, and send event. ![Active channels in configuration UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-channels-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2df1a7a347def4252eae370ca145d198) Channel eligibility is useful for rules that should apply everywhere the channel is used, such as SMS opt-in or regional restrictions. A user must also satisfy any applicable agent- and message-level eligibility rules. ![Edit channel eligibility](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-channel-eligibility-edit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c5321778d5331e61afc43ca25c8bbaac) ### Set cross-agent scheduling rules Use **Scheduling** for frequency limits and quiet hours that should apply across agents. You can configure: * **Agent frequency limits** — Limit how often a user can receive messages from each agent. * **Quiet hours** — Prevent messages during specific times, configured per channel and evaluated using each user's local time zone. When multiple frequency limits apply, a send must satisfy all of them. You can also set frequency, scheduling, and time zone rules for a single agent on its [Configuration tab](#set-agent-specific-delivery-limits). ### Resolve conflicts between agents Use **Agent prioritization** when the same user can qualify for multiple agents during the same evaluation window. Set each agent's **weight** and **bias** to determine which agent takes precedence. Use simulated performance to evaluate the expected effect before applying changes. ![Agent prioritization tab in configuration UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-agent-prioritization-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e62b67a2179f8832501d424436e37b76) ### Define data available to agents Use **Feature Matrix** to define which warehouse attributes and behavioral data AI Decisioning can use for evaluation and analysis. Feature matrices are shared resources, but each agent selects the feature matrix it uses. The matrix must match the agent's parent model. For more information, see User feature matrix. ![Feature Matrix tab listing existing feature matrices](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-feature-matrix.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=280e95e58a7085e90a0835682e65d1ce) #### Create a feature matrix 1. Go to **AI Decisioning > Configuration > Feature Matrix**. 2. Select **New feature matrix**. 3. Select the parent model. 4. Enter a name. 5. Select **Create feature matrix**. 6. Select the columns AI Decisioning should use. ![Feature matrix detail view showing models and source columns](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-example-feature-matrix.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=da667d06d147b8dc8f81ef8b759813d6) #### Generate a feature matrix with AI > [!NOTE] > > AI-generated feature matrices must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. Instead of selecting columns manually, select **Generate with AI** to draft a feature matrix for an agent. Hightouch drafts features from the agent's parent-model schema and tailors them to the agent's goal. Generation runs in the background and can take a few minutes. ![Generate feature matrix dialog](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-generate-feature-matrix.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=32fb029810de633efeb91d8db75aa845) Review generated features before using them. Confirm they're relevant to the agent's goal and that none rely on data your compliance policies restrict. ### Configure send tracking > [!NOTE] > > Send event tracking must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. Configure send event tracking on a channel when you want AI Decisioning to match recommendations with delivery events from your warehouse. Send event tracking is required for delivery-related reporting such as [send success](/ai-decisioning/insights#7-send-success), [send comparison](/ai-decisioning/insights#8-send-comparison), and [channel send success](/ai-decisioning/insights). To configure it: 1. Go to **AI Decisioning > Configuration > Channels**. 2. Select a channel. 3. Under **Send event tracking**, select the event model that represents sends. 4. Configure any additional matching or attribution settings needed for your data. ![Send event tracking configuration panel](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-insights-send-event-tracking.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f4e3583b76b9c5e2db64c09eea64c0d7) > [!NOTE] > > Without send event tracking, delivery-related Insights views can't report send > status for that channel. ### Review configuration changes Use **Activity** to see a chronological log of configuration changes across AI Decisioning, such as updated timing, edited outcome filters, renamed agents, and new messages. Each entry records who made the change and when, and **Details** shows what changed. Filter the log by scope to focus on **Global configuration** or a specific agent. ![Activity log in configuration UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-activity-tab.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e30cca5c74a65832dd54aa205b23c4dc) ## Agent configuration Open an agent's **Configuration** tab for settings that apply only to that agent. You select a **parent model** for each agent when you [create it](/ai-decisioning/agents#create-a-new-agent). Agents in the same decision engine must use parent models from the same data source. For more information, see [Prepare data for AI Decisioning](/ai-decisioning/prepare-data). ### Control who the agent can evaluate Configure the agent's target audience and eligibility conditions. Agent eligibility applies in addition to shared channel eligibility and any message-level eligibility. ![Eligibility settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-agent-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=1d4f955baf8752e7bcfc7bc931a942b3) ### Define goals and select data Use **Goals** to define the outcomes the agent should optimize when selecting messages. Messages inherit these goals and can't change them independently. Use **Feature matrix** to select which feature matrix the agent uses. The feature matrix must match the agent's parent model. ### Control what data is sent downstream By default, trigger sync payloads include all columns from the agent's parent model. Use **Synced user columns** to limit which parent-model fields are included. Use **Additional user columns** when you need to include properties from related models. ![Synced user columns on agent Configuration tab](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-agent-synced-user-columns.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=53a554650015da59abcbb1d14aee5fe6) ### Set agent-specific delivery limits Configure agent-level frequency limits, scheduling, and time zone behavior when the restrictions should apply only to this agent. Shared scheduling rules still apply. * **Time zone column** — A parent-model field containing a UTC offset or IANA time zone. * **Fallback time zone** — The time zone used when no user-level value is available. If left blank, the fallback is `America/Los_Angeles`. ![Time zone on agent Configuration tab](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/configuration/aid-agent-time-zone.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=595686ca998b0cb7b2834e5fc2333cf2) Use Smart suppression to reduce low-impact sends based on predicted user value. For more details on agent settings, see [Agents](/ai-decisioning/agents). ## Message configuration Open a message's **Configuration** tab for settings that apply only to one message. Use message eligibility when a condition should apply to a particular message rather than the entire agent or channel. Use [tags](/ai-decisioning/tags) to categorize messages for learning and analysis. Messages inherit goals from their parent agent. To change the goals a message contributes toward, update the agent. For more details on message settings, see [Messages](/ai-decisioning/messages). ## Next steps * [Prepare data for AI Decisioning](/ai-decisioning/prepare-data) to model the warehouse data your agents evaluate. * Configure an AI Decisioning destination to deliver messages: * [Salesforce Marketing Cloud](/ai-decisioning/sfmc) * [Braze](/ai-decisioning/braze) * [Iterable](/ai-decisioning/iterable) # Content Analysis & Suggestions Source: https://docs.hightouch.com/ai-decisioning/content-analysis Content Analysis & Suggestions helps you understand how your messages relate to each other, why certain content performs, and where you can improve your creative library. It builds on your tag framework and provides insights to guide ongoing content planning. ## Overview Content Analysis & Suggestions helps you understand *why* some messages perform better than others. Instead of only seeing which message won, it highlights the elements—such as tone, structure, or value proposition—that influenced performance. Inside each message, **Content Analysis** shows whether your content is unique before activating an agent. After your messages start running, the weekly **Summary** report in [**Insights**](/ai-decisioning/insights) helps you decide when to add new content, refresh existing messages, or retire content that’s no longer effective. Together, these tools help you understand what’s working, avoid unintended duplication, and plan what to create next. ## Before you begin You need access to [AI Decisioning](/ai-decisioning/overview). Then complete these steps before using Content Analysis & Suggestions: 1. **Create a message.**\ Build or update message content inside an agent.\ See: [Add and manage messages](/ai-decisioning/agents#messages) 2. **Add or refine tags.**\ Apply message and variant tags to describe key attributes such as tone, value proposition, or offer.\ See: [AID Tags](/ai-decisioning/tags) ### Content Analysis depends on your tags Content Analysis uses your message and variant tags to understand tone, structure, and strategic intent. Consistent tagging helps the system: * Identify similar messages * Detect overlap or redundancy * Surface content gaps * Provide more accurate recommendations ## How to use Content Analysis & Suggestions Follow this workflow to evaluate and improve your content over time: 1. **Review Content Analysis before launch.**\ In the message’s `Content` tab, check whether the message is unique and not unintentionally duplicating other messages in your library. 2. **Activate your agent.**\ When your content looks distinct, enable the agent so your messages begin generating performance data. 3. **Review the weekly Summary report.**\ In `Insights > Summary`, check for declining engagement, content gaps, or recommended improvements. 4. **Use Agents to explore insights.**\ From the Summary tab, ask follow-up questions—such as “Why is this message similar to others?” or\ “Which tones performed best this week?”—to understand results in plain language. 5. **Update or create new content.**\ Refresh, retire, or expand content based on the insights and recommendations you discover. ## Review message uniqueness before launch Content Analysis summarizes the creative attributes of a message and shows how it relates to other messages in your content library. ### View Content Analysis inside a message Navigate to: [`AI Decisioning > Agents`](https://app.hightouch.com/ai/flows/?from=docs) `> Select an agent > Messages > Select a message > Content` You'll see: ### **Tag summary** All manual and AI-generated tags applied to the message. ### **Similarity analysis** Messages with similar tone, structure, framing, value proposition, or language patterns. Expand each item to see why the messages match. Each related message is prefixed with a similarity status and a colored dot showing how close it is to the current message: * **Different from** — introduces new strategic or creative value * **Similar to** — overlaps with existing content * **Very similar to** — potentially redundant or interchangeable ![Content analysis inside a message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/content-analysis/content-analysis-message-view.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=09e0c5951cfa3b08ab4170a45a9cd3b3) > [!TIP] > > Use Content Analysis before activating an agent to confirm each message adds > something unique. ## Interpret the weekly Summary report Weekly suggestions appear in the [**Summary**](/ai-decisioning/insights#1-summary) view of Insights: [`AI Decisioning > Insights > Summary`](https://app.hightouch.com/ai/insights/summary/?from=docs) > [!NOTE] > > The **Summary** tab appears only when the agent has a scheduled report. > [!TIP] > > You can review this report during weekly planning to decide what to adjust or > create next. The report includes: ### **Performance highlights** Overall trends across themes, tones, or formats. ### **Content gaps** Areas where your content library lacks variety. ### **Content to refresh** Messages that are declining in engagement. ### **Recommended actions** Suggestions such as: * Refreshing visuals or copy * Adding a new variant * Retiring a low-differentiation message * Expanding topics that perform well ![Summary report in Insights > Summary](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/content-analysis/content-analysis-summary.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3e7fdb138e30af311225f46ca7bf8425) > [!NOTE] > > The **Summary** report refreshes automatically each week based on updated > performance data. ## Ask follow-up questions with Hightouch Agents From the Summary tab, select **Start a new chat about this report** to open the report in **Agents**, then ask follow-up questions in plain language from the chat. ![Follow-up exploration with Agents](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/content-analysis/content-analysis-agents-chat.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7846b27280553c9b7768bc8d4053c92a) You can ask: * “Why is this message similar to others?” * “Which motivators performed best last month?” * “Where are our biggest content gaps?” * “What themes should we prioritize next?” Learn more **Agents overview** > [!TIP] > > Use Agents to validate ideas or explore trends as you build your next set of > content variants. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Similarity analysis not appearing | Message is new or missing tags | Add or refine [tags](/ai-decisioning/tags) | | Weekly report missing | Summary not configured | [Contact support](#pylon-chat) | | Recommendations feel too general | Limited content variety or inconsistent tag usage | Refine tags or add more content | | Fatigue insights unavailable | Not enough message sends | Allow more time for performance data to accumulate | > [!NOTE] > > The **Summary** report relies on recent performance. Newly created messages > may need time before insights appear. ## Next steps * [AID Tags](/ai-decisioning/tags) to build the tag framework Content Analysis relies on. * [QA guide](/ai-decisioning/qa-guide) to validate messages before launch. * Hightouch Agents overview to explore insights in plain language. * [AID Insights](/ai-decisioning/insights) to see where the weekly Summary report appears. * [AID Agents](/ai-decisioning/agents) to create and manage the messages you analyze. # Custom destinations Source: https://docs.hightouch.com/ai-decisioning/custom-destinations A custom channel sends an agent's decisions to any destination in the Hightouch catalog — including a raw HTTP endpoint that posts each decision to your own API. ## Before you begin * [Prepare data for AID](/ai-decisioning/prepare-data) * A destination connected in Hightouch (such as [HTTP Request](/destinations/http-request)) ## Overview AI Decisioning delivers decisions through your connected Hightouch destinations. It has purpose-built integrations for [Braze](/ai-decisioning/braze), [Iterable](/ai-decisioning/iterable), and [Salesforce Marketing Cloud](/ai-decisioning/sfmc) that manage message delivery for you. A **custom channel** extends AI Decisioning to any other destination in the Hightouch catalog. If you can sync to a destination today, AI Decisioning can deliver to it: you connect the destination, and AI Decisioning writes its decisions to a model you sync from. The most common use is a raw HTTP endpoint, where AI Decisioning posts each decision to your own API using the [HTTP Request destination](/destinations/http-request). Use a custom channel when: * Your destination doesn't have a purpose-built AI Decisioning integration. * You deliver through middleware you already own, such as a Lambda or an internal service. * You want to write decisions to a warehouse, object store, or other system for downstream processing. > [!TIP] > > If you'd like a purpose-built integration for a destination you use, and > Hightouch can already sync to it, we can usually add AI Decisioning support. > > [Contact your Hightouch team](#pylon-chat) > > > > to request one. ### How custom channels differ from managed channels With a managed channel (Braze, Iterable, or Salesforce Marketing Cloud), Hightouch creates and manages the delivery sync for you, and message content is sourced from a template in your destination. A custom channel works differently in two ways: * **You build and own the delivery sync.** AI Decisioning writes each agent's decisions to a Hightouch model. You create a normal sync from that model to your destination, and you own its schedule and monitoring. * **Message content lives in Hightouch.** You author each message's content as variables in AI Decisioning. There's no destination template to select. This gives you full control over the request Hightouch sends, at the cost of managing the sync yourself. ## 1. Connect your destination Connect the destination you want AI Decisioning to send to. For a raw HTTP endpoint, add the [HTTP Request destination](/destinations/http-request), where you configure the base URL, authentication, and headers for your API. Store API keys and tokens in the destination's authentication or headers, not in the request body. You'll configure the request method and payload later, when you [build the delivery sync](#4-build-the-delivery-sync). ## 2. Add a custom channel A channel connects an agent's decisions to a destination. 1. Go to **AI Decisioning > Configuration > Channels**. 2. Select **Add channel**. 3. For the channel type, select **Custom** ("Send personalized decisions to any destination in our catalog"). ![New channel dropdown showing the Custom channel type](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/custom-destinations/aid-custom-select-channel.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ec03fcab70f0a513b5bab23a1c8776d9) 4. Select your destination. 5. Select an **identifier** — the user column that identifies the recipient, such as `email` or `user_id`. This becomes the `external_id` column in the model AI Decisioning writes to. 6. Select **Add channel**, then select the channel and select **Save changes**. A configured custom channel shows the destination, identifier, eligibility filters, and tags: ![A configured custom channel sending to HubSpot, with an identifier, eligibility filters, and tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/custom-destinations/aid-custom-channel-configured.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=0bd9bf3b54c521fb04e3db93b6bc191c) > [!NOTE] > > Custom channels don't apply a channel tag automatically. To enable frequency > limits, add a channel name tag to the channel. See > [Tags](/ai-decisioning/tags). ## 3. Add messages Each message defines the content an agent can send. For a custom channel, you author the content directly in Hightouch as variables. 1. Go to **AI Decisioning > Agents** and select your agent. 2. Open the **Messages** tab. 3. Add a message and select your custom channel and destination. 4. In the **Content** tab, define the message's variables (for example, `subject` and `body`) and add variants. Each variable you define appears in the delivery sync inside the `hightouch_recommendation` column. For full details on messages, variants, and tags, see [Messages](/ai-decisioning/messages). ## 4. Build the delivery sync When you enable the first message on a custom channel, AI Decisioning creates a model that holds each agent's decisions. Build a sync from that model to your destination, mapping its columns into the request your destination sends. ### Available columns The model exposes a fixed set of columns: | Column | Type | Description | | - | - | - | | `external_id` | String | The recipient identifier, taken from the identifier column you selected on the channel. | | `id` | String | A unique identifier for the decision. | | `campaign_id` | String | The campaign identifier, used for [attribution](/ai-decisioning/messages#campaign-attribution). | | `message_id` | String | The message the agent selected. | | `send_at` | Timestamp | When the agent recommends sending. | | `hightouch_recommendation` | JSON | The agent's decision, including a `variables` object with your message content. | | `hightouch_user` | JSON | The recipient's synced warehouse columns. | ### Map your message content `hightouch_recommendation` and `hightouch_user` are JSON columns. To read a value, parse the column and reference the field you want. For the HTTP Request destination, build the request body to match what your API expects. This example reads the recipient identifier, the campaign, and two message variables: ```json theme={null} {% assign parsedRecs = row['hightouch_recommendation'] | parse %} { "user_id": "{{ row['external_id'] }}", "campaign": "{{ row['campaign_id'] }}", "subject": "{{ parsedRecs['variables']['subject'] }}", "body": "{{ parsedRecs['variables']['body'] }}" } ``` Use the same pattern for any variable you defined on the message: `parsedRecs['variables']['']`. To read a synced user column, parse `hightouch_user` the same way. To hand your API the entire decision instead of individual fields, pass the `hightouch_recommendation` column through as a JSON object and transform it in your own service. For the full set of request options — method, path, authentication, headers, rate limits, batching, and error handling — see the [HTTP Request destination](/destinations/http-request). ## 5. Schedule and validate 1. Set the sync schedule to match how often your agent makes decisions. 2. Run the sync on a small test group first. Confirm your endpoint receives requests in the expected shape before enabling it broadly. 3. Enable the sync. A successful sync means your endpoint accepted the request. It doesn't confirm the message reached the user — check your destination's own delivery logs for that. > [!TIP] > > To compare agent performance against your existing campaigns, map a consistent > value into `campaign_id` and use [campaign > attribution](/ai-decisioning/messages#campaign-attribution). Attribution > matches on exact text, so `Summer_Push` and `summer_push` are treated as > different campaigns. ## Manage messages with the API You can create and update custom-channel messages, and trigger a run, with the Hightouch API. Use it to manage messages programmatically instead of in the app. The API manages messages and runs in an existing agent. Create the custom channel and its destination in the app first — the API doesn't create them. Create a message in an existing custom channel: ```bash theme={null} curl -X POST 'https://api.hightouch.com/api/v1/decision-engine/flow/{flowId}/messages' \ -H 'Authorization: Bearer YOUR_API_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "name": "Recommended offer", "channelId": "YOUR_CHANNEL_ID", "config": { "baseMessageId": "recommended-offer" }, "variables": [ { "name": "subject", "variants": [{ "value": "A gift for you" }, { "value": "Welcome back" }] } ] }' ``` Trigger a run once the agent and its messages are enabled: ```bash theme={null} curl -X POST 'https://api.hightouch.com/api/v1/decision-engine/flow/{flowId}/run' \ -H 'Authorization: Bearer YOUR_API_TOKEN' ``` A run evaluates eligibility and selects recommendations, then writes decisions to the model your sync reads from. It doesn't post directly to your endpoint. For the full API, see the [API reference](/api-reference). ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Endpoint receives no requests | The channel, message, or sync isn't enabled | Confirm the channel and message are enabled and the sync is running. Check that eligible users have a non-null identifier. | | Requests rejected with a validation error | The request body doesn't match your API's schema | Compare your body template to the shape your API expects. Confirm `hightouch_recommendation` is sent as a JSON object, not a string. | | Requests accepted but nothing is delivered | A successful request only means your endpoint accepted it | Check your destination's own delivery logs. A `2xx` response doesn't confirm delivery to the user. | | Duplicate requests | Retries or full resyncs replay rows | Enable retries only when your endpoint is idempotent. Use an idempotency key if your API supports one. | ## Next steps * [Messages](/ai-decisioning/messages) to author the content and variants your custom channel delivers. * [HTTP Request destination](/destinations/http-request) for the request options you configure on the delivery sync. * [QA guide](/ai-decisioning/qa-guide) to validate messages before you launch. * [Hightouch API reference](/api-reference) to manage messages and trigger runs programmatically. # Insights Source: https://docs.hightouch.com/ai-decisioning/insights Insights helps you measure and understand how your AI Decisioning agents perform. Explore which messages, audiences, and timing strategies drive your key outcomes and use those findings to improve results over time. ## Before you begin * [At least one running Agent](/ai-decisioning/agents) ## Overview **Insights** is the analytics hub for AI Decisioning. It shows you not only **how your agents perform**, but also **why**, so you can make data-informed creative and scheduling decisions. ![User breakdowns showing conversion rate by age group](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-user.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=57c63aebcf278edcf58358a383e6f644) Use Insights: * **After launching an agent** to track performance in real time * **During optimization** to identify top-performing segments or messages * **Before making changes** to content or targeting * **For reviews and reporting** to measure lift and summarize learnings for stakeholders > [!NOTE] > > Hightouch automatically prioritizes the most relevant charts so you can focus > on the trends that matter most. ## Navigate to Insights In the Hightouch app, go to `AI Decisioning` > [`Insights`](https://app.hightouch.com/ai/insights/?from=docs) ## Insights views Each view highlights a different aspect of campaign performance. | **View** | **Purpose** | **Example questions** | | - | - | - | | **Summary** | Provides a top-level report of results, trends, and creative takeaways. | What themes or tones are performing best right now? | | **Recommendations** | Surfaces AI-generated suggestions for improving your content mix. | What should I add, refresh, or retire next? | | **Creative Performance** | Compares message-level metrics like sends, conversions, and engagement. | Which message or subject line is driving the most conversions? | | **User Breakdowns** | Shows conversion performance by audience segment. | Which demographic or loyalty tier performs best? | | **Timing** | Displays when users are most likely to engage, using a day/time heatmap. | What send windows generate the highest conversion rates? | | **Personalization Insights** | Highlights which offers or creative types perform best for specific groups. | What incentives resonate most with younger users? | | **Personalization Matrix** | Displays a heatmap of conversion rates across user segments and creative options. | Where does personalization have the most impact? | | **Send success** | Shows delivery status by channel and highlights configuration gaps. | Are my channels successfully delivering messages? | | **Send comparison** | Compares send volume and performance across messages, channels, or time periods. | How do sends differ across messages or time periods? | ## Explore each view ### 1. Summary Get an at-a-glance view of your agent’s overall performance and top insights. ![Summary view showing key campaign patterns and takeaways](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-summary.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c2c5270d096aaf7170c6c0bdae7b28bd) The **Summary** includes: * **Performance highlights** showing top-performing creative and audience signals * **Patterns marketers should know**, based on behavior and conversion data * **Creative examples** that illustrate what’s driving performance Use this view to guide weekly reviews or summarize campaign results for your team. The **Summary** appears once the agent has a scheduled report. ### Recommendations The **Recommendations** view surfaces AI-generated suggestions for improving your content mix, based on how your messages and variants are performing. Suggestions are grouped into categories such as expanding proven winners, filling coverage gaps, refreshing fatiguing content, and retiring underperformers. Review each recommendation and decide whether to act on it. Hightouch doesn't change your messages automatically. ### 2. Creative Performance Compare all message variants side by side across your key performance metrics. ![Creative performance table comparing message performance](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-creative.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=99b7ec19f3cc3fbd39d6325789971622) | **What you might see** | **What it means** | **What to do next** | | - | - | - | | High sends, low conversions | Overexposed audience or weak offer | Refresh content or narrow targeting | | High clicks, low conversions | Link or landing page misalignment | QA destination or adjust CTA | | High unsubscribes | Message fatigue or off-tone content | Pause or rewrite underperforming messages | > [!TIP] > > Sort the table by your main goal (for example, `Second purchase`) to identify > which creative has the strongest impact. ### 3. User Breakdowns Understand which user segments are driving conversions and which are underperforming. Breakdowns include attributes like age, region, loyalty tier, and device type. ![User breakdowns showing conversion rate by age group](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-user.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=57c63aebcf278edcf58358a383e6f644) | **What you might see** | **What it means** | **What to do next** | | - | - | - | | Gen Z users underperform | Tone or visuals may not resonate | Test shorter, more visual creative | | Loyalty users convert 2× more | Offer relevance is high | Expand similar campaigns to other tiers | | Mobile engagement is lower | Template or UX issue | Review layout and links on mobile | > [!NOTE] > > Charts are sorted automatically by AI to surface the most relevant differences > first. ### 4. Personalization Insights Discover which creative elements perform best for specific user segments. This view helps you understand how **audience attributes** and **creative choices** interact to drive conversions. ![Personalization dimension dropdowns](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-personalization-dimensions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=cfcfc41d0a7c8dc4cf6d5dc9d87abe10) At the top of the view, select: * An **Outcome name** to define *what success looks like* (for example, `Second purchase`) * **Creative dimensions** to compare *what* performs best (such as subject lines, incentive types, or tags) * **User dimensions** to compare *who* it performs best for (such as age buckets, loyalty tiers, or device types) Insights are automatically sorted to surface the most meaningful performance differences for the selected configuration. | **What you might see** | **What it means** | **What to do next** | | - | - | - | | Discounts lift users aged 18–24 | Price sensitivity | Prioritize discounts for this segment | | Loyalty users respond to bundles | Value-driven behavior | Feature multi-product or tiered offers | | Push outperforms SMS for high churn-risk users | Channel preference | Shift allocation toward push | > [!TIP] > > Use personalization insights to inform message tags, variant strategy, and > audience splits in the [Messages](/ai-decisioning/agents#messages) tab in > Agents. ### 5. Timing Analyze when users are most likely to convert or engage, visualized as a heatmap by day and time of day. ![Timing heatmap showing conversion rate by day and time](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-timing.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f2cc4a1ac86d5c75f762904b972b5c1b) | **What you might see** | **What it means** | **What to do next** | | - | - | - | | Evenings convert best midweek | Post-work engagement | Shift sends later in the day | | Weekend conversion spikes | Browsing or planning behavior | Test Saturday or Sunday reminders | | Monday performance drops | Inbox saturation | Schedule key sends later in the week | > [!TIP] > > Use **Timing** results to refine [Scheduling and quiet > hours](/ai-decisioning/agents#step-3-optional-configure-scheduling) for your > agent. ### 6. Personalization Matrix The **Personalization Matrix** displays a heatmap of conversion rates across user segments and creative options, highlighting where personalization has the most impact. ![Personalization Matrix heatmap showing conversion rates by incentive type and age bucket](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-personalization-matrix.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=0e99e4ddbe05c954ab00d1845d2ce363) At the top of the view, select: * **Outcome name**: The goal to measure (for example, `Purchases`) * **Creative dimension**: The creative variable to compare (for example, `Incentive Type`) * **User dimension**: The user attribute to segment by (for example, `Age Bucket`) The heatmap shows conversion rates at each intersection, colored by intensity. Toggle between **Conversion rates** and **Interaction effects** to see raw performance or the incremental impact of personalization. | **What you might see** | **What it means** | **What to do next** | | - | - | - | | `fixed_discount` converts 5.96% for 25–34 year olds but 1.59% for 55–64 | Strong age-based preference for discount type | Personalize incentive by age segment | | `free_gift` performs consistently across all age groups | Broad appeal, low personalization value | Use as a safe default when segment data is limited | | `pct_discount` underperforms across most segments | Weak creative option overall | Consider retiring or reworking the variant | > [!TIP] > > Use the Personalization Matrix to identify which creative-audience > combinations to prioritize, and feed those insights back into your [variant > strategy](/ai-decisioning/messages#variants) and [tags](/ai-decisioning/tags). ### 7. Send success > [!NOTE] > > Send event tracking must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. The **Send success** view shows whether your channels are successfully delivering messages. It displays each channel connected to the agent, its configuration status, and message-level match rates between recommendations and confirmed sends. ![Send success view showing channel delivery status](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-send-success.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a144de587c1cefedc436e1d1c171eeaf) > [!WARNING] > > All send data on this page comes from the send event table configured in your > schema. If that table is incomplete — for example, missing your AID campaigns > or not kept up to date — match rates and send counts will appear lower than > expected. Always verify your send event table is correctly defined before > drawing conclusions from these charts. A **channel configuration** card at the top of the page shows how each enabled channel is set up — its destination, send event model, and campaign ID column. If a channel is missing a send event or campaign ID column, a warning icon appears next to it. These are the most common reasons match rate looks low or attribution is incomplete. The **Match rate by message** grid at the bottom of the page is interactive. You can filter by channel type, sort by value to find best- or worst-performing messages, click a message name to open it directly in Hightouch, or download a CSV for offline analysis. Each chart on the page displays its numerator and denominator (for example, "Matched sends / Recommendations") underneath the title. Hover any data point to see the absolute counts behind the ratio. | **What you might see** | **What it means** | **What to do next** | | - | - | - | | `Not configured` warning on a channel | Send events are not linked to this channel | Set up [send event tracking](/ai-decisioning/configuration#configure-send-tracking) for the channel | | Low match rate across all messages | Send event table may be incomplete or outdated | Verify the send event table includes your AID campaigns | | Low match rate on a single message | That message's campaign ID may not be attributed correctly | Check the campaign ID column in your channel's attribution config | > [!NOTE] > > Send success tracking requires send events to be linked to your channels. See > [Send event tracking](/ai-decisioning/configuration#configure-send-tracking) > for setup instructions. Without this, send success and send comparison data > will not populate. ### 8. Send comparison > [!NOTE] > > Send event tracking must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. The **Send comparison** view lets you compare send patterns between treatment and customer-managed groups. Use it to confirm the experiment is shifting volume where it should and to spot channel- or timing-level differences. Send comparison includes charts for weekly sends per user broken down by experiment group and channel type, by experiment group and campaign group (this agent, other agents, and customer managed), and heatmaps of send count by time of day and day of week. Each heatmap cell shows its share of the group's total so you can spot whether AI Decisioning is shifting send timing. | **What you might see** | **What it means** | **What to do next** | | - | - | - | | Treatment sends more on push, less on email | AI Decisioning is reallocating channel mix | Review whether the shift aligns with your channel strategy | | Send timing differs between groups | AI Decisioning is optimizing delivery windows | Compare with [Timing insights](#5-timing) to confirm the pattern | | Volume is flat across experiment groups | The experiment may not be shifting behavior yet | Check that the agent has had enough time to learn and that campaign IDs are configured correctly | > [!NOTE] > > Like Send success, the Send comparison view requires send events to be > configured on your channels. See [Send event > tracking](/ai-decisioning/configuration#configure-send-tracking) for setup > instructions. ## Apply insights to improve performance Once you’ve reviewed your results, use them to guide your next optimization cycle. | **If you see...** | **Then...** | | - | - | | High lift for a segment | Create a dedicated agent or audience to scale it | | Flat or declining conversions | Revisit your goals, tags, or creative mix | | Frequent “bad” outcomes (e.g., unsubscribes) | Adjust Smart suppression or reduce frequency | | Specific time windows outperforming others | Update Scheduling settings to match user behavior | > [!TIP] > > Combine insights from **User breakdowns**, **Creative performance**, > **Timing**, and the **Personalization Matrix** to identify your most impactful > opportunities. ## Example weekly optimization checklist ✔️ Review **Summary** for top and bottom performers\ ✔️ Check unsubscribe and fatigue signals in **Creative performance**\ ✔️ Compare lift vs. holdout for each goal or segment\ ✔️ Identify 1–2 test ideas (e.g., new variant or timing window)\ ✔️ Check **Send success** to confirm channels are delivering correctly\ ✔️ Review **Send comparison** to verify experiment groups are shifting volume as expected\ ✔️ Share findings with your team to inform future content and campaign planning # Inspector Source: https://docs.hightouch.com/ai-decisioning/inspector Inspector helps you understand how messages are delivered to individual users. Use it to QA campaigns, troubleshoot delivery behavior, and explain outcomes with confidence. ## Before you begin * [At least one Agent](/ai-decisioning/agents) ## Overview **Inspector** (labeled **Experience inspector** in the app) helps you understand how messages are delivered to an individual user. Instead of aggregated metrics, Inspector shows *exactly what happened* for a specific person—step by step—across one or more agents. This makes it easy to validate campaign behavior and explain outcomes with confidence. In Inspector, you can review a user’s **full journey across agents**, including: * When the user becomes eligible for an agent * Which messages were evaluated and which were sent * When sends were skipped, including by smart suppression * Which content and variants were selected Inspector is most useful during **campaign setup, QA, troubleshooting, and reviews**, when you need to confirm that agents are behaving as expected for real users. It complements [**Insights**](/ai-decisioning/insights), which focuses on performance trends and lift across many users, by providing a clear, user-level explanation of delivery behavior. ## Navigate to Inspector In the Hightouch app, go to: `AI Decisioning` > [`Inspector`](https://app.hightouch.com/ai/inspector?from=docs) From here, you can: * Filter by **All agents** or a specific agent * Search for a user * Step forward or backward between users * Review each user’s experience over time ![Inspector timeline view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/inspector/aid-inspector.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=322caa7eeb08a147bf9764bdd398979b) ## Review a user’s experience Inspector is organized into three main areas that work together to explain delivery behavior. ### User attributes The left panel shows the **full set of user attributes available to agents**. These attributes help explain: * Eligibility and agent entry * Message selection and personalization * Suppression or exit behavior This view represents the broader user context agents can use when evaluating decisions across the user’s journey. ![User attributes list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/inspector/aid-inspector-user-attributes.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b108265b7f535fe5d54f53345b0c2f88) > [!NOTE] > > The attributes shown here represent **everything the agent knows** about the > user. Not every attribute directly influences every message decision. ### Experience timeline The center panel shows a chronological timeline of the user’s journey across agents. You may see events such as: * **Eligible for agent** * **Wait periods** between evaluations * **Messages sent**, including channel and agent * **Skipped sends**, including smart suppression * **Exited agent** events * **Outcome events**, such as clicks or purchases (when available) This timeline makes it easy to understand both **what happened** and **what didn’t happen**, in context. ![Experience timeline](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/inspector/aid-inspector-experience-timeline.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=dccb30865e40669ddf514ab5d1532d39) ### Message details To open the message details drawer, open the actions menu on a message card and select **View message** or **View data payload**, or click the message thumbnail. This view explains **what was sent** and shows the **data behind it**. ![View message button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/inspector/aid-inspector-view-message.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=13aff047de5f78b275a89f6e7622da32) The drawer includes two tabs: | Tab | Purpose | | - | - | | `Preview` | View the rendered message content as delivered to the user (when supported). | | `Data` | Inspect the payload sent to the destination, including variables and metadata. | Use these views together to validate content and confirm the variables and personalization sent to the destination. ## When to use Inspector Use Inspector when you need a **clear, user-level explanation** of how an agent behaved for a specific person. Inspector is best suited for questions like: * *Why did this user receive this message?* * *Why was a send skipped or suppressed?* * *What personalization and variables were sent with the message?* * *How did this user’s experience unfold across agents?* Common scenarios include: | Scenario | How Inspector helps | | - | - | | QA a new agent | Preview upcoming messages and confirm eligibility before launch | | Troubleshoot skipped sends | Identify smart suppression, wait periods, or exit conditions | | Validate personalization | Confirm the variables and content sent to the destination | | Review user journeys | See how experiences unfold across multiple agents | | Stakeholder reviews | Walk through real user examples to explain outcomes | For performance trends, lift analysis, and insights across many users, use [Insights](/ai-decisioning/insights). ## Next steps * [Agents](/ai-decisioning/agents) to configure audiences, messages, and goals. * [QA guide](/ai-decisioning/qa-guide) for channel-specific checklists for email, SMS, and push. * [Insights](/ai-decisioning/insights) to analyze performance and lift. * Smart suppression to control low-impact sends. # Iterable integration with AI Decisioning Source: https://docs.hightouch.com/ai-decisioning/iterable Connect Iterable to AI Decisioning so agents can deliver personalized emails, SMS, push notifications, and in-app messages through your existing Iterable Triggered Campaigns. ## Before you begin * [Prepare data for AID](/ai-decisioning/prepare-data) ## Overview Delivering relevant and timely customer experiences in Iterable requires up-to-date, contextual data. By integrating Hightouch's AI Decisioning (AID) with Iterable, you can: * Automatically trigger Iterable campaigns based on predictions and behaviors surfaced by AID Agents * Personalize message content using dynamic variables from your data warehouse * Centralize targeting and decision logic in Hightouch, while using Iterable to handle message delivery ## 1. Set up Iterable as a destination Follow the [destination setup guide](/destinations/iterable) up to **Sync Configuration**. Once connected, Iterable will be available as a destination in AI Decisioning. ## 2. Add channels in AI Decisioning Once Iterable is set up as a destination, you can add **channels**. Channels define how Hightouch sends messages to Iterable via Triggered Campaigns. ### Set up a channel 1. Go to **AI Decisioning > Configuration > Channels**. 2. Select **Add channel**. ![Add channel button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-add-channel.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4a79d00ecf927d086bdc49560ec1163e) 3. Choose a channel type: * **Email** – for triggered email sends * **SMS** – for triggered text messages * **Push** – for mobile push notifications * **In-App** – for in-app messaging (popups, inbox cards, etc.) 4. Select **Iterable** as the destination. 5. Under **Campaign setup**, choose how Hightouch connects to Iterable: * **Create from template** – select a template, and Hightouch creates an API-triggered campaign from it. * **Existing campaign** – select an existing API-triggered campaign directly. 6. Under **Identifier type**, choose how to match users: * **Email** – match by email address * **User ID** – match by unique ID 7. Choose the identifier field from your model (for example, `user.email` or `user.id`). 8. Select **Add channel**, then **Save changes**. ![New channel modal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-add-channel-iterable.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e77b03af0f3472efe3c115abeaa2cf4d) ### Identifier type comparison | Identifier | Description | Use when | | - | - | - | | Email | Matches users based on email address | Campaigns primarily use email for targeting | | User ID | Matches users using their unique ID | Source data uses internal IDs or email isn't guaranteed | Both identifier types support all channel types (Email, SMS, Push, and In-App). ## 3. Add messages After you add channels in AI Decisioning, you can add **messages** to your agents. Each message connects an agent's decision to an Iterable Triggered Campaign. For full details on message configuration, variants, and tags, see [Messages](/ai-decisioning/messages). ### Add a message from Iterable 1. Go to **AI Decisioning > Agents** and select your agent. 2. Open the **Messages** tab. 3. Select **Add messages**, then select **Add messages individually**. 4. Select your configured Iterable **channel and destination** tile (for example, **Email - Iterable**). 5. Select an Iterable template (or an existing campaign, matching your channel's **Campaign setup**). 6. Enter a **message name** (for example, `Cart Abandonment SMS`) and select **Add messages**. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-iterable-add-message.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3b54c2c4b783d33219b9da03a21b9468) > [!NOTE] > > When your channel uses **Create from template**, Hightouch **clones** the > selected Iterable template and creates a new Triggered Campaign, then sends > through that new campaign via API — not the original template. See [How > Iterable templates and campaigns work with > Hightouch](#how-iterable-templates-and-campaigns-work-with-hightouch) for > details. You can repeat this process for each channel type: | Channel type | Campaign type | Description | | - | - | - | | Email | Triggered | Real-time personalized emails | | SMS | Triggered | Time-sensitive text alerts | | Push | Triggered | Native app push notifications | | In-App | Triggered | Contextual popups and messages | ### Test a message 1. Open the message and go to the **Content** tab. 2. Under **Optimized content**, confirm your variants are configured. If your message uses [dynamic variables](#use-variables-in-iterable), set values for testing. 3. In the **Preview** panel, verify the rendered message looks correct. 4. Select **Send test** to send the message to a test user in Iterable. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-iterable-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e5b12f43599a3f55212c8334ac67e39b) ## How Iterable templates and campaigns work with Hightouch When your channel uses **Create from template**, you're not sending the base template directly. Instead, Hightouch **clones** the template to create a new Triggered Campaign. If your channel uses **Existing campaign**, Hightouch sends through the campaign you selected and doesn't clone anything. ### What happens behind the scenes 1. You select an existing Iterable template (by Template ID). 2. When you select **Add messages**, Hightouch: * Clones the template * Creates a new **Campaign ID** ![New campaign](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-campaign-id-ht.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4ac555b467c2b96da211b0098de2fd52) 3. Hightouch uses the **new campaign ID** to send messages via API—not the original template. ![Campaign ID and Template ID in Iterable UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-iterable-campaign-template-id.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=627b9a21d6a2ef6236d950566189bbd5) ### Why this matters * Hightouch sends through the **new campaign**, not the original. * To update message content, edit the new campaign version—not the base template. ### How to find the right campaign * Open the **Content** tab in the message: **AI Decisioning > Agents > \[Select Agent] > Messages > \[Select Message] > Content** * Select the link next to **Base content** to open the Iterable campaign. ![Base content link](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-iterable-base-content-link.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=9027c63fc56c0bf907baafa0d2b93dd9) ## 4. Configure Iterable Triggered Campaigns for AID What you set up in Iterable depends on your channel's **Campaign setup**. ### Create from template Build and save the Iterable template you want to use. Hightouch creates the API-triggered campaign for you when you add the message — you don't need to create a campaign in Iterable. ### Existing campaign 1. In Iterable, go to **Messaging > Campaigns**. 2. Select **New Campaign > Triggered Campaign**. 3. Select the message type, design your template, and publish the campaign. 4. In Hightouch, select that campaign when [adding a message](#3-add-messages). After you add the message, [test it](#test-a-message) to confirm delivery. ## 5. Use variables in Iterable templates Hightouch variables allow you to personalize Iterable messages using live warehouse data, any variable you've defined within the message such as subject line variations, or different content blocks in your Iterable library. ### Access variables 1. Open a message in Hightouch and go to the **Content** tab. 2. Under **Optimized content**, expand a content type (for example, **subject** or **body**) and add your variants. 3. Select the `...` menu on a content type and select **Copy code snippet** to get the variable code. 4. In Iterable, paste the variable tag into the corresponding field in your message template. ![copy code snippet UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/iterable/aid-iterable-copy-code.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=809a8b1089dff5640a7b45cc604780d0) ### Important notes * Variables are fully supported in Triggered Campaigns. * Make sure your Iterable template references the correct variable syntax from the code snippet. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Message fails to send | API errors or misconfigured destination | Check Hightouch logs for API errors. | | Test user not receiving messages | Identifier mismatch | Verify the identifier (email or user ID) matches a record in Iterable. | | Campaign sends not triggering | Campaign not published or misconfigured | Confirm the campaign is live and triggerable in Iterable. | | Variables not rendering | Incorrect syntax or missing field mapping | Double-check variable syntax from **Copy code snippet** and field mapping. | ## Next steps * [Messages](/ai-decisioning/messages) to create and manage the message variants each agent sends through Iterable. * [QA guide](/ai-decisioning/qa-guide) to validate messages before you launch. * [Agents](/ai-decisioning/agents) to configure the agents that decide which messages to send. * [Insights](/ai-decisioning/insights) to measure how your agents and messages perform. # Messages Source: https://docs.hightouch.com/ai-decisioning/messages Add Messages to optimize content from your destination templates by defining variants and letting agents control which version is sent, when, and to whom. ## Before you begin * At least one [Agent](/ai-decisioning/agents) * A connected destination (Braze, Iterable, or Salesforce Marketing Cloud) ## Overview **Messages** define the creative variations an [agent](/ai-decisioning/agents) can send. Each message is sourced from a destination (such as Braze or Iterable) and can include multiple variants for experimentation. Agents continuously evaluate messages to determine which variant, timing, and channel perform best for each user. ## Add a message 1. Open an agent and go to the `Messages` tab. 2. Click `Add messages`, then select **Add messages individually**. 3. In the **Add messages** window: 1. Select a **channel and destination**. * A **channel** defines how a message is delivered (for example, email or push), while the **destination** defines where the content is managed (such as Braze or Iterable). 2. Select the destination-specific identifier: * **Braze**: Choose a campaign * **Iterable**: Choose a template * **Salesforce Marketing Cloud**: Choose a template (Salesforce Marketing Cloud template), a journey (event-triggered), or an automation (freeform) * **Custom (S3)**: Enter a resource identifier. See [Custom destinations](/ai-decisioning/custom-destinations) for the full setup, including how to build the delivery sync. 3. Enter a **message name** to identify the message in Hightouch. 4. Click `Add messages`. The message is added to the agent and appears in the Messages list. ![Add message button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-add-message.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7077aef7cc4067926d29f07eeaa1997d) > [!TIP] > > Use message names that describe the intent or use case (for example, > `Cross-sell – accessories email`) to make messages easier to find and analyze > later. ### View and manage messages The `Messages` page provides a centralized view of message configuration and performance for an agent. From this view, you can: * Review **message status**, such as `Enabled` or `Draft` * See the number of **variants** per message * View the **audience size** — the estimated number of eligible users for each message * View applied **tags** * Search messages by **name** * Filter messages by **status** The Messages list has three view toggles that change which columns the table shows, without opening any individual message: | View | What the table shows | | - | - | | `Configuration` | Message settings across the agent, including tags, offers, and advanced delivery guardrails (send limits, timeline, delivery windows, eligibility, and campaign attribution). | | `Usage` | How often each message is eligible to send and how it is being evaluated by the agent. | | `Performance` | Delivery and outcome metrics that show how each message contributes to agent goals. | ![Configuration view of the Messages list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-messages-configuration.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f327c0846dc44a45db91963271145e89) ![Usage view of the Messages list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-messages-usage.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=cdb8506ffe876997247278600b46dab9) ![Performance view of the Messages list](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-messages-performance.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=de2f412062430d6e02b477f2fdd0509f) Switch between these views to compare messages by setup, eligibility, or performance. Select an individual message to open its own tabs: `Overview`, `Content`, and `Configuration`. The `Content` tab is where you manage variants and optimized content, and the `Configuration` tab holds message-level settings and delivery guardrails. ## Message content Each message includes two parts: **base content** and **optimized content**. ![Content tab in Messages](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-message-structure.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=fc8f74f15133f3b1a563c83f85e73be0) ### Base content **Base content** is the underlying message content defined in your marketing destination. Examples include: * An email built in Iterable, Braze, or Salesforce Marketing Cloud * A push or in-app message defined in your destination * Destination-managed layout, variables, or logic ![Base content](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-base-content.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7e53c604a5f83146094684d4f953c3e3) When you add a message, you select the destination and the campaign, template, or send to use. That destination-managed content becomes the base content for the message. > [!TIP] > > AI Decisioning does not modify your base content. It uses your content as the > foundation for optimized content and variants. ### Optimized content **Optimized content** includes the specific fields within a message that agents can vary and learn from over time. Common optimized content types include: * Subject * Preheader * Call to action (CTA) * Other supported message fields Each optimized content type can include multiple variants, which are evaluated against your agent’s goals. ![Optimized content](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-optimized-content.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5dd07b2c372e71d4afc5f060e7c86ca4) ## Variants A **variant** is one version of an optimized content type (for example, a subject line option). Variants are the individual options that agents compare and learn from over time. Variants differ from traditional A/B tests: * Traffic allocation adapts over time * There is no fixed test window * No manual winner selection is required ## Add and manage variants Variants are added inside an individual message, in the `Content` tab. 1. Open an agent and go to the `Messages` tab. 2. Select a message. 3. Open the `Content` tab. 4. Expand an optimized content type (for example, `Subject`). 5. Click `Add variant`. 6. Enter the variant content. You can add multiple variants to the same optimized content type. ![Add variant](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-add-variant.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=373c7c7d79db7226449deb6d24749c66) > [!TIP] > > Start with a small number of clear variants that differ meaningfully in tone, > framing, or offer. ## Variant-level controls Each variant includes controls that determine when it is eligible to send. To manage variant-level settings, open a message and go to the `Content` tab. Under **Optimized content**, click `Edit tags and rules`. From here, you can add or update: * Tags * Eligibility filters * Active time window * Send limits ![Edit tags and rules button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-edit-tags-rules.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=da3dcd8fe3e152d059edc85ae7f20af4) ![Tags and rules page](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-tags-rules-page.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=dc775aecab2668ac18ef794499fdce74) ### Eligibility filters Eligibility filters limit a variant to specific users. Examples: * Show a loyalty-focused subject line only to returning customers * Restrict a discount variant to lapsed users Eligibility filters apply at the **variant level**, not the message level. ![Eligibility filters](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-audience-rules.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=83621818895cc7cc391a74d8213a3071) ### Active time window The active time window controls when a variant is active. Use an active time window to: * Run seasonal or time-bound messaging * Automatically retire expired content * Stage future variants ahead of launch Expired variants remain visible but are no longer eligible to send. ![Active time window](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-date-rules.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8d762b4c633a1be99426ffad20ef3e09) ### Send limits Send limits control how often the same variant can be sent to a single user. Available options include: * **No limit** * **Static** (for example, once per user) * **Time window** (for example, once every 30 days) Send limits apply to variants individually, not to the entire message. ![Send limits](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-send-limits.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6ca7b5542c56e3b7e49f9ee1093f79a1) ### Tags Tags describe the intent or attributes of a variant, such as: * Tone (`friendly`, `urgent`) * Offer type (`discount`, `free gift`) * Value proposition (`convenience`, `exclusivity`) Tags help agents group and analyze content and are used in [Content Analysis](/ai-decisioning/content-analysis) and [Insights](/ai-decisioning/insights). ![Tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-edit-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=876c5d299c0c9476788d30d46648c642) See [Tags](/ai-decisioning/tags) for guidance on tagging strategy. > [!NOTE] > > AI Decisioning only compares variants that are eligible at the time of send. > Eligibility filters, active time windows, and send limits determine which > variants are considered. ## Localize message content If your agent's [localization](/ai-decisioning/agents#localization) is enabled, you can translate individual message variants so each user receives content in their own language. You provide the translations — Hightouch doesn't generate them — and AI Decisioning sends the one that matches each user's locale. > [!NOTE] > > Localizing message content requires localization to be enabled first, at the > agent level. See [Enable localization](/ai-decisioning/agents#localization). ### Enable localization on a content type 1. Open a message and go to the `Content` tab. 2. Next to an optimized content type (for example, `subject`), select `···`. 3. Toggle on `Use localization`. ![Use localization toggle in the options menu next to a content type](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-use-localization-toggle.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=48e4a30603dcd688fae857c704df765c) You can mix localized and non-localized content types on the same message. Leave fixed values that don't need translation, such as a promo code or product ID, non-localized. ### Add translations for each variant Once localization is on for a content type, add a translation for every configured locale on each variant. * To translate one variant, select the globe icon next to it to open the **Localization** dialog, enter a value for each locale, and select `Apply`. * To review or edit every variant in one language at a time, use the locale dropdown next to **Optimized content** to switch the table to that language. ![Localization dialog with a translation field for each configured locale, including a non-ISO locale](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-localization-dialog.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=930b92072c868d38f223e723f6ce1dc4) > [!TIP] > > Use [CSV bulk-edit](#bulk-edit-translations-with-csv) to add translations for > many variants at once instead of editing them one by one. ### Check translation status Each localized content type shows a badge summarizing whether its variants are fully translated, and each variant shows its own badge — hover it to see which locales still need a value. ![Locale dropdown and status badge showing variants missing a translation](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-localization-status.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b1821315193ea033d656483fbc50bbac) ![Variant badges showing translation status](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-translation-badges.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bf5e383f0bcfbba50cdd8d7cd24cfb55) A **Localization incomplete** banner also appears at the top of the message until every localized variant has a translation for every locale. ### Bulk-edit translations with CSV Translations use the same [CSV upload workflow](#bulk-upload-and-export-messages-csv) as other message content. When localization is enabled, the CSV includes one column per configured locale, and the import review step shows a per-language diff for each row before you save. ### Test translations before launch Use `Send test` on a message and select a sample user and a locale. The preview reflects exactly what AI Decisioning sends, so you can confirm each translation independently before launch. ![Localization incomplete banner at the top of the message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-messages-localization-status.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b1821315193ea033d656483fbc50bbac) ## Manage messages at scale AI Decisioning supports two bulk workflows for managing messages: * [**CSV upload**](#bulk-upload-and-export-messages-csv) for content and metadata updates * [**Bulk actions**](#apply-message-guardrails-in-bulk) for applying message guardrails Use CSV upload for structured content changes and bulk actions for delivery controls. ### Bulk upload and export messages (CSV) Use bulk CSV upload to add or update messages in an agent at scale. This workflow is best for structured, repeatable updates that are easier to manage in a spreadsheet. #### What you can manage with CSV upload Using a CSV file, you can: * Add new messages to an agent * Update existing messages * Add or modify: * Message content * Variables and variable options * Message- and variant-level tags * [Translations](#localize-message-content) for localized content types — the CSV includes one column per configured locale #### What CSV upload does not support CSV upload does not support message guardrails, including: * Eligibility filters * Send limits * Campaign attribution Apply these settings in the product UI using [bulk actions](#apply-message-guardrails-in-bulk). #### Upload messages with CSV 1. Go to `AI Decisioning > Agents` and select an agent. 2. Open the `Messages` tab. 3. Click `Add messages`, then select `Bulk upload with CSV`. 4. Download the provided CSV template. 5. Edit the template with your updates. 6. Upload the completed CSV to apply changes. > [!NOTE] > > You must use the provided CSV template. Uploads will fail if required columns > are missing or renamed. ![Bulk upload button in Messages UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-messages-bulk-upload.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=830e48b64bce5cfd1a5b446cc6e647f9) ### Apply message guardrails in bulk Use bulk actions to apply message-level guardrails to multiple messages at once. #### Supported bulk guardrails You can apply: * Eligibility filters * Send limits * Campaign attribution values #### Apply guardrails in bulk 1. Go to `AI Decisioning > Agents` and select an agent. 2. Open the `Messages` tab. 3. Select one or more messages. 4. Click `Actions`. 5. Choose one of the following: * `Add eligibility filters` * `Manage send limits` * `Add campaign attribution` 6. Configure the settings and apply them. ![Bulk add eligibility filters in Messages UI](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/agents/aid-bulk-add-eligibility-filters.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a7a25c2cfac8190ac54a98fe55105aec) When applying eligibility filters in bulk, the **Update mode** setting controls how the new filters interact with existing values: * **Add to existing guardrails** — new conditions are added alongside any existing guardrails on each selected message. Existing values are preserved. * **Replace existing guardrails** — overwrites existing guardrail settings on each selected message with the new values. ![Bulk eligibility guardrails drawer showing Update mode with Add to existing and Replace existing options](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/bulk-eligibility-guardrails.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=49f0dc8c905eb28b16648546b33157ea) > [!NOTE] > > Bulk actions update message configuration only. They do not change message > content, variants, or tags. ## Message configuration The `Configuration` tab contains message-level settings that control tagging, offer attribution, and advanced delivery guardrails. It also displays the goals inherited from the parent agent. To access these settings, open an agent, go to the `Messages` tab, select a message, and open the `Configuration` tab. ### Tags Tags are key-value pairs that describe a message's intent or attributes, such as `motivator = efficiency` or `value_proposition = convenience`. Tags can be added manually or generated automatically using the **Generate tags with AI** button, which analyzes the message content and suggests relevant tags. Message-level tags apply to the message as a whole and are separate from [variant-level tags](#tags-1). Both are used in [Content Analysis](/ai-decisioning/content-analysis) and [Insights](/ai-decisioning/insights). ![Message-level tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=683108690913a203f3ad0e1ef4c0b673) See [Tags](/ai-decisioning/tags) for guidance on tagging strategy. ### Offers Attach an offer to have the agent factor the message's cost and value into its decisions. Messages with higher expected values (value minus cost, weighted by conversion likelihood) are more likely to be selected. Each message can have at most one attached offer, and not all messages require one. To attach an offer, click `Add offer` in the **Offer** section and configure the following: * **Name**: A short, human-readable name (for example, `$10 off first order`). * **Description** *(optional)*: Additional context about the offer. * **External ID** *(optional)*: A stable identifier in your source system. Required for CSV upserts to match existing offers. * **Tags** *(optional)*: Key-value attributes to help organize and categorize offers. * **Offer type**: **Static** offers apply the same cost to every user. **Column** offers read per-user values from warehouse columns. * **Cost value**: A fixed cost associated with each conversion (for example, \$10 off). * **Cost multiplier**: A discount rate applied to each conversion's value (for example, `0.2` = 20% discount). Cost value and cost multiplier are independent. Use either, both, or neither. Leave both at zero for a metadata-only offer. ![Offer section in message configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-offers.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6b063618612d17d8db8a92a8da5d9af9) ![Add offer dialog](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-add-offer.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2f076c89604d5cc3e5a4e9865a70a1b0) ### Goals The **Goals** section displays the goals inherited from the parent agent, along with a performance rating for each goal (for example, `Best`, `Very good`, `Good`, `Worst`). These ratings reflect how well the message contributes to each goal relative to other messages in the agent. Goals are configured at the agent level and cannot be edited from the message Configuration tab. See [Agents](/ai-decisioning/agents) for details on goal configuration. ![Goals in message configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-goals.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=1b74eb4285020e93be12f7ad24f7303a) ### Advanced settings The **Advanced** section contains delivery guardrails that control how, when, and to whom a message is sent. Expand the **Advanced** section to access these settings. #### Send limits Send limits control the maximum number of times a message can be sent to the same user. Available options include: * **No limit**: The message can be sent without restriction. * **Static**: A fixed cap (for example, send at most 3 times per user). * **Time window**: A rolling limit (for example, once every 30 days). * **Minimum other messages in between**: Requires a set number of other messages to be sent before this message can be sent again. Message-level send limits apply to all variants of the message. They are separate from [variant-level send limits](#send-limits), which apply to individual variants. ![Send limits in advanced settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-send-limit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e772a0ef317285d533b980049dcd90f9) #### Timeline Set a start and end date for a message. Use timeline settings to stage messages ahead of a launch or automatically stop a message after a campaign ends. If no dates are set, the message is eligible to send as long as it is enabled. ![Timeline in advanced settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-timeline.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2bd253dc9e42d3c01bb53dfdfcb7a2c9) #### Delivery windows Delivery windows let you restrict when a message can be sent by specifying allowed days and time slots. This gives you direct control over message timing without relying on complex channel or schedule configurations. To set a delivery window: 1. Toggle on **Delivery windows**. 2. Select the days and time blocks during which the message is allowed to send. Time blocks that are not selected are blocked, meaning the agent will not send the message during those windows. ![Delivery windows](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-delivery-windows.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=57aef86406058a83cdeee26a3db8e326) > [!TIP] > > Use delivery windows to send promotional emails only during morning hours or > restrict campaigns to specific days, such as midweek-only sends. #### Eligibility Eligibility filters control which users can receive the message. The base eligibility filter is inherited from the agent and cannot be edited at the message level. You can add additional filters to further restrict the audience. Click `Calculate size` to estimate how many users match the current eligibility criteria. ![Eligibility in advanced settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=63253f113e04ca20ecc799df7192f8e6) #### Campaign attribution Add additional campaign IDs for outcome attribution purposes. This lets you associate message performance with specific campaigns in your destination, even if the message is used across multiple campaigns. ![Campaign attribution in advanced settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/messages/aid-configuration-campaign-attribution.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bf21f6c363508e9cc1b9f3d882ddcb5e) > [!NOTE] > > For a step-by-step checklist to verify all Configuration tab settings before > launch, see the [QA guide](/ai-decisioning/qa-guide). ## How Messages connect to Content Analysis As your agent runs, message and variant data feeds into **Content analysis and suggestions**, where you can: * Review content similarity before launch * Identify overlapping or redundant variants * Understand which themes or tones perform best * Decide when to add, refresh, or retire content See [Content analysis and suggestions](/ai-decisioning/content-analysis) for guidance. ## Next steps * [Agents](/ai-decisioning/agents) to configure the audience, goals, and scheduling that messages inherit. * [Tags](/ai-decisioning/tags) to plan a tagging strategy for messages and variants. * [Content analysis and suggestions](/ai-decisioning/content-analysis) to review content similarity and performance across messages. * [QA guide](/ai-decisioning/qa-guide) to validate messages before launch. * [Insights](/ai-decisioning/insights) to measure how messages and variants perform. # AI Decisioning overview Source: https://docs.hightouch.com/ai-decisioning/overview AI Decisioning (AID) automates campaign decisions at the individual user level. You define agents that combine an audience, goals, and messages — then AID learns which message, channel, and timing perform best for each person. ## Overview Most lifecycle campaigns are built with static rules: if a user does X, send message Y. That can work for simple campaigns, but it becomes harder to manage as audiences, messages, and channels increase. AI Decisioning uses event data to learn which messages, channels, and timing work best for each user. Instead of writing rules for every scenario, you define what success looks like — purchases, sign-ups, engagement — and AID uses performance data to choose the message, channel, and timing for each person. The core unit is an **agent**. Each agent combines everything a campaign needs to learn and improve: an audience, goals, messages, scheduling rules, and guardrails. Once running, the agent uses event data as feedback and continuously adjusts which messages, channels, and timing it uses. > [!NOTE] > > Agents operate entirely within the inputs and rules you define. They don't create new content or act outside your configuration. > [!NOTE] > > [**Explore the interactive architecture diagram**](https://architecture.hightouch.com/?from=docs\&product=ai-decisioning\&utm_source=hightouch-docs\&utm_medium=referral\&utm_campaign=architecture-explorer\&utm_content=ai-decisioning) — see how data flows through your stack and where AI Decisioning runs. #### Example: Onboarding campaign that learns what converts You want new users to complete their first purchase within 14 days of signing up. Instead of building a fixed drip sequence, you create an agent with a "first purchase" goal, add several message variants across email and push, and let AID decide which variant and channel each user gets. Over time, the agent learns that discount-forward messages work better for price-sensitive segments while product-focused messages convert power users — without you writing rules for each case. #### Example: Win-back campaign with smart suppression Lapsed users haven't engaged in 60 days. You create an agent targeting that audience with a re-engagement goal, add variants with different incentive levels, and enable Smart suppression to skip users unlikely to respond. AID learns which incentive level and channel re-activates each type of user, while suppression reduces wasted sends. ## How agents work Each agent follows a continuous loop: 1. **Collect inputs** — Audience, goals, messages, and guardrails. 2. **Decide** — Which message to send, when, and through which channel. 3. **Deliver** — Send through your connected destinations (Braze, Iterable, Salesforce Marketing Cloud). 4. **Measure** — Record outcomes such as purchases or clicks. 5. **Learn** — Update future decisions based on what worked. This process runs automatically for every user. AID uses reinforcement learning to balance exploration (testing new options) with optimization (sending what performs best). Unlike static rules or journeys, AID adjusts automatically to seasonality, creative changes, and audience behavior shifts. ![AID Overview](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/overview/aid-overview.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=1be11be1328aed97af50ff666374b50c) ## Core components ### Agents and messages [Agents](/ai-decisioning/agents) are the foundation — each one combines an audience, goals, and messages into a single adaptive campaign. After creating an agent, add [messages](/ai-decisioning/messages) sourced from your destination (Braze, Iterable, or SFMC) and define variants the agent can evaluate. Use [tags](/ai-decisioning/tags) to label messages by creative theme, offer type, or content category so you can compare performance across dimensions. ### Optimization tools Enable **Smart suppression** to reduce low-impact sends using predictive performance data. Run [content analysis](/ai-decisioning/content-analysis) to identify overlap, gaps, and opportunities across your message variants. ### Measurement and QA Review agent performance with [Insights](/ai-decisioning/insights), which shows conversion breakdowns by audience, creative performance by message or tag, timing insights, and lift metrics. Use the [Inspector](/ai-decisioning/inspector) to preview sends, confirm eligibility, and troubleshoot delivery issues. Before launching, walk through the [QA guide](/ai-decisioning/qa-guide) for channel-specific validation checklists. ![AID Insights](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/insights/aid-insights-summary.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c2c5270d096aaf7170c6c0bdae7b28bd) ## Get started AI Decisioning requires initial configuration from data teams before marketers can create agents. This setup is typically done once. ### For data teams and platform admins Complete these steps in order. Marketers cannot create agents until AI Decisioning is configured and at least one destination is connected. | Step | What to do | Why | | - | - | - | | 1 | [Configure AI Decisioning settings](/ai-decisioning/configuration) | Define channels, scheduling limits, and shared defaults. | | 2 | [Prepare data for AID](/ai-decisioning/prepare-data) | Define audience models, structure event data, and prepare tables for decisioning. | | 3 | Connect a destination: [Braze](/ai-decisioning/braze), [Iterable](/ai-decisioning/iterable), or [Salesforce Marketing Cloud](/ai-decisioning/sfmc) | Connect your ESP or messaging platform so AID can deliver messages. | > [!TIP] > > Once AI Decisioning is configured and a destination is connected, marketers > can start [creating agents](https://app.hightouch.com/ai/flows?from=docs) > immediately. ### For marketers Once your data team has completed the setup above, start by [creating your first agent](/ai-decisioning/agents). Define a target audience and a single measurable goal — most teams start with one goal like reactivation or first purchase and expand as performance data accumulates. From there, [add messages](/ai-decisioning/messages) from your connected destination, define variants, and launch. Use the [QA guide](/ai-decisioning/qa-guide) to validate before going live, then monitor performance in [Insights](/ai-decisioning/insights) as your agent learns. ## When to use AI Decisioning Use AI Decisioning for lifecycle or retention campaigns where users may need different messages, channels, or timing based on their behavior. For campaigns where you need full control over sequencing and timing, use [Journeys](/customer-studio/journeys) in Customer Studio instead. | Scenario | Recommended approach | | - | - | | Automate which message, channel, and timing each user receives | **AI Decisioning** | | Onboard, win back, cross-sell, or retain with adaptive campaigns | **AI Decisioning** [Agents](/ai-decisioning/agents) | | Reduce wasted sends by suppressing low-likelihood-to-convert users | **AI Decisioning** Smart suppression | | Build audiences from warehouse data and sync to destinations | [Customer Studio](/customer-studio/overview) | | Run a multi-step workflow with fixed sequencing and branching | [Journeys](/customer-studio/journeys) in Customer Studio | | Measure experiment results and track KPIs | [Intelligence](/campaign-intelligence/overview) | ## Use AI Decisioning with other Hightouch products AI Decisioning learns how to reach each person most effectively. It uses audiences and event data from your warehouse, then chooses the best message, channel, and timing for each customer and sends through your connected messaging tools. #### Connect your audiences, events, and messages * **Audiences from [Customer Studio](/customer-studio/overview)** — Agents target Customer Studio audiences as their eligible population. Audience membership updates automatically as warehouse data changes. * **Event data from your [connected source](/sources/overview)** — AID uses behavioral events like purchases, clicks, and app opens as feedback signals to learn what drives conversions. * **Messages from connected destinations** — Messages are sourced from your ESP or messaging platform ([Braze](/ai-decisioning/braze), [Iterable](/ai-decisioning/iterable), or [Salesforce Marketing Cloud](/ai-decisioning/sfmc)). To send to another destination, use a [custom channel](/ai-decisioning/custom-destinations). AID evaluates variants and controls which version is sent — it does not modify your base content. #### What AID delivers * **Optimized sends to destinations** — AID delivers the best message, channel, and timing for each user through your connected ESP or messaging platform. * **Performance data to [Insights](/ai-decisioning/insights)** — Conversion breakdowns, creative performance, timing insights, and lift metrics are available for ongoing analysis and refinement. ## Use cases | Use case | Example goal | | - | - | | **Onboarding** | Help new users complete a first purchase or app setup | | **Win-back** | Re-engage lapsed users with personalized incentives | | **Cross-sell or upsell** | Recommend complementary products or upgrades | | **Referral** | Encourage existing customers to invite friends | | **Retention** | Keep engaged users active with timely, relevant messages | Each agent focuses on a single measurable outcome and continuously improves performance over time. ![AID Marketing Shift](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/overview/aid-marketing-shift.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=f33a8edd90325426fb9fd1346537f3c3) ## Permissions AI Decisioning access is managed through [workspace roles](/workspace-management/roles), like other Hightouch products. Every workspace member can view AI Decisioning resources. Editing message content—copy, variables and variants, tags, and collections—requires the **Edit content** capability on a custom role; managing agents themselves—creation, lifecycle, goals, and configuration—requires **Manage agents**. Roles can also limit which agents a group works with by parent model. See AI Decisioning permissions for the full permission matrix. # Prepare data for AID Source: https://docs.hightouch.com/ai-decisioning/prepare-data Learn how to structure your data models and events so AI Decisioning can target users, personalize content, and optimize for real outcomes. ## Before you begin * Complete [AI Decisioning configuration](/ai-decisioning/configuration). ## Overview Before [creating agents](/ai-decisioning/agents), you’ll need to prepare the data that AID will learn from. This setup ensures that your AI agents have the full picture: who users are, what they’ve done, and how they’ve responded to marketing. That data is then used to both personalize decisions and measure impact. This includes: * Defining the user populations your agents will target (**parent models**) * Enriching them with related data to give user-level context (**related models**) * Creating **event models** that reflect the outcomes you want to optimize. * Building an **audience** to feed into each agent so it knows which users to target. AID uses your data to: * **Engineer user features**: Create an understanding of each individual user and detect patterns in behavior across characteristics, traits, events, and responses * **Train and evaluate models**: Identify which behaviors lead to outcomes like purchases or sign-ups Learn more about what we do with this data: Security Once your data is structured correctly, you can reuse these models across all of your lifecycle motions that are powered by AID. ## 1. Define your parent models **Purpose:** Establish the user populations your AID agents will target A parent model is your list of users for a given entity type. Each agent selects its own parent model when it’s created, so you can run different agents against different populations — for example, one agent targeting individual users and another targeting accounts or households. All agents in the same decision engine must use parent models from the same data source (warehouse connection). Define your parent models in **Customer Studio > Schema**. **Requirements:** * One row per user * A unique identifier (e.g. `user_id`) as each user’s primary key * Basic user data that can include: * Personal: First Name, Last Name, Full Name, Gender, Date of Birth, Age, Email * Location & timezone: City, State/Province, Country, Timezone (UTC Offset or IANA Timezone String) * Account details: Signup Date, Last Login Date, Account Status, Language preferences, Device type, Operating system * Demographics: Income Bracket, Education Level, Occupation, Marital Status, Number of Dependents **Example model:**\\ ![Parent Model](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/prepare-data/example-parent-model.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b7b754a8170b2845ac68b9abda559018) Learn more: [Parent models](/customer-studio/schema#create-the-parent-model) ## 2. Add related models **Purpose:** Enrich users with attributes that help the model learn Related models enrich a parent model with extra context the AI can learn from when making predictions, such as voluntary information, opt-in status, or persona data. These tables must be joined to the relevant parent model using a foreign key, typically `user_id`. ### Table types to include You’ll need the following tables that contain information about: **Required:** * **Consent flags** for email, SMS, push, in-app **Recommended:** * **User context data** from rewards program membership and participation, purchase history and frequency, customer support interactions, etc. * **Persona voluntary data** from quizzes, surveys (e.g. user goals, intent), etc. > [!NOTE] > > AID requires up-to-date marketing consent to ensure compliance and prevent > false negatives in model feedback. Learn more: [Related models](/customer-studio/schema#add-a-related-model) ### 3. Create event models **Purpose:** Supply the actions and outcomes AID will learn from Event models capture the actions users take—purchases, clicks, visits, and more. These power both model training and optimization. AID requires raw, unfiltered event logs that contain: * User behavior on-site or in-app * Engagement with marketing content * Transactional conversion events At **minimum**, your model should be structured as one event instance. For instance, if the goal is to increase subscription orders, each row in the table connected to the event model should reflect one distinct order (one row per user), not a line item in a distinct order (multiple rows per one order per user). Models must include: * `user_id` * `timestamp` * `event_name` of the campaign goal/outcome (e.g. `order_completed`) * Relevant outcome metadata (e.g. purchase value, subscription plan details, etc.) ### Table types to include | Type | Examples | Why it's important | | - | - | - | | **Conversion events** | `order_completed`, `signup` | Define AI Decisioning goals | | **Engagement signals** | `page_view`, `checkout_started` | Predict user intent | | **Campaign events** | `email_clicked`, `push_unsubscribed` | Train on content efficacy and responses | Learn more: [Event models](/customer-studio/schema#add-an-event-model) To export campaign events such as email sends, opens, and clicks from your email service provider (ESP), see [Bring email engagement data into your warehouse](/customer-studio/email-engagement-data). ## 4. Build audiences in Customer Studio **Purpose:** Define who each agent will target Audiences are created using the models above. Each AID agent targets one audience, which determines who is eligible to receive messages—and who gets held out for lift analysis. Your starting audience should be **as broad as possible** — if there are certain pockets within that audience that need additional guardrails for consent or compliance, you will be able to configure those filters within the agent at a per-message level. > [!NOTE] > > Hightouch recommends audiences of at least 500K users in order to build enough > training data to optimize for reinforcement learning. **Your audience should:** * Include all users AID is allowed to message * Reflect your lifecycle goal (e.g. win-back, onboarding) * Mirror consent and eligibility filters between Hightouch and your ESP **Example: Win-back campaign audience** * Users who haven’t purchased in the past 12 months * AND opened a message in the past 6 months * AND have opted into at least one channel Learn more: [Create Audiences](/customer-studio/usage) ## Summary: What data you’ll need | Purpose | Table Type | Examples | | - | - | - | | Define user populations | Parent models | `users`, `accounts`, `households` | | Add traits & permissions | Related models | `user_profiles`, `personas`, `opt_ins` | | Supply behaviors | Event models | `orders`, `signups`, `page_views` | | Target users | Audience | Built from the above in Customer Studio | ## Next steps * [SFMC](/ai-decisioning/sfmc) to configure a destination for AID. * [Braze](/ai-decisioning/braze) to configure a destination for AID. * [Iterable](/ai-decisioning/iterable) to configure a destination for AID. # QA guide Source: https://docs.hightouch.com/ai-decisioning/qa-guide Use this checklist to QA your messages before launching an AI Decisioning agent. ## Before you begin * At least one [agent](/ai-decisioning/agents) with [messages](/ai-decisioning/messages) configured * A connected destination ([Braze](/ai-decisioning/braze), [Iterable](/ai-decisioning/iterable), or [Salesforce Marketing Cloud](/ai-decisioning/sfmc)) ## Why QA in AI Decisioning Your team has likely already QA'd creatives before adding them to AI Decisioning. This guide covers the additional QA you should run inside AID — specifically for things AID introduces on top of your existing creative workflow: * **Variants** — AID can serve different subject lines, images, CTAs, and more. You need to confirm every option renders correctly. * **Payload fields** — AID passes user data (like first name or product recommendations) to your messaging platform. You need to confirm these populate in the rendered message. * **Targeting and send rules** — AID applies audience eligibility, send limits, and timing at the message, variant-type, and individual-variant levels. You need to confirm these match your campaign intent. * **UTM parameters** — AID constructs links with tracking parameters. You need to confirm URLs resolve correctly and UTMs are intact. > [!TIP] > > Run through this checklist whenever you launch a new agent, add or update > messages, or change targeting rules. ## How to preview and test variants A single message in AID can have multiple **variant types** (for example, subject line, image, CTA). Each variant type can have multiple **options**. To QA your message, you preview and test each option individually. For each variant option: 1. **Preview the variant** — In your message’s **Content** tab, expand the variant type you want to test (for example, **subject**) and click the **eye icon** next to the option you want to preview. The **"Now previewing"** banner confirms the option is selected. ![Clicking the eye icon to preview a subject line variant. The "Now previewing" banner appears in the preview pane.](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-preview-subject.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=80b4543e19e595a637786fe49cca4858) 2. **Send a test** — Click **Send test**. In the dialog that appears, enter the identifier for your test user (for example, an email address or user ID) and click **Send test**. The test message uses exactly the variant options you’ve selected. ![Clicking the Send test button.](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ![The Send test dialog, where you enter the identifier for your test user.](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-test-send-callout.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e0c4296919ede3fa928c288e7ed2961e) 3. **Check the test message** — Open the test email, SMS, or push notification and verify the content renders as expected. Use the [channel-specific checklists](#email-qa) below to know what to look for. 4. **Repeat for each variant option** until you’ve tested every option across all variant types. 5. After testing all variants, switch to the **Configuration** tab to review message-level settings like send limits, timing, and audience eligibility. See the [channel-specific checklists](#email-qa) below for the full list of configuration checks. > [!NOTE] > > "Now previewing" is not just a visual preview. It determines what gets sent in > your test message. ## Email QA Preview and test each variant option in the **Content** tab, then confirm your send rules in the **Configuration** tab. Go to: `AI Decisioning > Agents > [Your Agent] > Messages > [Your Message]` ### Content tab If your message uses variants, [preview and test each option](#how-to-preview-and-test-variants) as you work through the checks below. * [ ] [Sender and metadata](#sender-and-metadata) * [ ] [Subject line and preheader](#subject-line-and-preheader) * [ ] [Body content](#body-content) * [ ] [Links and CTAs](#links-and-ctas) * [ ] [Footer](#footer) * [ ] [Variant-type send limits](#variant-type-send-limits) * [ ] [Individual variant eligibility](#individual-variant-eligibility) #### Sender and metadata * Confirm the **sender email address** matches what recipients should see in their inbox. #### Subject line and preheader ![Previewing a subject line variant](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-preview-subject.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=80b4543e19e595a637786fe49cca4858) * Confirm the subject line and preheader render correctly for each variant. * Confirm personalization tokens (first name, dynamic fields, etc.) populate with real user data — not placeholder text or blanks. #### Body content ![Previewing a body content variant](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-preview-body.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6943ecf0186c461e5d8246fbc33bd6a8) * Confirm the content matches your intended messaging and layout. * Confirm images render correctly and include alt text. * Confirm dynamic or conditional content behaves as expected for different audience segments. #### Links and CTAs AID constructs the final URL including UTM parameters, so check the full link — not just the display text. ![Previewing a CTA variant](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-preview-cta.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=dca296dcf49a743c306ed3889314a0f8) * Confirm all links and buttons lead to the correct destination. * Confirm UTM parameters and tracking links are intact. #### Footer * Confirm the footer displays correctly. * Confirm unsubscribe, privacy, and legal links work. #### Variant-type send limits These let you set send limits per variant type. For example, you can cap how often a specific subject line is sent to the same user. To access these, click **Send limit** at the top of a variant type section. ![Variant-level settings overview](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-timing-overview.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=682e3e6b2d7de5a6b174df7904fb79c2) ![Send limit at the variant type level](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-timing-send-limit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=53ca16175d0c87d14a3b204855e040c2) * Confirm send limits are set correctly for each variant type. #### Individual variant eligibility These let you restrict specific variant options to certain audience segments. For example, you can limit a "VIP exclusive" subject line to loyalty-tier users. To access these, hover over the **audience icon** to the right of a variant option and click **Add eligibility filters**. ![Audience eligibility at the individual variant option level](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-timing-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=cc752b3a01b8c8fdbeef012cbc18ec2f) ![Audience eligibility at the individual variant option level (continued)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-variant-timing-eligibility-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=503dc4dc881973ee41cc3bc475844966) * Confirm audience eligibility filters are correct for each variant option. ### Configuration tab Expand the **Advanced** section. * [ ] [Message-level settings](#message-level-settings) * [ ] [Message status](#message-status) #### Message-level settings These apply to all variants of this message. ![Configuration tab showing advanced tab dropdown](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-message-timing-send-limit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=d0e4a281c66654e00e98ae2c61cfb2f3) ![Message-level advanced settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-email-message-timing-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=567b3ebfb109a174b31649399c2a6021) * **Send limit**: How often this message can be sent to the same user. Confirm this matches your campaign cadence (for example, 1 send every 30 days). See [Send limits](/ai-decisioning/messages#send-limits-1). * **Timeline**: Start and end dates for the message. Confirm these are set or intentionally left open. See [Timeline](/ai-decisioning/messages#timeline). * **Delivery windows**: If enabled, confirm the allowed days and time blocks match your intended send schedule. See [Delivery windows](/ai-decisioning/messages#delivery-windows). * **Audience eligibility**: The base audience filter inherited from your agent. You can’t edit it here, but confirm it’s correct. See [Eligibility](/ai-decisioning/messages#eligibility). * **Campaign attribution**: If set, confirm the campaign IDs are correct for outcome tracking. See [Campaign attribution](/ai-decisioning/messages#campaign-attribution). #### Message status Confirm the message is set to **Enabled** before your agent goes live. ![Message enabled — list view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-1.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=d4b3d644702d738d0be0d13d0b688acc) ![Message enabled — detail view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=87ab646d0d1f7739e8205218127ced3a) ![Message enabled — confirmation](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-3.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3b8e61addeb26c26c3fb5c9f2f731f11) > [!WARNING] > > You can send a **test** even if a message is **disabled**. > > However, once AID is live, agents will **NOT** send a message unless it is > **enabled**. ## SMS QA SMS has tighter constraints than email — character limits, carrier filtering, and compliance requirements. Preview and test each variant option in the **Content** tab, then confirm your send rules in the **Configuration** tab. Go to: `AI Decisioning > Agents > [Your Agent] > Messages > [Your Message]` ### Content tab If your message uses variants, [preview and test each option](#how-to-preview-and-test-variants) as you work through the checks below. * [ ] [Sender](#sender) * [ ] [Title and body content](#title-and-body-content) * [ ] [Links and actions](#links-and-actions) * [ ] [Compliance](#compliance) * [ ] [Variant-type send limits and eligibility](#variant-type-send-limits-and-eligibility) #### Sender * Confirm the **sender ID or phone number** appears as expected. #### Title and body content ![SMS test send](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-sms-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8c94d63e9819457b06b89bb39348c60c) * Confirm the text is accurate, correctly formatted, and not truncated. SMS messages over 160 characters split into multiple segments, which can affect readability and cost. * Confirm personalization tokens populate with real user data. * Confirm dynamic content renders correctly for different audience segments. #### Links and actions * Confirm all links work and track correctly. * Confirm shortened URLs or deep links open as expected. #### Compliance * Confirm opt-out instructions are included in every variant (for example, "Reply STOP to unsubscribe"). * If your messages are subject to TCPA or other regulations, confirm required disclosures are present. #### Variant-type send limits and eligibility If your message has variants, confirm send limits and audience eligibility filters are set correctly at the variant level. See the [email QA section](#variant-type-send-limits) for details on where to find these settings. ### Configuration tab Expand the **Advanced** section. * Confirm message-level send limits, timing, delivery windows, audience eligibility, and campaign attribution are correct. See [Message configuration](/ai-decisioning/messages#message-configuration) for details on each setting. * Confirm the message is set to **Enabled** before your agent goes live. > [!WARNING] > > You can send a **test** even if a message is **disabled**. > > However, once AID is live, agents will **NOT** send a message unless it is > **enabled**. ## Push notification QA Push notifications have tighter display constraints than email — titles and body text can be truncated differently on iOS and Android. Preview and test each variant option in the **Content** tab, then confirm your send rules in the **Configuration** tab. Go to: `AI Decisioning > Agents > [Your Agent] > Messages > [Your Message]` ### Content tab If your message uses variants, [preview and test each option](#how-to-preview-and-test-variants) as you work through the checks below. * [ ] [Sender and app info](#sender-and-app-info) * [ ] [Notification content](#notification-content) * [ ] [Links and actions](#links-and-actions-1) * [ ] [Variant-type send limits](#variant-type-send-limits-1) * [ ] [Individual variant eligibility](#individual-variant-eligibility-1) #### Sender and app info * Confirm the app name and sender ID are correct. * Confirm icons or media display correctly. #### Notification content * Confirm the title and body display as expected. * Confirm personalization tokens populate with real user data. * If possible, test on both iOS and Android. iOS typically truncates titles around 40 characters and bodies around 110 characters. Android varies by device. #### Links and actions Deep links open specific screens in your app (for example, a product page or cart). If misconfigured, the user may land on the home screen instead. * Test all deep links by tapping the notification on a test device and confirming you reach the correct screen. * If you have fallback URLs for users without the app, test those as well. #### Variant-type send limits These let you set send limits per variant type. For example, you can cap how often a specific notification title is sent to the same user. ![Push variant-level settings overview](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-push-variant-timing-overview.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=0ccf6b825da239f651c94c80a72f48f1) ![Push send limit at the variant type level](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-push-variant-timing-send-limit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e9cbaf3485add0fd87b9b4ab013986c0) * Confirm send limits are set correctly for each variant type. #### Individual variant eligibility These let you restrict specific variant options to certain audience segments. For example, you can limit a promotional notification to users who have the latest app version. ![Push audience eligibility at the individual variant option level](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-push-variant-timing-eligibility.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8b3cb1d6b1907de5c04f800237c6eece) ![Push audience eligibility at the individual variant option level (continued)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-push-variant-timing-eligibility-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=fc9f16322c3fc5ec630dc798ab9b7031) * Confirm audience eligibility filters are correct for each variant option. ### Configuration tab Expand the **Advanced** section. * [ ] [Message-level settings](#message-level-settings-1) * [ ] [Message status](#message-status-1) ![Push notification advanced configuration settings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-push-message-timing-send-limit.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=51a7bd4a8510020582710f6edb1ba995) #### Message-level settings These apply to all variants of this message. * Confirm send limits, timing, delivery windows, audience eligibility, and campaign attribution are correct. See [Message configuration](/ai-decisioning/messages#message-configuration) for details on each setting. #### Message status Confirm the message is set to **Enabled** before your agent goes live. > [!WARNING] > > You can send a **test** even if a message is **disabled**. > > However, once AID is live, agents will **NOT** send a message unless it is > **enabled**. ## Troubleshooting If something isn't working during QA, check here for the most common issues. Go to: `AI Decisioning > Agents > [Your Agent] > Messages > [Your Message]` ### Message test not received If your test send doesn’t arrive: 1. **Confirm the message is enabled.** ![Message list showing enabled toggle (state 1)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-1.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=d4b3d644702d738d0be0d13d0b688acc) ![Message detail showing enabled toggle (state 2)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=87ab646d0d1f7739e8205218127ced3a) ![Message detail showing enabled confirmation (state 3)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-message-enabled-3.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3b8e61addeb26c26c3fb5c9f2f731f11) 2. **Check the identifier.** * Confirm you entered the correct identifier (for example, email, user ID, or subscriber key). * It must match both your channel configuration and the value shown in the test send. ![Test send callout showing the identifier field](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-test-send-callout.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e0c4296919ede3fa928c288e7ed2961e) ![Channel configuration showing the identifier setting](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-channel-config-identifier.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2f7d04475f2d8327d4be827fa5882d92) 3. **Confirm the identifier exists in your destination.** * The user must already exist in your email or messaging platform. 4. **Select a user to preview.** * In the message preview, select a user from **Preview as** before sending a test. ![Selecting a user with Preview as](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-sfmc-select-user.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5a34f0ebf9cf85dba6ee74d8295a4037) ### Personalization not working If personalization appears blank or incorrect: 1. **Check your channel payload configuration.** * Confirm the fields you’re using are included in the channel payload (these are the fields sent with each message). ![Channel configuration payload fields](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-channel-config-payload-1.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bb70ce516788a53836a89d4a8ce168f0) ![Channel configuration payload fields (continued)](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/qa-guide/aid-qa-channel-config-payload-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7ba669e1195e157fdb710b4509936bf0) 2. **Check your user data model.** * Fields like `first_name` and `last_name` must exist on the agent's parent model. * If they’re on a related model, you can either: * Merge the model into the main user model (so all fields are available in one place), or * Add the fields through the agent's **Configuration > Additional user columns** (to include specific fields without merging everything) ### Variants not showing If your test email shows the same content regardless of which variant you select, the destination template is likely missing the required code snippet. * Confirm the code snippet is added to your destination template. * See the variable setup guide for your destination: [Braze](/ai-decisioning/braze#use-variables-in-braze), [Iterable](/ai-decisioning/iterable#5-use-variables-in-iterable-templates), or [Salesforce Marketing Cloud](/ai-decisioning/sfmc#use-variables-in-sfmc). > [!TIP] > > This is a one-time setup step. Once the snippet is in your template, it > applies to all messages and variants. ### Variant images not displaying If images appear broken or don't load in your test email: * Confirm the code snippet is added to your destination template. * Confirm all image URLs are publicly accessible — open each URL in an incognito browser window to verify. ## Next steps Once you've completed QA, confirm your [agent](/ai-decisioning/agents) is enabled and ready to launch. # Salesforce Marketing Cloud integration with AI Decisioning Source: https://docs.hightouch.com/ai-decisioning/sfmc Connect Salesforce Marketing Cloud to AI Decisioning so agents can deliver personalized emails, SMS, push notifications, and in-app messages through your existing SFMC Triggered Sends and Journeys. ## Before you begin * [Prepare data for AID](/ai-decisioning/prepare-data) ## Overview Hightouch's AI Decisioning (AID) helps you deliver real-time, personalized messages based on live customer context and predictions. By connecting AID with Salesforce Marketing Cloud (SFMC), you can: * Automatically trigger messages from AID Agents via SFMC Triggered Sends or Journeys * Personalize SFMC templates using dynamic variables from Hightouch—no custom code required * Centralize targeting and decision logic in Hightouch, while using SFMC to handle message delivery ## 1. Set up SFMC as a destination > [!NOTE] > > Already configured SFMC? Even if you've previously set SFMC up as a > destination, you'll still need to apply the specific permissions and scopes > outlined below. ### Why these permissions matter To send messages through SFMC using AID, Hightouch needs access to certain channels, content, and user data. These permissions allow Hightouch to: * Trigger messages via Triggered Send and Journey Builder * Read and update subscriber data * Access and personalize email, SMS, push, and in-app templates * Read Content Builder assets to list and preview your email templates ### Connect SFMC and grant permissions **In SFMC:** 1. [Create an installed package in SFMC](/destinations/sfmc#create-installed-package-in-sfmc) until you reach **Set Server-to-Server Properties**. 2. Under **Channels**, enable the permissions for each message type you want Hightouch to use (read, write, send, publish, or post). ![Add component](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/installed-package-permissions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=1bce8ec5e5deb6fa47f096eb033720b6) 3. Under **Assets**, select **Documents and Images: Read**. 4. Select **Save**. **In Hightouch:** 5. Continue setting up the SFMC destination until you reach the [Custom Scopes](/destinations/sfmc#custom-scopes) step. 6. Under **Advanced permissions > Custom Scopes**, paste in the following: `email_read email_write email_send documents_and_images_read accounts_read data_extensions_read data_extensions_write journeys_read journeys_write journeys_aspr journeys_execute list_and_subscribers_write list_and_subscribers_read push_read push_write push_send` 7. Select **Test Connection** to verify that setup is complete. ## 2. Add channels in AI Decisioning Once SFMC is set up as a destination, you can add **channels**. Channels define how Hightouch sends messages to SFMC—via Triggered Sends or Journeys. ### Set up a channel 1. Go to **AI Decisioning > Configuration > Channels**. 2. Select **Add channel**. ![Add channel button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-add-channel.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4227015404ba1f8c3f2f4440e7dbb4cc) 3. Choose a channel type: **Email**, **SMS**, **Push**, or **In-App**. 4. Select **Salesforce Marketing Cloud** as the destination. 5. Select a [sync type](#sync-type-comparison): * **Triggered send** – sends a 1:1 message in real time * **Journey entry** – sends as part of a journey workflow * **Data extension (advanced)** – batch sends managed within SFMC 6. For **Triggered send** channels, choose an **identifier** that matches the Subscriber Key field in SFMC (for example, email or user ID). Hightouch sets the identifier automatically for Journey and Data extension channels. 7. Select **Add channel**, then **Save changes**. ![New channel modal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-add-channel-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c1345b0509ec781d14e1e18f7aadf5dc) ### Sync type comparison The **Sync Type** determines how Hightouch sends messages through SFMC: | Channel | Triggered send | Journey | Data extension | | - | :-: | :-: | :-: | | Email | ✅ | ✅ | ✅ | | SMS | ❌ | ✅ | ✅ | | Push | ✅ | ✅ | ✅ | | In-App | ❌ | ✅ | ✅ | | Sync type | Best for | Setup notes | | - | - | - | | **Triggered send** | Real-time, event-based sends tied to a single user action | For **email** Triggered Sends, select a **send classification** from your SFMC account — for example, a Commercial classification for marketing (users can opt out) or a Transactional one for system notifications (users can't). SFMC maps these to its Marketing and Operational types. | | **Journey entry** | Automated, multi-step campaigns (for example, onboarding, retargeting) | Select the **Synced user columns** (for example, email, name, product interest) you want to sync. These fields are available inside the journey's Data Extension for personalization or decision splits. | | **Data extension (advanced)** | Batch sends, scheduled campaigns, and advanced setups where you need full control over delivery logic | A [Data Extension](https://help.salesforce.com/s/articleView?id=mktg.mc_es_data_extension_data_relationships_classic.htm\&type=5) is a table in SFMC that stores subscriber or message data. When you choose this sync type, Hightouch writes data directly to a Data Extension, and you manage the send logic (timing, audience filters, scheduling) within SFMC. This gives you the most flexibility but requires more setup on the SFMC side. Choose **Insert** to append new rows, or **Mirror** to keep the Data Extension in sync with your warehouse. Mirror mode may need to be enabled for your workspace — [contact Hightouch](#pylon-chat) if you don't see it. | ## 3. Add messages After you add channels in AI Decisioning, you can add **messages** to your agents. Each message connects an agent's decision to a specific template in SFMC. For full details on message configuration, variants, and tags, see [Messages](/ai-decisioning/messages). ### Add a message from SFMC 1. Go to **AI Decisioning > Agents** and select your agent. 2. Open the **Messages** tab. 3. Select **Add messages**, then select **Add messages individually**. 4. Select your configured SFMC **channel and destination** tile (for example, **Email - Salesforce Marketing Cloud**). 5. Select the appropriate **template** or [event identifier](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_create_journey_specific_entry_event.htm\&type=5) from SFMC. 6. Enter a **message name** and select **Add messages**. ![Add message from SFMC](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) You can repeat this process for any channel and sync type. Continue the setup process in the channel-specific sections below: * [Send emails via Triggered Send](#send-emails-via-triggered-send) * [Send emails via Journey](#send-emails-via-journey) * [Send emails via Data Extension](#send-emails-via-data-extension) * [Send SMS via Journey](#send-sms-text-messages-via-journey) * [Send SMS via Data Extension](#send-sms-text-messages-via-data-extension) * [Send push (outbound) via Triggered Send](#send-push-outbound-notifications-via-triggered-send) * [Send push (app inbox) via Triggered Send](#send-push-app-inbox-notifications-via-triggered-send) * [Send push via Journey](#send-push-notifications-via-journey) * [Send push via Data Extension](#send-push-notifications-via-data-extension) * [Send in-app via Journey](#send-in-app-notifications-via-journey) * [Send in-app via Data Extension](#send-in-app-notifications-via-data-extension) ### Test a message 1. Open the message and go to the **Content** tab. 2. Under **Optimized content**, confirm your variants are configured. If your message uses [dynamic variables](#use-variables-in-sfmc), set values for testing. 3. In the **Preview** panel, verify the rendered message looks correct. 4. Select **Send test** to send the message to a test user. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ## 4. Configure SFMC Triggered Sends and Journeys for AID Before adding a message in Hightouch, you need to configure the corresponding Triggered Send or Journey in SFMC. ### Send emails via Triggered Send 1. [Add a channel](#set-up-a-channel) with the sync type set to **Triggered send**. ![Email channel - Triggered Send](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-triggered-send.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=1cf4800a4d64cd7d50b7538ab9fd32c0) 2. [Add a message](#add-a-message-from-sfmc) from your SFMC email template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 3. Close the window that opens and return to the **Messages** tab. 4. Select the link next to **Base content** to go to SFMC. ![Base content link](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-base-content-link.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a827f9a2798b343046caf9023383ce3d) 5. This will prompt you to log in to SFMC and should open the **Email Studio > Interactions** page. 6. Select **Triggered Sends**. ![Interactions](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-email-studio.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=56311bf592fb5cd93efe33dd3df94956) 7. Select the send name that corresponds with your newly created message. 8. Select **Start/Restart**. ![Start](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-start.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c44c85095f84d53bd2185f0ea8bd4784) 9. Return to **Hightouch** and open your message. 10. In the **Content** tab, [set the variables](#use-variables-in-sfmc) and select **Send test**. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ### Send emails via Journey 1. [Add a channel](#set-up-a-channel) with the sync type set to **Journey entry**. ![Email channel - Journey entry](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=3af38a3c5bb16d3a127ad92befe3b442) 2. [Add a message](#add-a-message-from-sfmc) from your SFMC email template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 3. In the **Content** tab, [set the variables](#use-variables-in-sfmc) and select **Send test**. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ### Send emails via Data Extension 1. [Add a channel](#set-up-a-channel) with the sync type set to **Data extension**. ![Email channel - Data Extension](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-data-extension.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5becc3abfcb789c143b4234220a62a01) 2. Choose **Insert** (append new rows) or **Mirror** (keep in sync with your warehouse). 3. [Add a message](#add-a-message-from-sfmc) from your SFMC email template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 4. In SFMC, configure your send logic (automation, query activity, or triggered automation) to read from the Data Extension that Hightouch populates. ### Send SMS text messages via Journey 1. [Add a channel](#set-up-a-channel) with the sync type set to **Journey entry**. ![SMS channel - Journey entry](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-sms-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6fe9c873afc94f529e1471d017ac80a5) 2. [Add a message](#add-a-message-from-sfmc) from your SFMC SMS template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 3. In the **Content** tab, [set the variables](#use-variables-in-sfmc) and select **Send test**. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ### Send SMS text messages via Data Extension 1. [Add a channel](#set-up-a-channel) with the sync type set to **Data extension**. ![SMS channel - Data Extension](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-sms-data-extension.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=14fffee1ae9cf0a88a8f4560bfc3af90) 2. Choose **Insert** or **Mirror** mode. 3. [Add a message](#add-a-message-from-sfmc) from your SFMC SMS template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 4. In SFMC, configure your send logic to read from the Data Extension that Hightouch populates. ### Send push (outbound) notifications via Triggered Send #### Enable the push channel 1. [Add a channel](#set-up-a-channel) with the sync type set to **Triggered send**. ![Push channel - Triggered Send](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-push-triggered-send.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5d4507ab7ef97ed9a195217cc16f056c) #### Configure your push template in SFMC **In SFMC:** 2. Go to **Mobile Studio > MobilePush**. 3. Select **Create Message**. ![Mobile push](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-new-mobilepush-message.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=46661ac69b00f433a7e9dde184f6b962) 4. Select the **Outbound** template and select **Next**. 5. Name your message and select your app. 6. Select **API Triggered** as the Send Method. 7. Select **Alert** as the Push Method and select **Next**. ![API Triggered](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-define-message-properties.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5277e15a7ddd80925810a0db93fc5b22) > [!NOTE] > > You can only trigger Alert Only or Inbox Only messages, not Alert + Inbox. 8. Create the template for your push alert. 9. **Save** your message. ![Save alert](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-save-push-alert.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=857d4d533325bb606ce97add82cc87ff) 10. Select **Send** in the top right-hand corner. 11. An activation window should pop up with an API key. Copy this API key to make it easier to find the template in Hightouch in a later step. ![Activate](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-activate-push-alert.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b9928ff60cdbd4ffc66008564abfa04d) #### Add a message in Hightouch **In Hightouch:** 12. [Add a message](#add-a-message-from-sfmc) from your SFMC push template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) #### Preview content Hightouch automatically creates the variables for push notification title, subtitle, and body. The values you supply here are used directly in the push notification without any need for code snippets in the template. If these are left blank, Hightouch uses the default values in the template. > [!WARNING] > > Hightouch uses the override capabilities in the API. If even one variable has > a value supplied, the default values in the template for **all** variables get > overridden. Make sure to supply at least the default value for all variables, > even if you only want AID to vary one. #### Send tests 13. To test push notifications, paste the contact key you use in your SFMC contacts. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) 14. Personalization strings can be supplied directly in the values for the variables without any need for code snippets in the template. ![Personalization strings](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-personalization-strings.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=85c867e526a22ca0180d48f9659f3dfe) ![Personalization strings demo](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-personalization-strings-demo.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=56d46497e827bfd3856dda36f0879171) ### Send push (app inbox) notifications via Triggered Send #### Enable the push channel 1. [Add a channel](#set-up-a-channel) with the sync type set to **Triggered send**. ![Push channel - Triggered Send](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-push-triggered-send.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5d4507ab7ef97ed9a195217cc16f056c) #### Configure your push template in SFMC **In SFMC:** 2. Go to **Mobile Studio > MobilePush**. 3. Select **Create Message**. ![Mobile push](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-new-mobilepush-message.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=46661ac69b00f433a7e9dde184f6b962) 4. Select the **Inbox** template and select **Next**. 5. Name your message and select your app. 6. Select **API Triggered** as the Send Method. 7. Select **Alert** as the Push Method and select **Next**. ![Define message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-define-message-properties.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5277e15a7ddd80925810a0db93fc5b22) > [!NOTE] > > You can only trigger Alert Only or Inbox Only messages, not Alert + Inbox. 8. Create the template for your push alert. 9. **Save** your message. ![Save alert](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-save-push-alert.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=857d4d533325bb606ce97add82cc87ff) 10. Select **Send** in the top right-hand corner. 11. An activation window should pop up with an API key. Copy this API key to make it easier to find the template in Hightouch in a later step. ![Activate](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-activate-push-alert.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b9928ff60cdbd4ffc66008564abfa04d) #### Add a message in Hightouch **In Hightouch:** 12. [Add a message](#add-a-message-from-sfmc) from your SFMC push template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) ### Send push notifications via Journey 1. [Add a channel](#set-up-a-channel) with the sync type set to **Journey entry**. ![Push channel - Journey entry](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-push-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ee6c0660373bc0384c197a362038acec) 2. [Add a message](#add-a-message-from-sfmc) from your SFMC push template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 3. In the **Content** tab, [set the variables](#use-variables-in-sfmc) and select **Send test**. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ### Send push notifications via Data Extension 1. [Add a channel](#set-up-a-channel) with the sync type set to **Data extension**. ![Push channel - Data Extension](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-push-data-extension.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=6722988937bd0c63ef74f17221dd490c) 2. Choose **Insert** or **Mirror** mode. 3. [Add a message](#add-a-message-from-sfmc) from your SFMC push template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 4. In SFMC, configure your send logic to read from the Data Extension that Hightouch populates. ### Send in-app notifications via Journey #### Enable the in-app channel and add a message 1. [Add a channel](#set-up-a-channel) with the sync type set to **Journey entry**. ![In-App channel - Journey entry](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-app-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=aa40249035f190ec7ed8b5c7005a5095) 2. [Add a message](#add-a-message-from-sfmc) from your SFMC in-app template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) #### Link your message to an SFMC Journey In these next steps, you will link your newly created message to an associated Journey in SFMC. **In Hightouch:** 3. Go to the **Content** tab within your message to add the variables you would like Hightouch to control. **In SFMC:** 4. Go to **Journey Builder > Journey Builder**. 5. Select **Create New Journey**. ![Create journey](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-create-new-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ac9ec354946791d45c9143a08f9c4d14) 6. Select **Multi-Step Journey**. 7. Select **API Event** as the entry source. Drag it onto the Journey Builder. ![API Event](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-api-event-entry-source.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=474a3bb9437947cbf7430f8b9c82bc4e) 8. Select the grey **API Event** icon in the Journey Builder. This will open a list of API Events. 9. Select the message name you chose when adding the message in Hightouch. > [!NOTE] > > Hightouch automatically creates the required Data Extension with the event so > you don't have to set that up. ![Select](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-select-ht-action-name.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c40261e00a864bb0ad88ad9bddb717d2) 10. Select **Done**. 11. Next, drag **In-App Message** to the Journey Builder. ![Drag message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-drag-message-journey-builder.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=7093e5728d4bb282ee129d8aa3402183) 12. Select the grey **In-App Message** icon in the Journey Builder. 13. **Select** (or create) your desired in-app message template. 14. In the **In-App Message Activity Summary**, edit the required settings for **Message Configuration** and **Display Trigger**. Optionally, configure **Display Options** and **Advanced Options** as desired. See [SFMC documentation](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_configure_inapp_in_journey_builder.htm\&type=5) for more details. ![Activity summary](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-app-message-activity-summary.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=05158b1a40d0b0342283ccb48b2f6ba8) 15. Optional: If you would like Hightouch to control aspects of the In-App Message, follow the instructions for [using variables in SFMC templates](#use-variables-in-sfmc). * Paste the variable code snippets from Hightouch into SFMC: * Select a message in **Message Definition** * Select **Edit Selected Message** ![Message definition](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-message-definition.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e7476e7be28ded848d82180c689ac525) 16. Paste the copied code snippets from Hightouch into the **Content** tab that opens. ![Code snippet](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-paste-code-snippet.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=846ca0c0cd6fa75611257fd6160d0353) 17. **Save** your changes. 18. Optional: To continuously test sends, click the **Gear icon > Journey Settings** and select re-entry any time. 19. **Activate** your journey. ![Activate](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-activate-journey.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=369f9e64a6cc930a32c65229ab09f5ec) **In Hightouch:** 20. Return to **Hightouch** and refresh the **Content** tab within your message. 21. Preview your content to ensure everything is accurate. 22. You can now **Send test** to subscribers. ![Send test](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-send-test.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5daa41fd330ef196755d49820fb7fc2f) ### Send in-app notifications via Data Extension 1. [Add a channel](#set-up-a-channel) with the sync type set to **Data extension**. ![In-App channel - Data Extension](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-channel-app-data-extension.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=06c7f2c671f0d5433023b0b76d7c1451) 2. Choose **Insert** or **Mirror** mode. 3. [Add a message](#add-a-message-from-sfmc) from your SFMC in-app template. ![Add message](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/add-message-sfmc.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=c9dfa670d713b003af88cb01a005ba1e) 4. In SFMC, configure your send logic to read from the Data Extension that Hightouch populates. ## Use variables in SFMC Hightouch variables allow you to personalize SFMC messages using live warehouse data, any variable you've defined within the message such as subject line variations, or different content blocks. ### Access variables 1. Open a message in Hightouch and go to the **Content** tab. 2. Under **Optimized content**, expand a content type (for example, **subject** or **body**) and add your variants. 3. Select the `...` menu on a content type and select **Copy code snippet** to get the variable code. 4. Paste the code into your SFMC template. These snippets render with real values for each user when the message is sent. ![Copy code snippet](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/sfmc/aid-sfmc-copy-code.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=00946a6d344b4f919f6644056d6f04fc) ### Important notes * **Triggered Sends**: Variables are fully supported. * **Journeys**: Variables are available via Data Extension fields synced by Hightouch. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Message fails to send | API errors or misconfigured destination | Check Hightouch logs for API errors. | | Test user not receiving messages | Identifier mismatch | Verify the identifier matches a valid Subscriber Key in SFMC. | | Triggered Send not firing | Send not started | Confirm the Triggered Send is in **Running** status in Email Studio. | | Journey sends not triggering | Journey not activated or entry event misconfigured | Confirm the Journey is activated and the API entry event is configured. | | Variables not rendering | Incorrect syntax or missing field mapping | Double-check variable syntax from **Copy code snippet** and field mapping. | | `Could not get email templates`, or a `403` with `errorcode 20002` | The installed package doesn't grant `documents_and_images_read` | In SFMC, add **Assets > Documents and Images: Read** to the installed package. | ## Next steps * [Messages](/ai-decisioning/messages) to create and manage the message variants each agent sends through SFMC. * [QA guide](/ai-decisioning/qa-guide) to validate messages before you launch. * [Agents](/ai-decisioning/agents) to configure the agents that decide which messages to send. * [Insights](/ai-decisioning/insights) to measure how your agents and messages perform. # AID Tags Source: https://docs.hightouch.com/ai-decisioning/tags Tags help you organize messages and variants, compare creative performance, and apply consistent structure across your AI Decisioning workspace. ## Before you begin * Access to [AI Decisioning](/ai-decisioning/overview) * At least one agent, message, or variant created ## Overview Tags in **AI Decisioning** classify and group [message variants](/ai-decisioning/messages#add-and-manage-variants) so you can compare how different creative strategies perform across your agents. Each tag consists of a **key** and a **value**. The key defines a category, such as `tone` or `product`, and the value describes a specific attribute, such as `playful` or `sunglasses`. Together, these pairs describe both what your message says and how it says it. | Tag type | Description | Example use | | - | - | - | | **Message tags** | Describe the overall goal, topic, or focus of a message | `Summer Promo`, `Loyalty Push`, `Flight Offers` | | **Variant tags** | Describe specific creative differences within a message | `Emotional`, `Discount CTA`, `Travel Deals` | Once applied, tags let you break down performance in [Insights](/ai-decisioning/insights) to identify which themes, tones, offers, or structures drive engagement. Tags are most useful when multiple messages or variants share the same concepts, because that overlap makes it easier to compare results and identify patterns. Consistent tagging also helps AI Decisioning learn from past performance, improving future recommendations and experiments. ## Plan your tagging framework Before you start tagging, decide what you want to learn from your campaigns — such as which **offers**, **value propositions**, or **tones** drive engagement. Planning your framework upfront helps you tag consistently from the start. ### Decide what to tag Your tags should capture: * **What the content says** — for example, product, offer, or audience * **How it says it** — for example, tone, urgency, or format **Guidelines** * Keep tag names short and consistent * Use one value per tag type, such as one `Tone` or one `Offer` * Avoid duplicate concepts, such as `Incentive` and `Offer` * Don't recreate system fields like `channel`, `message`, or `subject line` * Create tags for any dimension you want to measure or control, such as business unit or product line > [!TIP] > > Tags describe **content attributes**, not user traits. It's okay if they > overlap. For example, a message might use the tag `Career = Marketer` while a > user profile also includes a `career` trait. ### Choose message tags vs. variant tags Use **message-level tags** for broad attributes that apply to the entire message, such as product, campaign theme, or business unit. Use **variant-level tags** for finer creative differences, such as subject line tone, CTA style, or emoji usage. ![Message-level tag configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-message-config.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2eedbc2c3f240ef1662c1bdd00f7939a) ### Start small, then expand | Tag type | Recommended range | Notes | | - | - | - | | **Keys** | 3–8 | Focus on the main dimensions you want to measure, such as tone, offer, or motivator. | | **Values** | 3–6 per key | Each value should apply to multiple messages. Avoid long lists of rarely used values. | As you add new tags, Insights automatically updates results for past agents that use them. ### Best practices | Goal | Recommendation | | - | - | | **Stay consistent** | Use a standard naming pattern, such as `Tone`, `Offer`, or `Audience`. | | **Avoid duplicates** | Regularly review tags on the **Tags** page to remove similar values. | | **Be specific** | Use clear labels like `CTA: Learn More` instead of generic names like `Email Test`. | | **Align with goals** | Create tags that reflect what you want to measure, such as conversion or engagement. | | **Use AI to assist** | Generate tags quickly, then refine them for accuracy. | | **Review performance** | Use [Insights](/ai-decisioning/insights) to identify which tags drive results. | > [!TIP] > > Keep a shared reference document for your team's approved tags, such as `Promo > Type`, `Tone`, and `Audience`, to maintain consistency across agents. ### Example tag structures #### Financial company example | Category | Key | Example values | | - | - | - | | **Product** | Product type | Checking, Savings, Credit Card, Mortgage | | **Product** | Feature | No ATM Fees, Auto Transfers, 2% Cash Back | | **Expression & Style** | Tone | Playful, Urgent, Reassuring, Empowering | | **Expression & Style** | Motivator | Save Money, Earn Rewards, Gain Control, Simplify Life | | **Expression & Style** | Narrative | Problem–Solution, Benefit-Focused, Storytelling | | **Incentive** | Value prop | Low Fees, High Yield, Personalized Offers | | **Incentive** | Offer | 10% Off, \$100 Bonus, Free Trial | | **Incentive** | CTA | Learn More, Apply Now, Get Started | | **Creative Structure** | Message length | Short, Medium, Long | | **Creative Structure** | Urgency | Low, Medium, High | #### Streaming service example | Category | Key | Example values | | - | - | - | | **Product** | Subscription plan | Basic, Standard, Premium, Bundle | | **Product** | Feature | Ad-Free, Offline Download, 4K, Multi-Screen | | **Expression & Style** | Tone | Inspirational, Humorous, Reassuring, Playful | | **Expression & Style** | Motivator | Entertainment, Discovery, Relaxation, Family Fun | | **Expression & Style** | Genre | Action, Comedy, Drama, Kids, Documentary | | **Incentive** | Value prop | Free Trial, Exclusive Content, Personalized Recommendations | | **Incentive** | Offer | 1 Month Free, 20% Off Annual Plan, Bundle Deal | | **Incentive** | CTA | Watch Now, Start Free Trial, Subscribe Today | | **Creative Structure** | Message length | Short, Medium, Long | | **Creative Structure** | Emoji usage | None, Light, Heavy | | **Business Unit** | Region | US, GB, FR, DE, AUS, NZ, JP | > [!TIP] > > Use these examples as a starting point. Choose the categories that fit your > business, then expand over time. ## Tag messages and variants Once you've planned your tag structure, you can start applying tags while building or reviewing agents. Use the Agent view to tag messages in context, or the [Tags page](#manage-tags-on-the-tags-page) to manage tags across your workspace. | Method | Best for | | - | - | | **From an Agent** | Adding or editing tags while building or reviewing a specific message | | **From the Tags page** | Creating, standardizing, or bulk-editing tags across multiple agents | ### Message tags **Message tags** classify the overall purpose or focus of a message. You can add them directly from the message configuration view inside an agent. 1. Go to `AI Decisioning > Agents > Select an Agent`. 2. In the `Messages` tab, choose a message. 3. Open the `Configuration` tab. 4. Under `Tags`, use the dropdowns to select existing tags or click `Add tag` to create new ones. 5. Click `Save changes` to apply. ![Tagging from within an Agent message configuration view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-agent-message-config.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=5adbfe5b1318ac417bbc76030c010233) ![Message-level tag configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-message-config.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=2eedbc2c3f240ef1662c1bdd00f7939a) **Examples** * `Product: Bluelight` * `Motivator: Wellness` * `Incentive Type: Free gift` * `Value Proposition: Convenience` > [!TIP] > > You can also generate message tags with AI by clicking `Generate tags with AI` > under the tag list. ### Variant tags **Variant tags** help you compare creative differences within a single message, such as tone, offer, structure, or subject line style. 1. Go to `AI Decisioning > Agents > Select an Agent`. 2. In the `Messages` tab, choose a message. 3. Open the `Content` tab. 4. Under `Optimized content`, click `Edit tags and rules`. 5. Hover over the tag icon next to a variant and click `Add content tags`. 6. In the `Edit content tags` modal, use the dropdown to select existing tag values or type to create new ones. 7. Click `Apply` to save your changes. ![Expand tags and rules interface](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-expand-edit-content-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e2851b8277873a7b2d550a02e00c3913) ![Edit content tags button](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-edit-content-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8441c7fccb3f701dec851866fc4bab68) ![Variant-level tag configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-add-content-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=e27444434076403e412ca8dba2b44882) **Examples** * `Length: Short` * `Tone: Savings focused` * `Urgency: Normal` * `Has emoji: Yes` > [!TIP] > > Add variant tags while testing subject lines, images, or CTAs. These tags > connect performance differences directly to specific creative choices in > [Insights](/ai-decisioning/insights). ## Analyze tag performance Use tags to understand how creative themes perform across agents and messages. ### Insights Once your messages and variants are tagged, you can measure how each tag performs across agents in **Insights**. 1. Go to `AI Decisioning > Insights`. 2. Select the `Creative Performance` view. 3. In the `Break down by` dropdown, choose a tag key such as `incentive_type`, `tone`, or `motivator`. If your workspace uses these tag keys consistently, they'll appear as available breakdown fields. ![Insights – Creative overview by tag: incentive type across all content](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-insights-creative-overview.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=962624cf11cc0ff598e3639b502c9985) The table shows how each tag value performs across your agents and messages, including: * **Sends** — total number of messages delivered for each tag value * **Key conversion events** — such as purchases, sign-ups, or other tracked actions * **Engagement metrics** — including click-through rate (CTR), open rate, or conversion rate **Example** Breaking down by `incentive_type` reveals which offers drive the strongest results. For example, `fixed_discount` may outperform `free_shipping` or `free_gift` in conversion rate, helping you understand which incentive types resonate most across audiences. #### Drill-down views You can also **drill down** into a specific message or variant to explore deeper insights: * **Personalization insights** — Compare how engagement differs by user attributes such as device type, region, or affinity * **Timing insights** — Identify when messages perform best by day or time of day ![Drill-down views in Insights: personalization and timing](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-insights-drill.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=4da82e023edb6c56998f13aad246bf06) > [!TIP] > > Use the **Insights** tab to evaluate your content strategy at scale. > Tag-driven breakdowns connect creative attributes — such as incentive type, > tone, or motivator — to measurable performance outcomes. ### Content analysis Each message also includes **content-level insights** to help you understand relationships between creatives. In the message's `Content` tab, scroll to **Content analysis** to view: * **Tags** — Applied tags such as `Motivator: Efficiency` or `Value Proposition: Convenience` * **Similarity analysis** — Messages with similar structure, tone, or intent ![Content analysis and similarity analysis view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-content-analysis.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=82389150d2e71727ce2f2da96c2fbf1e) You can expand each comparison to see why messages are related. This helps you identify patterns in your creative library and understand how messages may influence model learning. > [!NOTE] > > **Content analysis** focuses on creative similarity and reuse, while the > **Insights** tab focuses on quantitative performance and impact. Use both to > understand what works and why. ## Manage and govern your tags As your tagging system grows, use these tools to keep tags consistent, apply them efficiently, and extend their use beyond analysis. ### Manage tags on the Tags page The **Tags** page (`AI Decisioning > Tags`) provides a centralized view of all tags in your workspace. Changes made here apply globally to every agent that uses the tag key. The **Tags** page separates tags into **Message tags**, **Variant tags**, and **Channel tags**. ![Tags page – message tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-message-tags-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bba4b6ede3e7749ea799ae21c876f04b) ![Tags page – variant tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-variant-tags-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=ff01724cd60cbf26cbf4bc38bbd9be5a) ![Tags page – channel tags](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-channel-tags-list.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8c9e3482e05800db78b983d4898c1b7d) | Action | Description | | - | - | | **View tags** | Review all tag keys, such as `product`, `tone`, or `incentive_type`, and their allowed values. | | **Create tags** | Define new tag keys and allowed values for messages or variants. | | **Edit tag values** | Rename or remove values to keep naming consistent. *(Tag keys can't be renamed — delete and recreate if needed.)* | | **Add tag instructions** | Specify when a tag or value should be applied to guide consistent tagging and improve AI suggestions. | | **Bulk apply tags with AI** | Use AI to classify many messages at once for a selected tag key. | | **Check consistency** | Confirm agents use the same key–value pairs, such as `tone = playful` or `product = bluelight`. | ![Product key value examples](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tagging-product-values.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=716edc5a7d09b7fc35cafbab005e0b96) ### Add tag instructions On the **Tags** page, hover over a tag key to reveal its options menu, then select **Edit tagging instructions**. In the **Edit tag descriptions** modal, add **tag-level** and **value-level instructions** that define when the tag — and each of its values — should be applied. Clear instructions improve consistency across teams and help AI apply tags more accurately. ![Tag instructions UI navigation](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tags-instructions-nav.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=35912d6c210d7d83f39526a20ed0572f) ![Edit tag descriptions modal](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tag-instructions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bb13cdbc6e35497084eae6d6bbf757b0) #### What to include in tag instructions Effective tag instructions answer one question: **When should this tag or value be used?** Good instructions help people tag consistently and give AI the context it needs to distinguish between similar values. #### Writing effective instructions When writing tag or value instructions: * Describe **when to apply** the tag or value * Explain **how it differs** from other values * Avoid generic definitions or restating the tag name * Use short, directive language #### Example: tag-level instructions **Tag:** `incentive_type` **Good instruction** Use this tag to classify the primary incentive offered in the message. Select the value that best represents the main benefit emphasized to the user. **Weak instruction** Indicates the type of incentive. #### Example: value-level instructions Value-level instructions are most useful when values are similar or easily confused, messages include multiple incentives or concepts, or you use AI-assisted tagging. **Tag:** `incentive_type` * **`discount`** Use when the message emphasizes a price reduction, percentage off, or limited-time deal. * **`free_gift`** Use when the message highlights a free item added to a purchase, regardless of purchase amount. * **`free_shipping`** Use when the message emphasizes waived shipping costs as the primary incentive. ### Use AI to suggest and apply tags > [!NOTE] > > AI-generated tags must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. AI can help you tag faster, whether you're working on a single message or tagging across your workspace. #### Generate tags for individual messages or variants When editing a message or variant, click `Generate tags with AI` to get suggestions based on your content. 1. Click `Generate tags with AI`. 2. Review the AI-generated tags. 3. Edit or remove any that don't fit your naming conventions. **Example suggestions** * Message: *"Earn double points on every booking this weekend"* → AI suggests `Loyalty`, `Limited Time Offer` * Variant: *"Book now to unlock rewards faster"* → AI suggests `Urgent CTA`, `Rewards Focused` ![Add AI generated tags in agents view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-agents-ai-generated.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=8e3f72fce82ee445e50effb1e5e13b25) ![Add AI generated tags in tags view](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-tags-ai-generated.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=747bb4c3f65fc82d5d2a4050e0355b3c) > [!NOTE] > > AI-suggested tags do not apply automatically. Always review suggestions before > saving to ensure accuracy and consistency. #### Bulk-apply tags on the Tags page To tag many messages at once, select the messages, then use **Actions** to **Let AI tag** the selected messages or **Manually tag** them. To apply AI tags for a single tag key across messages, hover over the tag key and select the **magic wand** button. ![Bulk apply AI tags on the Tags page](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/ai-decisioning/tags/aid-bulk-ai-tags.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=a5efcc64110744dc4c16c4e1a87c6701) ### Set send frequency caps using tags You can also use tags to apply **send frequency caps** more granularly. This helps you control how often users receive messages within specific categories, such as by business unit or product line. For example, if your agent includes messages across multiple business units, you can tag each message with a `Business Unit` value such as `Insurance` or `Banking`, then set separate frequency caps for each one. This helps prevent users from receiving too many messages from the same category, even when the overall agent-level cap has not been reached. > [!NOTE] > > You can also set send frequency caps at the **channel level** (email, SMS, > push, and so on). You do not need to tag whether a message is email, push, or > SMS because AI Decisioning identifies the channel automatically. ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Tags not appearing in Insights | Agents not synced or tags missing | Check that each message or variant includes at least one tag and that Insights is enabled. | | Duplicate tags | Inconsistent naming, such as `Loyalty` vs. `Loyalty Campaign` | Delete duplicates on the **Tags** page. | | Unclear AI suggestions | Inconsistent message naming or unclear tag definitions | Review your tag list, instructions, and message copy for clearer context. | > [!NOTE] > > Tag visibility in Insights depends on your workspace's sync schedule. If you > recently applied tags, wait for the next sync cycle before results appear. ## Next steps After tagging your AID messages and variants, explore related features: * [Insights](/ai-decisioning/insights) to analyze tag performance across agents and messages. * [Inspector](/ai-decisioning/inspector) to inspect delivery behavior for individual users. * [Agents](/ai-decisioning/agents) to create agents that automate decisions. # Hightouch MCP Source: https://docs.hightouch.com/ai-integrations/mcp Connect your AI assistant directly to your marketing stack to build audiences, design journeys, generate creatives, and analyze performance in plain language. > [!NOTE] > > The Hightouch MCP must be enabled by Hightouch. [Contact us](#pylon-chat) to turn it on. ## Overview The Hightouch MCP server connects your AI assistant directly to your marketing stack so your team can build audiences, manage syncs, design journeys, generate emails and ads, and analyze performance — all in plain language. ## What you can do * **All customers:** Understand your customer schema, build audiences, create and analyze journeys, manage syncs, and create syncs from templates. Run marketing data analysis with Hightouch's AI agents. * **Lifecycle Studio Customers:** Build and iterate on email and SMS content. * **Ad Studio Customers:** Generate visual ad creatives from a prompt, refine them with follow-up instructions, and browse existing projects. ## How it works Connect to Hightouch's MCP from Claude, ChatGPT, or another AI assistant you already use, and build audiences, draft campaigns, or analyze performance through conversation. Your assistant uses Hightouch's MCP as needed to gather information and take action, and you can see results in real time, iterate, and save when you're happy with the outcome. Example use cases: * *"Create an audience of customers that added an item to their cart in the last day but haven't completed a transaction, then create a sync to Braze."* * *"Show me which email campaigns drove the most conversions last quarter, and how did they perform compared to the quarter before?"* * *"Create creatives for our new card promo targeted towards working adults in high-net-worth households."* ## Why use the Hightouch MCP **Work in your existing flow and across your stack.** If your team already works in Claude or another AI assistant, Hightouch is now accessible from that same interface. Because your assistant can connect to other tools simultaneously, you can orchestrate entire workflows in one conversation — get insights from Hightouch, draft a report, and send it to your team on Slack without switching tabs. **Gives your assistant the context it needs.** The MCP server connects you to Hightouch's agents, which have all the relevant skills and context about your business and data to build the right audiences, journeys, and campaigns out of the box, without you having to re-explain your business context every time. **Built for action.** Your assistant can create and save audiences, design journeys, and generate creatives, not just describe what's possible. ## FAQ **Is my data safe?** Yes. All operations are scoped to your authenticated Hightouch workspace and respect your existing role-based access controls. **Can the MCP take actions in my workspace, or is it read-only?** Both. Your assistant can read your schema and explore your data, and also take actions — like creating and saving audiences, designing journeys, and generating creatives. **Do we charge for MCP access?** No. Access to the MCP is no additional cost. **Do I need to be technical to use this?** No. The MCP is designed for marketers. You interact in plain English, and the assistant handles the underlying logic. **Which AI client should I use?** Any AI client that supports the MCP standard can connect to Hightouch — including Claude, ChatGPT, Gemini Enterprise, Microsoft Copilot, and more. # Snowflake CoWork Source: https://docs.hightouch.com/ai-integrations/snowflake-cowork Use Snowflake CoWork to explore your Hightouch models and audiences using natural-language questions powered by your warehouse. ## Before you begin * A Snowflake account with required privileges (e.g., ACCOUNTADMIN or equivalent role to create Network Rules, Secrets, and Integrations). * A Hightouch API key. * At least one model configured in Hightouch. ## Overview [**Snowflake CoWork**](https://www.snowflake.com/en/product/snowflake-cowork/) is Snowflake’s Enterprise Intelligence Agent, conversational AI assistant that helps you explore warehouse data and connected systems using natural language. By integrating Snowflake CoWork with Hightouch, you can ask questions about your Customer Studio models, customer segments, activation campaigns, and audience performance directly from Snowflake. This guide explains how to let Snowflake CoWork fetch **Hightouch model metadata** (such as model name, description, and query type) using the Hightouch [**Models API**](/api-reference/list-models). ## How Snowflake CoWork works with Hightouch Snowflake CoWork can call external APIs using Snowflake’s **External Access Integrations (EAIs)**. When you authorize Snowflake to call the Hightouch Models API, Snowflake CoWork can: * Retrieve a list of your Hightouch models * Identify which models power visual audiences * Read model descriptions and query types * Reference this metadata when answering user questions Hightouch continues to remain the system of record for model definitions—Snowflake only receives the metadata needed to answer questions. > [!NOTE] > > Snowflake CoWork does *not* modify, create, or run Hightouch models.\ > It simply enriches your warehouse-level conversations with Hightouch model context. ## Example questions you can ask Once connected, Snowflake CoWork can answer questions such as: * "What audiences have we built that target churned customers?" * "Which segments am I sending to my email platform?" * “Which of my audiences was updated most recently?” ## Example setup: Calling the Hightouch Models API from Snowflake CoWork This example shows how to configure Snowflake CoWork to call the Hightouch Models API. You can extend this pattern to connect Snowflake CoWork with other Hightouch APIs like our Destinations API for activation insights or Events API for real-time customer behavior, creating a comprehensive conversational interface. ### 1. Use a Snowflake role with integration privileges ```sql theme={null} USE ROLE ACCOUNTADMIN; USE DATABASE DEMO_DB; USE SCHEMA PUBLIC; ``` ### 2. Create a network rule Allows Snowflake to connect to the Hightouch API. ```sql theme={null} CREATE OR REPLACE NETWORK RULE hightouch_rule MODE = egress TYPE = host_port VALUE_LIST = ('api.hightouch.com:443'); ``` ### 3. Create a secret with your Hightouch API key ```sql theme={null} CREATE OR REPLACE SECRET hightouch_api_key TYPE = generic_string SECRET_STRING = ''; ``` > [!NOTE] > > **Note:** Replace `` with your actual Hightouch API key. Create an API key in your [workspace settings →](https://app.hightouch.com/settings/api-keys?from=docs). ### 4. Create the External Access Integration ```sql theme={null} CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION hightouch_eai ALLOWED_NETWORK_RULES = (hightouch_rule) ALLOWED_AUTHENTICATION_SECRETS = (hightouch_api_key) ENABLED = TRUE; ``` ### 5. Create a stored procedure to call the Hightouch Models API ```sql theme={null} CREATE OR REPLACE PROCEDURE CALL_HIGHTOUCH_API() RETURNS STRING LANGUAGE PYTHON RUNTIME_VERSION = '3.10' PACKAGES = ('requests','snowflake-snowpark-python') EXTERNAL_ACCESS_INTEGRATIONS = (HIGHTOUCH_EAI) SECRETS = ('cred' = HIGHTOUCH_API_KEY) HANDLER = 'main' AS $$ import _snowflake import requests import json def main(): """ Calls the Hightouch models endpoint """ api_key = _snowflake.get_generic_secret_string('cred') url = "https://api.hightouch.com/api/v1/models" headers = { "Authorization": f"Bearer {api_key}", } try: resp = requests.get(url, headers=headers, timeout=30) resp.raise_for_status() return json.dumps(resp.json()) except Exception as e: return f"Error: {str(e)}" $$; ``` ### 6. Test your connection ```sql theme={null} CALL CALL_HIGHTOUCH_API(); ``` You should receive a JSON list of your Hightouch models. > [!NOTE] > > If you receive an empty response, verify that the API key’s user has access to Models in Hightouch. ## Enable Snowflake CoWork to use the procedure Create a Snowflake CoWork agent that can call the stored procedure. ```sql theme={null} CREATE OR REPLACE AGENT hightouch_agent WITH PROFILE='{ "display_name": "Hightouch Agent" }' COMMENT=$$ Enables users to interact with the Hightouch API $$ FROM SPECIFICATION $$ { "models": { "orchestration": "auto" }, "orchestration": {}, "instructions": { "orchestration": "This is a simple agent for general knowledge with access to the Hightouch API" }, "tools": [ { "tool_spec": { "type": "generic", "name": "hightouch_models", "description": "{\n \"name\": \"hightouch_models\",\n \"description\": \"Fetch Hightouch models. If the user asks about audiences, they are referring to models with query_type = 'visual'\",\n \"parameters\": { \"type\": \"object\", \"properties\": {}, \"required\": [] },\n \"example_payload\": {},\n \"stored_proc_call\": \"CALL CALL_HIGHTOUCH_API();\"\n }", "input_schema": { "type": "object", "properties": {}, "required": [] } } } ], "tool_resources": { "hightouch_models": { "execution_environment": { "type": "warehouse", "warehouse": "" }, "identifier": "DEMO_DB.PUBLIC.CALL_HIGHTOUCH_API", "name": "CALL_HIGHTOUCH_API", "type": "procedure" } } } $$; ``` ## Troubleshooting | Issue | Likely cause | Resolution | | - | - | - | | Empty API response | API key lacks required permissions | Use an admin-level API key or adjust permissions | | Network rule error | Incorrect host or missing port | Ensure `api.hightouch.com:443` is configured | | “EAI not found” | Integration wasn’t created in the active database/schema | Recreate using the same database/schema as the procedure | | Snowflake agent cannot call the procedure | Missing tool spec or stored procedure reference | Recreate the agent using the example spec | ## Next steps * [Explore your Hightouch models](/models/creating-models) * [Learn more about the Hightouch Models API](/api-reference/list-models) * [Review Snowflake's guide to Snowflake CoWork](https://www.snowflake.com/en/product/snowflake-cowork/) # Approve Sync Draft Source: https://docs.hightouch.com/api-reference/approve-sync-draft https://api.hightouch.io/api/swagger.json post /syncs/{syncId}/drafts/{draftId}/approve Approve a sync draft and apply its change. Fails with 409 and applies nothing when the draft or the sync changed after the versions you send. # Capture a signup Source: https://docs.hightouch.com/api-reference/capture-a-signup https://api.hightouch.io/api/swagger.json post /signups Record a signup: consent for a delivery handle, plus the fields the form collected. Whether consent settles immediately or waits for a double opt-in confirmation is the channel's configuration, so one call covers both and the response says which happened. # Clone Decision Engine Message Source: https://docs.hightouch.com/api-reference/clone-decision-engine-message https://api.hightouch.io/api/swagger.json post /decision-engine/flow/{flowId}/messages/{messageId}/clone Clone a message within a flow. The copy keeps the source message's config, tags, guardrails, and variables, and is created disabled. # Create an Event Contract Source: https://docs.hightouch.com/api-reference/create-an-event-contract https://api.hightouch.io/api/swagger.json post /events/contracts Create a new event contract # Create an Event Domain Source: https://docs.hightouch.com/api-reference/create-an-event-domain https://api.hightouch.io/api/swagger.json post /events/domains Create a new event domain, with its events and components. # Create Decision Engine Message Source: https://docs.hightouch.com/api-reference/create-decision-engine-message https://api.hightouch.io/api/swagger.json post /decision-engine/flow/{flowId}/messages Create a message in a flow # Create Destination Source: https://docs.hightouch.com/api-reference/create-destination https://api.hightouch.io/api/swagger.json post /destinations Create a new destination # Create Model Source: https://docs.hightouch.com/api-reference/create-model https://api.hightouch.io/api/swagger.json post /models Create a new model # Create Source Source: https://docs.hightouch.com/api-reference/create-source https://api.hightouch.io/api/swagger.json post /sources Create a new source # Create Sync Source: https://docs.hightouch.com/api-reference/create-sync https://api.hightouch.io/api/swagger.json post /syncs Create a new sync A sync either owns its configuration (`destinationId` and `configuration`) or is created from a sync template (`syncTemplateId`). A sync created from a template uses the template's destination and configuration, and may set the fields the template's `overrideConfig` marks as overridable through `syncTemplateOverrides`. The effective configuration is validated for the destination either way, and `configuration.` errors on a template sync refer to that merged configuration. In a workspace that requires sync templates for audience activation, a sync on an audience must be created from a sync template. # Create Sync Template Source: https://docs.hightouch.com/api-reference/create-sync-template https://api.hightouch.io/api/swagger.json post /sync-templates Create a new sync template A sync template holds a destination configuration that syncs created from it share. `overrideConfig` names the configuration fields those syncs may set for themselves; every other field is locked to the template's value. Create a sync from the template with `POST /syncs` and `syncTemplateId`. # Delete Decision Engine Message Source: https://docs.hightouch.com/api-reference/delete-decision-engine-message https://api.hightouch.io/api/swagger.json delete /decision-engine/flow/{flowId}/messages/{messageId} Delete a message. The message is soft-deleted and disabled in the flow, so it is no longer returned by the API and is ineligible for future sends. # Delete Model Source: https://docs.hightouch.com/api-reference/delete-model https://api.hightouch.io/api/swagger.json delete /models/{modelId} Delete a model Deletes a model based on its Hightouch ID. Any syncs that use the model are deleted as well. Deleting a parent model also deletes every audience built on it. A model that is still referenced by a journey, priority list, decision engine agent, dynamic content condition, saved chart, or identity resolution graph cannot be deleted until those references are removed. # Delete Sync Source: https://docs.hightouch.com/api-reference/delete-sync https://api.hightouch.io/api/swagger.json delete /syncs/{syncId} Delete a sync # Get an audience size Source: https://docs.hightouch.com/api-reference/get-an-audience-size https://api.hightouch.io/api/swagger.json get /models/{modelId}/size/{jobId} Get the state of an audience size job. # Get Contract Source: https://docs.hightouch.com/api-reference/get-contract https://api.hightouch.io/api/swagger.json get /events/contracts/{contractId} Retrieve a contract based on its contract ID # Get Decision Engine Flow Source: https://docs.hightouch.com/api-reference/get-decision-engine-flow https://api.hightouch.io/api/swagger.json get /decision-engine/flow/{flowId} Retrieve a decision engine flow by ID # Get Decision Engine Message Source: https://docs.hightouch.com/api-reference/get-decision-engine-message https://api.hightouch.io/api/swagger.json get /decision-engine/flow/{flowId}/messages/{messageId} Get a single message by flow and message ID # Get Destination Source: https://docs.hightouch.com/api-reference/get-destination https://api.hightouch.io/api/swagger.json get /destinations/{destinationId} Retrieve a destination based on its Hightouch ID # Get Domain Source: https://docs.hightouch.com/api-reference/get-domain https://api.hightouch.io/api/swagger.json get /events/domains/{domainId} Retrieve a domain by its id, including its events and components. # Get Model Source: https://docs.hightouch.com/api-reference/get-model https://api.hightouch.io/api/swagger.json get /models/{modelId} Retrieve models from model ID # Get reprocessing status Source: https://docs.hightouch.com/api-reference/get-reprocessing-status https://api.hightouch.io/api/swagger.json get /idr/{graphId}/reprocess-status/{requestId} Get the status of a reprocessing request # Get send delivery statuses Source: https://docs.hightouch.com/api-reference/get-send-delivery-statuses https://api.hightouch.io/api/swagger.json post /campaigns/{campaignId}/sends/batch-get Get the delivery status of up to 100 sends in a single request, using the `sendId` values returned from the start endpoint. Prefer this over polling the single-send endpoint once per `sendId`. # Get Source Source: https://docs.hightouch.com/api-reference/get-source https://api.hightouch.io/api/swagger.json get /sources/{sourceId} Retrieve source from source ID # Get Sync Source: https://docs.hightouch.com/api-reference/get-sync https://api.hightouch.io/api/swagger.json get /syncs/{syncId} Retrieve sync from sync ID # Get Sync Draft Source: https://docs.hightouch.com/api-reference/get-sync-draft https://api.hightouch.io/api/swagger.json get /syncs/{syncId}/drafts/{draftId} Retrieve a sync draft with the sync as it is now and as approval would leave it. Send its `draftVersion` and `resourceVersion` to approve it. # Get Sync Template Source: https://docs.hightouch.com/api-reference/get-sync-template https://api.hightouch.io/api/swagger.json get /sync-templates/{syncTemplateId} Retrieve a sync template given its ID # API reference Source: https://docs.hightouch.com/api-reference/index Endpoints for managing syncs, models, sources, destinations, and other Hightouch resources with the REST API. ## Base URL Send every request to `https://api.hightouch.com/api/v1`. ## Authentication Authenticate with a Hightouch API key in the `Authorization` header as a bearer token: ```bash theme={null} curl https://api.hightouch.com/api/v1/syncs \ -H "Authorization: Bearer " ``` Each key belongs to one workspace and inherits the permissions of a user group. To create a key and choose its permissions, see the [API overview](/developer-tools/api-guide). ## Try a request Each endpoint page has an API playground. Enter your API key, fill in the parameters, and send the request to see the live response. # List Decision Engine Flows Source: https://docs.hightouch.com/api-reference/list-decision-engine-flows https://api.hightouch.io/api/swagger.json get /decision-engine/flows List decision engine flows in the workspace # List Decision Engine Messages Source: https://docs.hightouch.com/api-reference/list-decision-engine-messages https://api.hightouch.io/api/swagger.json get /decision-engine/flow/{flowId}/messages List messages for a flow # List Destinations Source: https://docs.hightouch.com/api-reference/list-destinations https://api.hightouch.io/api/swagger.json get /destinations List the destinations in the user's workspace # List Drafts for a Sync Source: https://docs.hightouch.com/api-reference/list-drafts-for-a-sync https://api.hightouch.io/api/swagger.json get /syncs/{syncId}/drafts List one sync's drafts, oldest change first. # List Event Contracts Source: https://docs.hightouch.com/api-reference/list-event-contracts https://api.hightouch.io/api/swagger.json get /events/contracts List all event contracts in the current workspace # List Event Domains Source: https://docs.hightouch.com/api-reference/list-event-domains https://api.hightouch.io/api/swagger.json get /events/domains List all event domains in the current workspace. Optional query `source`: filter to domains linked to that event source (slug). When set, returned components are also filtered to those applicable to the source. # List IDR runs Source: https://docs.hightouch.com/api-reference/list-idr-runs https://api.hightouch.io/api/swagger.json get /idr/{graphId}/runs List runs for a given IDR graph # List Match Booster enrichment runs Source: https://docs.hightouch.com/api-reference/list-match-booster-enrichment-runs https://api.hightouch.io/api/swagger.json get /models/{modelId}/match-booster/runs List Match Booster enrichment runs for a model, most recent first. # List Models Source: https://docs.hightouch.com/api-reference/list-models https://api.hightouch.io/api/swagger.json get /models List all the models in the current workspace including parent and related models # List Sources Source: https://docs.hightouch.com/api-reference/list-sources https://api.hightouch.io/api/swagger.json get /sources List all the sources in the current workspace # List Sync Drafts Source: https://docs.hightouch.com/api-reference/list-sync-drafts https://api.hightouch.io/api/swagger.json get /syncs/drafts List sync drafts across every sync in the workspace, oldest change first. Poll with `status=pending` and read every page each time: the list shows the current state, not a feed of changes. # List Sync Runs Source: https://docs.hightouch.com/api-reference/list-sync-runs https://api.hightouch.io/api/swagger.json get /syncs/{syncId}/runs List all sync runs under a sync # List Sync Templates Source: https://docs.hightouch.com/api-reference/list-sync-templates https://api.hightouch.io/api/swagger.json get /sync-templates List all the sync templates in the current workspace # List Syncs Source: https://docs.hightouch.com/api-reference/list-syncs https://api.hightouch.io/api/swagger.json get /syncs List all the syncs in the current workspace # Queue identifier values for reprocessing Source: https://docs.hightouch.com/api-reference/queue-identifier-values-for-reprocessing https://api.hightouch.io/api/swagger.json post /idr/{graphId}/queue-for-reprocessing Trigger an async job to queue identifier values for reprocessing, optionally adding them to the blocklist. If `block` is true (the default), identifier values will be added to the blocklist and ignored in future runs. Clusters containing these identifier values will be queued for reprocessing. # Reject Sync Draft Source: https://docs.hightouch.com/api-reference/reject-sync-draft https://api.hightouch.io/api/swagger.json post /syncs/{syncId}/drafts/{draftId}/reject Reject a sync draft. The draft closes without applying its change; to try again, the requester edits the sync. # Start an audience size job Source: https://docs.hightouch.com/api-reference/start-an-audience-size-job https://api.hightouch.io/api/swagger.json post /models/{modelId}/size Start a background job to compute audience size. # Sync sequence status Source: https://docs.hightouch.com/api-reference/sync-sequence-status https://api.hightouch.io/api/swagger.json get /sync-sequences/runs/{syncSequenceRunId} Get the status of a sync sequence run. # Trigger an API campaign send Source: https://docs.hightouch.com/api-reference/trigger-an-api-campaign-send https://api.hightouch.io/api/swagger.json post /campaigns/{campaignId}/trigger Start an API-triggered campaign: send to the given recipients. # Trigger Decision Engine Flow Run Source: https://docs.hightouch.com/api-reference/trigger-decision-engine-flow-run https://api.hightouch.io/api/swagger.json post /decision-engine/flow/{flowId}/run Trigger a decision engine run for a specific flow # Trigger ID graph run Source: https://docs.hightouch.com/api-reference/trigger-id-graph-run https://api.hightouch.io/api/swagger.json post /id_graphs/{graphId}/trigger DEPRECATED: use `/idr/{graphId}/trigger` instead # Trigger IDR run Source: https://docs.hightouch.com/api-reference/trigger-idr-run https://api.hightouch.io/api/swagger.json post /idr/{graphId}/trigger Trigger a new IDR run for a graph # Trigger Match Booster enrichment Source: https://docs.hightouch.com/api-reference/trigger-match-booster-enrichment https://api.hightouch.io/api/swagger.json post /models/{modelId}/match-booster/trigger Trigger a Match Booster enrichment run for a model. The model must have Match Booster enabled. # Trigger Sync Source: https://docs.hightouch.com/api-reference/trigger-sync https://api.hightouch.io/api/swagger.json post /syncs/{syncId}/trigger Trigger a new run for the given sync. If a run is already in progress, this queues a sync run that will get executed immediately after the current run completes. # Trigger Sync From ID or Slug Source: https://docs.hightouch.com/api-reference/trigger-sync-from-id-or-slug https://api.hightouch.io/api/swagger.json post /syncs/trigger Trigger a new run globally based on sync id or sync slug If a run is already in progress, this queues a sync run that will get executed immediately after the current run completes. # Trigger Sync sequence Source: https://docs.hightouch.com/api-reference/trigger-sync-sequence https://api.hightouch.io/api/swagger.json post /sync-sequences/{syncSequenceId}/trigger Trigger a new run for the given sync sequence. A sequence never runs concurrently with itself. If a run is already in progress, then where run queueing is enabled for the workspace, a single follow-up run is queued and starts after the current run completes (repeated triggers return the same queued run); otherwise the id of the run already in progress is returned. # Update an Event Contract Source: https://docs.hightouch.com/api-reference/update-an-event-contract https://api.hightouch.io/api/swagger.json patch /events/contracts/{contractId} Update an existing event contract Patch an event contract based on its Hightouch ID # Update an Event Domain Source: https://docs.hightouch.com/api-reference/update-an-event-domain https://api.hightouch.io/api/swagger.json patch /events/domains/{domainId} Update an existing event domain, replacing its events and components. # Update Decision Engine Message Source: https://docs.hightouch.com/api-reference/update-decision-engine-message https://api.hightouch.io/api/swagger.json patch /decision-engine/flow/{flowId}/messages/{messageId} Update a message # Update Destination Source: https://docs.hightouch.com/api-reference/update-destination https://api.hightouch.io/api/swagger.json patch /destinations/{destinationId} Update an existing destination Patch a destination based on its Hightouch ID # Update Model Source: https://docs.hightouch.com/api-reference/update-model https://api.hightouch.io/api/swagger.json patch /models/{modelId} Update an existing model Patch a model based on its Hightouch ID # Update Source Source: https://docs.hightouch.com/api-reference/update-source https://api.hightouch.io/api/swagger.json patch /sources/{sourceId} Update an existing source Patch a source based on its Hightouch ID # Update Sync Source: https://docs.hightouch.com/api-reference/update-sync https://api.hightouch.io/api/swagger.json patch /syncs/{syncId} Update an existing sync Patch a sync based on its Hightouch ID. A sync bound to a sync template takes its configuration from the template: change this sync's values with `syncTemplateOverrides`, bind it to another template or detach it with `syncTemplateId`, but do not set `configuration` while it is bound. In a workspace that requires sync templates for audience activation, a sync on an audience cannot be detached from its template. # Update Sync Template Source: https://docs.hightouch.com/api-reference/update-sync-template https://api.hightouch.io/api/swagger.json patch /sync-templates/{syncTemplateId} Update an existing sync template Patch a sync template based on its Hightouch ID. The `destinationId` of a sync template cannot be changed after creation. Syncs created from the template pick up a new `configuration` on their next run; a new `overrideConfig` replaces the previous one and applies to the next write of each sync's `syncTemplateOverrides`. # Charts Overview Source: https://docs.hightouch.com/campaign-intelligence/charts Learn what how to configure, save, and update charts ## Chart types Charts are the building blocks of Hightouch's Intelligence features. We currently support several chart types: * [Insights](/campaign-intelligence/insights): Analyze audience composition, breakdowns, and performance. * [Funnels](/campaign-intelligence/funnels): Identify drop-off points across a sequence of events. * [Splits](/campaign-intelligence/splits): Measure results of experiments between randomized groups. ## Key elements While the analysis varies between chart types, the general anatomy stays consistent across them. ![Chart Anatomy](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/campaign-intel/chart_definitions.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=abb0b342e7e5bed84430997af462eafb) * **Parent model:** The dataset for your analysis, defined in the schema setup step. * **Chart type:** The analysis type (Insights, Funnels, Splits). * **Metrics:** An aggregation over events. Metrics can have an aggregation type, filters, and an attribution window. Metrics can be on the cohort level (sum of purchases for all users) or on the user level (average purchase amount per user). * **Segment by:** The segment of users to include in the analysis. Default is to include the entire parent model. You can select multiple existing audiences or create inline audiences. If using an attribution window, events are only included if the user falls within the attribution window for the audience-metric pair. * **Group by:** The dimension to breakdown a metric by. There are several types of dimensions: * User properties: Attributes, traits, or merge columns of a user. Examples: gender, state, loyalty status * Event properties: Attributes on the specific event. Examples: brand, campaign, utms. * Related properties: Attributes on a related model. Examples: item, item property. * **Time interval:** Time granularity for metric rollup (daily, weekly, monthly). For example, sessions from distinct users per day = DAU, per week = WAU. * **Time window:** The time period for analysis. Events outside this window won't contribute to metrics. * **Saved charts:** Drawer showing all saved charts across the workspace. * **Export as CSV:** Option to download the chart's datapoints as CSV. * **Sampling:** For parent models that have Sampling turned on, enable `Fast queries` to query a sampled percentage of your parent model. * **Mode:** The type of data aggregation (`Over time` or `Cumulative`) when viewing time-series charts (Line, Column, and Area). * **Visualization:** The type of data visualization (Line, Column, Area, Bar, Table, Heat map, Number). # Dashboards Source: https://docs.hightouch.com/campaign-intelligence/dashboards Use dashboards to combine saved charts into a single, visual workspace where you can analyze trends, validate campaign logic, and monitor performance.