> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omneo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connecting a Comms Platform

> How to connect your email and SMS platform to Omneo to send incentive and CX notifications.

Omneo does not send emails or SMS directly. Instead, it fires structured data payloads to your connected comms platform, which handles delivery. This separation keeps your email templates, send reputation, and unsubscribe management in the platform your marketing team already owns.

## How the connection works

1. You configure a **Target** in Omneo: a named endpoint with a Twig-templated JSON payload
2. Reactions include a `target.send` action referencing that target
3. When the reaction fires, Omneo renders the Twig template with the event context and POSTs the payload to your comms platform's API
4. The comms platform triggers the relevant email/SMS flow

## Supported comms platforms

Omneo can connect to any platform that accepts an inbound HTTP POST (webhook or API trigger). Common integrations include:

| Platform                   | Typical integration method             |
| -------------------------- | -------------------------------------- |
| Klaviyo                    | Server-side track event / identify API |
| Salesforce Marketing Cloud | Triggered Send API                     |
| Braze                      | Track Users / Track Event API          |
| Dotdigital                 | Transactional email API                |
| Yotpo (SMSBump)            | SMS API                                |
| Custom / in-house          | Webhook to your own middleware         |

## Setting up a Target

Go to **Settings → Targets** in CX Manager to create a new target. Required fields:

* **Name**: descriptive label (e.g., "Klaviyo: Reward Earned")
* **Handle**: used to reference the target in reactions
* **URL**: the endpoint on your comms platform
* **Headers**: authentication headers (API keys, Bearer tokens)
* **Body**: Twig-templated JSON payload

Example Klaviyo target body for a reward earned event:

```twig theme={null}
{
  "token": "{{ klaviyo_public_key }}",
  "event": "Reward Earned",
  "customer_properties": {
    "$email": "{{ profile.email }}",
    "$first_name": "{{ profile.first_name }}",
    "$last_name": "{{ profile.last_name }}"
  },
  "properties": {
    "reward_amount": {{ reward.amount }},
    "reward_balance": {{ profile.reward_balance }},
    "reward_expires_at": "{{ reward.expires_at }}"
  }
}
```

## Mapping Omneo data to your comms platform

Your comms platform needs the customer identifier to route the notification to the right contact. Typically this is email address. The Omneo event context exposes `profile.email`, `profile.mobile`, and all profile attributes via the Twig template.

For platforms that use their own contact ID (not email), you can store the external platform ID as an Omneo identity against the profile and reference it via `profile.identities.klaviyo_id` (or similar) in the target template.

## Testing a Target

Before connecting to production, use a service like [Pipedream](https://pipedream.com) or [Webhook.site](https://webhook.site) as your target URL. This lets you inspect the exact payload Omneo sends before pointing it at your live comms platform.

Steps:

1. Create a target pointing to your test URL
2. Manually trigger the relevant event on a test profile (via a test transaction, or manual reaction fire in CX Manager)
3. Inspect the payload in your test tool
4. Verify all template variables resolved correctly
5. Update the target URL to your comms platform once confirmed

## Comms preference centre

Omneo stores comms consent on the profile (`email_optin`, `sms_optin`, `push_optin` and category-level preferences). Before firing a notification via a target, reactions can filter on opt-in status to ensure you only send to consenting customers.

The Profile Portal includes a built-in comms preference centre that customers can use to manage their own preferences. Changes are synced back to the Omneo profile in real time.

<Note>
  Omneo stores consent status but does not enforce suppression at the send layer, your comms platform should also maintain suppression lists. The two sources should stay in sync.
</Note>
