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 system webhooks are the standard webhooks that Klaviyo fires when a profile bounces, subscribes, unsubscribes, or is suppressed. The extension registers these webhooks automatically on install — they are not visible to end users in the Klaviyo UI and do not need to be configured manually. When a system webhook arrives, the extension finds the matching Omneo profile, combines any consent changes from the event, updates the Omneo profile’s communication preferences, and records an interaction so the activity is tracked on the profile timeline.

Processing flow

  1. Receive the webhook at the extension’s system webhook endpoint and validate it.
  2. Queue the work on the inbound Cloud Tasks queue so processing happens in the background.
  3. Find the Omneo profile using the stored Klaviyo identity, or email as a fallback. If no profile is found, the event is skipped.
  4. Filter circular events — Any event where Klaviyo’s custom_method_detail is omneo was originally caused by Omneo itself and is silently ignored to prevent loops.
  5. Combine events for the same profile and merge their consent changes into a single payload.
  6. Stamp consent timestampsemail_consent_updated_at and sms_consent_updated_at are added whenever the corresponding consent fields change. Timestamps are written in Y-m-d H:i:s format.
  7. Update Omneo with the combined comms payload.
  8. Master list check — If a master list is configured, the profile is added to it if they are now subscribed.
  9. Create interactions — One interaction is created per event, with a positive, neutral, or negative signal.
Subscription status is never pushed back to Klaviyo from a system webhook. Klaviyo already made the change on its side and is the source of truth for that event — pushing back would create a sync loop.

Event reference

The table below summarises what each system webhook does to the Omneo profile. Comms changes lists the fields that are written; Signal indicates the type of interaction recorded.

Email events

EventComms changesSignal
bounced_email (hard)email_bounced: true, email_promo: false, email_optout: trueNeutral
bounced_email (soft)None (interaction only)Neutral
clicked_emailNonePositive
clicked_email_to_unsubscribeemail_promo: false, email_optout: trueNeutral
dropped_emailNoneNeutral
manually_suppressed_from_email_marketingemail_promo: false, email_optout: trueNegative
manually_unsuppressed_from_email_marketingemail_promo: true, email_optout: false, email_bounced: falsePositive
marked_email_as_spamemail_promo: false, email_optout: trueNegative
subscribed_to_email_marketingemail_promo: true, email_optout: false, email_consent_updated_at setPositive
unsubscribed_from_email_marketingemail_promo: false, email_optout: true, email_consent_updated_at setNegative
bounce_suppression_addedemail_promo: false, email_optout: trueNegative
invalid_email_suppression_addedemail_bounced: true, email_optout: trueNegative

SMS events

EventComms changesSignal
clicked_smsNoneNeutral
failed_to_deliver_smssms_bounced: trueNeutral
failed_to_deliver_automated_response_smsNoneNeutral
subscribed_to_sms_marketingsms_promo: true, sms_optout: falsePositive
subscribed_to_sms_transactionalsms_optout: falsePositive
unsubscribed_from_sms_marketingsms_promo: falseNegative
unsubscribed_from_sms_transactionalsms_optout: trueNegative

Push events

EventComms changesSignal
bounced_pushpush_bounced: trueNeutral

Combined event example

If a single batch contains a hard bounce and an unsubscribe for the same profile, the extension merges them into a single Omneo update:
Events:
  1. bounced_email (Hard)
  2. unsubscribed_from_email_marketing

Combined Omneo update:
  email_bounced = true
  email_promo = false
  email_optout = true
  email_consent_updated_at = 2024-01-15 10:30:00
This avoids redundant API calls and ensures the resulting Omneo profile state is consistent.