Centra held products and orders. The Klaviyo plugin shipped the catalog and the events. Flows in Klaviyo were supposed to send receipts, shipping updates, back-in-stock. If a tag was one character off, Klaviyo did not error. It just never entered the flow.
An order in Centra. Nothing in the inbox. A back-in-stock email with a blank product block. A flow that looks "live" and a metric dropdown that does not list the name you invented in Slack.
I wanted order_placed because that is how I name things. The Centra Klaviyo plugin sends Placed Order. Same for Confirmed Order, Shipping Update, Cancelled Order, Refunded Order, Created Account, Reset Password, Ordered Product. Resends are not aliases. They are Placed Order - resend.
The plugin docs are rude about this, in a useful way: when you create a flow, tags need to match the list. Close enough is a different metric. A different metric is a flow that never starts.
Catalog lookup is the second half of the same contract. Top-level catalog product id is the Centra display-item id. That is what Placed Order / Ordered Product put on the line items. Back-in-stock hands you a compound VariantID like 12366_SE_00_23400. If you feed the whole string to {% catalog %}, Klaviyo looks up a product that does not exist. You split on _ and take the first part. That is the contract, not a style choice.
{% with idParts=event.VariantId|split:"_" %}
{% catalog idParts.0 %}
<p>The {{ catalog_item.title }} is back.</p>
{% endcatalog %}
{% endwith %}Prices and names in the catalog metadata are keyed by currency and language. lookup:"default" is not Dutch. lookup:customer_lang is, if Centra synced Language onto the profile.
I stopped inventing metric names. I copied the plugin list. Flows started firing. The shopper got a product image instead of a hole. Boring. Correct.
Happy coding!
Sander