Skip to main content

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.

Klaviyo Flows can call into Omneo using Klaviyo’s webhook action. This lets you fire Omneo-side logic — issuing a reward, recording an interaction, granting a benefit — at exactly the right point in a customer journey. This page covers how to add and configure a webhook action against Omneo. For event-by-event behaviour of Klaviyo’s built-in system webhooks (bounces, subscribes, unsubscribes), see System webhooks.

Add a webhook action to your Flow

1

Open or create a Flow

In Klaviyo, navigate to Flows, then open the Flow you want to extend or create a new one.
2

Drag in a Webhook action

From the action sidebar, drag a Webhook action onto the canvas after your trigger or filter steps.
3

Configure the destination URL

Set the Destination URL to the relevant Omneo extension endpoint (see Available endpoints below).
4

Add headers and body

Add the headers and JSON body shown below for the action you want Omneo to perform.
5

Preview, save, and activate

Use Klaviyo’s Preview feature to render the JSON for a real profile and confirm the values look right, then save the Flow and switch it live.

Required headers

Every webhook call into Omneo must include the shared secret configured against the extension. This is the same secret used by Klaviyo system webhooks.
HeaderValue
Content-Typeapplication/json
x-omneo-secretThe Webhook Secret configured in the extension settings
Requests without a matching x-omneo-secret are rejected. Treat this secret like an API key — store it only in Klaviyo’s secured webhook configuration.

Available endpoints

The extension exposes a small set of Flow webhook endpoints. Each is mounted under your tenant on the extension URL provided by Omneo:
https://<your-extension-url>/<tenant>/api/v1/webhooks/klaviyo/<action>

Rewards

POST /<tenant>/api/v1/webhooks/klaviyo/rewards Issues a reward against the Omneo profile that triggered the Flow. Required fields
FieldDescription
person_idThe Klaviyo profile ID ({{ person.id }})
emailThe profile email — used as fallback if person_id cannot be matched
data.reward_definition_idThe Omneo reward definition to issue
data.amountThe reward value (integer or float)
Optional fields
FieldDescription
idUnique identifier used for deduplication. If supplied, Omneo will not create the reward again on retry. Stored as external_id on the reward.
data.metaFree-form metadata object stored against the reward
data.*Any additional fields pass straight through to the Omneo rewards API
Example body
{
  "id": "{{ event.reward_id }}",
  "person_id": "{{ person.id }}",
  "email": "{{ person.email }}",
  "data": {
    "reward_definition_id": 123,
    "amount": "{{ event.reward_amount }}",
    "meta": {
      "campaign": "{{ event.campaign_name }}"
    }
  }
}
Response codes
CodeMeaning
200Reward created, or already existed (idempotent)
400Missing required fields
404No Omneo profile found by person_id or email
500Internal error

Templating tips

Klaviyo exposes a limited set of variables inside Flow webhook bodies:
  • {{ person.id }}, {{ person.email }}, {{ person.first_name }}, {{ person.last_name }} — profile fields
  • {{ event.* }}only the custom event properties you have defined in your Flow. Internal Klaviyo metadata like unique_id and timestamp is not available here.
If you need a deduplication key but do not have a natural one, define a custom event property on your Flow (for example event.reward_id) and reference it as id in the JSON body.