Skip to content

Klaviyo

In the following example, we will be sending user data to Seen for video generation, and receiving a unique video player link and personalised email thumbnail back to Klaviyo for distribution.

This example uses a POST webhook in Klaviyo Flows to send data to Seen, and an event to receive the data back to Klaviyo.

This example assumes that a Project with a published video already exists in your Seen Platform Workspace.

Send data to Seen

  1. Create a new Flow in Klaviyo.
  2. Choose your trigger.
  3. Add Webhook as the next step, give it a name, and fill it out with the following:
    • Destination URL ⇒ https://next.seen.io/v1/projects/{Project_ID}/data (find the endpoint from your project's Run tab)
    • Headers
      • Key ⇒ Authorization
      • Value ⇒ Bearer {token} (create a token from your project's Run tab)
    • JSON Body. You can use the code snippet below as the starting point for the payload (remember to modify it based on the personalisations in your video campaign; see Create Data for the payload structure):
      json
      {
        "first_name": "{{ person.first_name }}",
        "last_name": "{{ person.last_name }}",
        "id": "{{ person.id }}"
      }
  4. You can now test the webhook with a test profile.

Receive data back from Seen

  1. In your project's Run tab, click on Add webhook.

  2. Configure the webhook with the following details:

    FieldValue
    MethodPOST
    URLhttps://a.klaviyo.com/api/events

Headers

HeaderValue
Content-Typeapplication/vnd.api+json
Acceptapplication/vnd.api+json
AuthorizationKlaviyo-API-Key {{your API key}}
revision2026-07-15

Remember to check the latest revision date from Klaviyo's documentation.

Request Content

json
{
  "data": {
    "type": "event",
    "attributes": {
      "properties": {
        "seen_player": "{{ Player link }}",
        "seen_thumbnail": "{{ Email thumbnail link }}"
      },
      "backfill": false,
      "metric": {
        "data": {
          "type": "metric",
          "attributes": {
            "name": "SEEN"
          }
        }
      },
      "profile": {
        "data": {
          "type": "profile",
          "id": "{{ id }}"
        }
      }
    }
  }
}

Remember to change the variables from the example to the actual placeholders, and to review the payload content before saving.

  1. You can now test the full flow.