Skip to documentation content
Lifecycle recipes

Receive lifecycle events in Klaviyo

Each recipe sends one Klaviyo event. A flow triggered by that event’s metric sends the message.

All lifecycle guides · Checked against AXO’s adapters in October 2026.

Before you start

Connect Klaviyo in AXO first: see Connect Klaviyo. The integration must be active. In the dashboard, the Install button is off for read-only members.

When AXO sends

A recipe is installed as an ordinary AXO trigger, turned off. Once you turn it on, AXO watches for the moment, waits where the recipe waits, skips people who converted or are in their cooldown, and sends the event. Every lifecycle event needs the person’s marketing consent. A holdout group gets nothing so that the trigger’s lift can be measured. Event names:

  • Abandoned cart: axo.lifecycle.abandoned_cart
  • Abandoned browse: axo.lifecycle.abandoned_browse
  • Abandoned checkout: axo.lifecycle.abandoned_checkout
  • High-intent return: axo.lifecycle.high_intent_return
  • Lapsed visitor: axo.lifecycle.lapsed_visitor

Non-retail verticals

AXO recipes work across industries beyond retail by mapping equivalent conversion stages into lifecycle events:

  • Higher education: Admissions funnels emit application_abandoned. The items list carries the academic degree or certificate program name, while resume_url returns the applicant directly to their authenticated form session.
  • Healthcare and clinical services: Scheduling funnels emit appointment_abandoned. The payload carries the department or specialty name and booking link. Diagnostic details and health history are never included.
  • Financial services and SaaS: Quoting funnels emit quote_in_progress. The resume_url restores the visitor’s unfinished calculation directly in the multi-step form.

See Create a trigger for cooldowns, holdout and fire history.

Build the receiving side

AXO sends the event to Klaviyo’s Events API. The metric is named after the event (below) unless you enter a different metric name when you install the recipe. The profile is matched by every identifier the person has: email, phone number in E.164 form and external id. A person with none of those is sent with their AXO visitor id (or, without one, their AXO profile id) as anonymous_id.

  1. In AXO, install the recipe with your Klaviyo integration as a destination. It is installed turned off.
  2. On the trigger, choose Test fire, enter a test email address, choose Preview payload to check it, then Send test and Send now. Klaviyo creates the metric when the first event arrives, so this test makes it appear.
  3. In Klaviyo, create a flow and choose Metric as the trigger. Pick the metric with the recipe’s event name.
  4. Add your email or SMS steps. Use {{ event.resume_url }} for the link back and loop over event.items for products, as in the example below.
  5. Turn the flow on, then turn the trigger on in AXO (Turn on right after install, or Resume on the trigger).
{# Touch 1 (1–2 hours): Helpful cart reminder #}
<h2>You left items in your cart</h2>
<p><a href="{{ event.resume_url }}">Return to your cart</a></p>
{% for item in event.items %}
  <div>
    <strong>{{ item.name }}</strong> – {{ item.price }} {{ item.currency }}
  </div>
{% endfor %}

{# Touch 2 (24 hours): Social proof and assistance #}
<h2>Still deciding? Here is what other customers say</h2>
<p><a href="{{ event.resume_url }}">Complete your order</a></p>

{# Touch 3 (48–72 hours): Final cart expiration notice #}
<h2>Your cart will expire soon</h2>
<p><a href="{{ event.resume_url }}">Check out before your items sell out</a></p>

When the cart value is known, the event’s value is set to it and value_currency to its currency, so Klaviyo can report revenue for the flow. The event’s unique_id is the delivery_id: Klaviyo drops a second event with the same id, so a retried send does not enter the flow twice.

To update custom profile traits alongside the event, pass profile_properties (such as axo_segment or axo_intent_score) in the recipe destination mapping. Klaviyo will upsert those properties onto the customer’s profile.

Fields

Event properties, read in a flow as event.<field>.

FieldTypeMeaning
event_nametextThe canonical event name, also when you rename the metric or event.
recipe_idtextThe recipe that fired.
recipe_versionnumberThe recipe version the trigger was installed with.
fire_idtextAXO’s id for this send attempt.
delivery_idtextThe same on every attempt for one moment and one destination. Use it to drop duplicates. Test sends start with lcd_test_.
itemslistList of line items or viewed products, each with the item fields below.
item_countnumberNumber of entries in items.
cart_valuenumberCart value as a number, or null when unknown.
currencytextISO 4217 code such as USD, or null.
resume_urltextA link back to the cart or page. Real sends carry a vt_token that signs the person back in; test sends carry the plain link.
page_urltextThe page that started the moment.
site_domaintextYour site’s domain.

Item fields

Each entry in items has these fields.

FieldTypeMeaning
product_idtextProduct id (the numeric Shopify id for Shopify catalogs).
skutextSKU.
nametextProduct name.
urltextProduct page URL.
image_urltextProduct image URL.
pricenumberPrice as a number.
previous_pricenumberAlways null for now. It will hold the price before a drop once the catalog keeps price history.
currencytextISO 4217 code.
availabilitytextAvailability text from the catalog, such as in_stock.
quantitynumberQuantity in the cart. Null for viewed products.