Send Shopify orders to Klaviyo as server-side events
By the HonestTag team ยท Published October 16, 2026
HonestTag sends each verified Shopify purchase to Klaviyo from its server through Klaviyo's Create Event API, as a Placed Order event plus the one or two HonestTag goal metrics that order counts toward (new or returning customer, and first-click new customer), and sends refunds as Refunded Order events. Klaviyo is an email and SMS platform, not an ad platform, so there is no ad spend to read and no conversion goal to create. You connect it with a Klaviyo private API key, or by signing in to Klaviyo when the card offers it. This page lists what you need, the exact steps, what is sent, how it sits beside Klaviyo's own Shopify integration, and how to check it works.
What you need
- A Klaviyo account and the right role. Klaviyo's private API key article says: "You must be an Owner or Admin to create, clone, or delete a private API key."
- A private API key, or a Klaviyo sign-in. The key is a Custom Key with read access to Accounts and full access to Events and Profiles. Those are the scopes Klaviyo lists for the three calls HonestTag makes:
accounts:readfor Get Accounts,events:writefor Create Event andprofiles:writefor Create Profile. Klaviyo also says "Private API keys have full access by default", so choose Custom Key on purpose. When the card shows a Connect Klaviyo button, you can sign in to Klaviyo instead of making a key; the sign-in asks for the same three scopes. - HonestTag's pixel on your store. Klaviyo events are matched on HonestTag's random visitor ID or on Klaviyo's own click ID (
_kx) recorded when a shopper lands from a Klaviyo email. An order with neither is not sent to Klaviyo. - A paid HonestTag plan for delivery. The free Mirror never sends anything to Klaviyo. You can save the key on the Mirror, and delivery starts when you pick a paid plan. Klaviyo counts toward your plan's delivery limit and ranks after your ad platforms and ahead of Google Analytics 4, so when your plan's slots are all taken by ad platforms, Klaviyo is what waits. Profile matching by email (below) is on Truth+ and higher plans. See pricing.
Connect Klaviyo, step by step
- Open API keys in Klaviyo. In Klaviyo, click your organization name in the bottom left, then Settings, then API keys. Klaviyo says: "You must be an Owner or Admin to create, clone, or delete a private API key."
- Create a Custom Key. Click Create Private API Key and name it HonestTag. Choose a Custom Key and give it read access to Accounts and full access to Events and Profiles. A Full Access Key also works, but gives HonestTag more than it needs.
- Copy the key. Click Create and copy the key, which starts with
pk_. Klaviyo does not show it again, and an existing key's access cannot be changed later. - Paste it on the Klaviyo card. In your Shopify admin, open the HonestTag app, go to Setup, and find the Klaviyo card. If the card shows a Connect Klaviyo button, open Paste a private API key below it. Paste the key and choose Check the key and save.
- Check the card. HonestTag saves the key only after Klaviyo confirms it opens your account. The card then shows your Klaviyo account ID and whether profile matching by email is on for your plan.
When you save, HonestTag calls Klaviyo's Get Accounts with the key, which Klaviyo describes as a way to "test if a Private API Key belongs to the correct account prior to performing subsequent actions with the API." If Klaviyo refuses the key, nothing is saved. This check cannot prove Events and Profiles access without writing to your account, so a key missing either is caught at the first send and shown on the card as an alert.
Signing in instead. When the card shows Connect Klaviyo, choose it. Klaviyo asks you to approve HonestTag for one Klaviyo account; select Allow. HonestTag's Klaviyo app is not listed in Klaviyo's App Marketplace, and Klaviyo says that until an app is reviewed "users will receive an OAuth installation warning that your app has not been reviewed by Klaviyo." After the sign-in, HonestTag reads which account you approved and saves nothing unless Klaviyo names one. A store connected with a key can move to sign-in from the card at any time; the key keeps working until the sign-in completes. Do not move back from sign-in to a key. Klaviyo's metric branding page says: "While our system will handle the move from an API metric to a branded app metric, you cannot move from a branded app metric to an API metric - this will result in a divergent metric." On a store connected by sign-in, the card offers only Disconnect, not a key form.
What HonestTag sends to Klaviyo
Klaviyo has no conversion goals to set up. Instead, every purchase becomes a Placed Order event, which plays the role of HonestTag's All Purchases goal, and the same purchase is also sent under one or two goal metrics:
HonestTag_Purchase_NC: the buyer is a new customer.HonestTag_Purchase_RC: the buyer is a returning customer.HonestTag_Purchase_FCNC: a new customer whose first recorded click was on any paid ad platform. Klaviyo is not an ad platform, so this is HonestTag's own definition here, and the event carries afirst_click_platformproperty naming that platform.
HonestTag does not create these metrics at connect. Klaviyo's Events API overview says: "If the metric you provide does not match an existing one, a new metric will be created with its own metric_id." So each metric appears in your account after the first order that counts toward it. For how the same four goals work on ad platforms, see the HonestTag conversion actions.
Each event is one Create Event call to a.klaviyo.com/api/events/ and carries:
- The value and currency: the order value in
value, and the store currency invalue_currency, which Klaviyo defines as "The ISO 4217 currency code of the value associated with the event." The order value comes from the order total, net of tax, as for every destination. - The order time from Shopify, and a
unique_id: HonestTag's event ID derived from the order, the same on every retry. - Properties: the order name, the item count (a bundle counts once), and
customer_type,ncfor a new customer orrcfor a returning one. - The profile: the Klaviyo profile ID when HonestTag has one for this visitor; otherwise HonestTag's random visitor ID as the profile's
external_id, and Klaviyo's_kxwhen the pixel recorded one. Klaviyo describes_kxas "an encrypted identifier used for identifying a profile by Klaviyo's web tracking." No email address or phone number is ever placed in an event, and no product lines are sent.
Profile matching by email (Truth+ and higher plans). On the first order from a visitor that has an email address and no stored Klaviyo profile ID, HonestTag sends that email address to your Klaviyo account, unhashed, with Klaviyo's Create Profile call, so Klaviyo can find the shopper's existing profile. HonestTag keeps only the profile ID Klaviyo returns, for up to 365 days, and later events for that visitor use the profile ID. On other plans, an order from a visitor Klaviyo has not identified lands on a profile Klaviyo creates for HonestTag's visitor ID. The card's account line says which applies to your store.
Consent rules are the same as for every destination and are stated on the server-side delivery page; section B3 of the privacy policy lists what Klaviyo receives.
What HonestTag reads, and what it never touches
- Reads: your Klaviyo account ID, with Get Accounts, when you save and in HonestTag's connection health checks. Klaviyo is not an ad platform, so there is no spend to read and nothing appears in a spend column.
- Writes: the events above and, on Truth+ and higher plans, the profile lookup by email. Klaviyo's Create Event page notes that the endpoint "allows you to create a new profile or update an existing profile's properties", so a profile keyed on HonestTag's visitor ID can be created for an event.
- Never touches: flows, campaigns, lists, segments, templates or other metrics. HonestTag uses three Klaviyo data APIs (Create Event, Create Profile and Get Accounts) and deletes nothing in your account. A sign-in connection also refreshes its token, and is revoked at disconnect as described below.
Avoid counting a purchase twice
Retries. Klaviyo's rule, from the Create Event reference: "If the unique_id is repeated for the same profile and metric, only the first processed event will be recorded." HonestTag sends the same unique_id for an order on every attempt, so a retried delivery does not add a second Placed Order. If one goal metric fails after Placed Order was accepted, HonestTag retries the whole set, and Klaviyo keeps only the first copy of each.
Klaviyo's own Shopify integration. Klaviyo's Shopify data reference says: "The metrics with a Shopify icon represent all of the metrics synced from your Shopify integration", and lists Placed Order and Refunded Order among them. HonestTag's events are filed separately: sent with a key they are API metrics, which Klaviyo says "can be filtered by selecting API in the Metrics tab", and sent through a sign-in they are app metrics, which Klaviyo defines as "metrics created via OAuth." Klaviyo calls metrics that "share the same name, but come from different sources" "two or more distinct metrics with unique metric IDs." So a store with both on has two Placed Order metrics, and Klaviyo does not merge them. Build each flow, segment and report on one Placed Order metric, and check which one an existing flow is triggered on before you rely on HonestTag's. The duplicate purchase events guide shows how to find every purchase source on a store.
Refunds, edits and which orders are sent
- Refunds: each refund is sent as a Refunded Order event with the refunded amount, an
adjustment_typeproperty (RETRACTIONfor a full refund,RESTATEMENTfor a partial one), and agoalsproperty listing Placed Order and every goal metric the order counted toward, so a flow built onHonestTag_Purchase_NCcan see the refund too. HonestTag does not delete the Placed Order; the refund is a separate event. A refund is sent only when the order carries a HonestTag visitor ID; Klaviyo's click ID alone is not enough. Klaviyo's Shopify integration differs here: Klaviyo says it "only receives events from fully refunded orders (not partially refunded orders)." - Cancellations are sent the same way, as a full Refunded Order.
- Order edits and upsells: when an edit lowers the order value, the difference is sent as a Refunded Order. When an edit raises it, nothing is sent and order proof says why: "HonestTag corrects Klaviyo only with a Refunded Order event, and an added value is not a refund; Klaviyo keeps the order value sent at checkout".
- Which orders: orders from your online store are sent. Point of sale orders and subscription renewals are not sent to Klaviyo; the first order of a subscription is an online store checkout and is sent. Orders from other apps and sales channels are kept out unless you switch them on, as described in which orders are sent.
How to check it works
- On the card. After you save, the Klaviyo card says: "Klaviyo accepted the key for your account. Its Events and Profiles access is checked on the first send; missing access shows here as an alert." Its account line shows your Klaviyo account ID and whether profile matching by email is on.
- In HonestTag order proof. After the next online order from a visitor HonestTag recorded, open it in the HonestTag app. The proof shows Klaviyo, the delivery status and the metrics sent, for example Placed Order and
HonestTag_Purchase_NC. Klaviyo answers a Create Event call with HTTP 202, and its reference says a success "indicates that the event was validated and submitted for processing, but does not guarantee that processing is complete." So the proof reads accepted, not delivered. - In Klaviyo. Klaviyo's raw metric data article says: "To view raw metric or event data, go to the Analytics > Metrics." Open HonestTag's Placed Order metric (with a key, filter the Metrics tab by API), then "navigate to the Activity feed tab." From a row's three-dot menu, Activity Details shows the event's JSON. Klaviyo's Events API overview also says a created event appears "in the profile's activity feed in Klaviyo."
Error messages and what to do
- "paste your Klaviyo private API key. It starts with pk_" The field was empty.
- "this looks like your Klaviyo Public API key (the 6-character site ID)." That key is for Klaviyo's browser APIs. Create a private key under Settings, API keys, Create Private API Key.
- "a Klaviyo private API key starts with pk_, and this one does not." or "this is not a whole Klaviyo private API key" Copy the key again with Klaviyo's copy button, or create a new one.
- "Klaviyo did not accept this private API key." The key was mistyped, revoked, or belongs to a different Klaviyo account. Klaviyo's own reason follows when it gave one. Nothing was saved.
- "Klaviyo accepted the key, but it has No Access to Accounts" Klaviyo does not let you change an existing key's access, so create a new Custom Key with read access to Accounts and full access to Events and Profiles.
- "Klaviyo is limiting how often this check can run" Klaviyo's Get Accounts limit is one call a second and 15 a minute. Wait and save again.
- "Klaviyo did not grant ... Connect again and leave every permission on." The sign-in was approved without one of the three scopes. Sign in again.
- "Klaviyo accepted the sign-in but did not name the account it opens" Nothing was saved. Try the sign-in again in a minute.
- "Klaviyo recorded Placed Order but not HonestTag_Purchase_NC" (or another goal metric). One goal event failed; HonestTag retries the order, and Klaviyo's
unique_idrule keeps the events already accepted from being recorded twice. - Reconnect needed. When Klaviyo answers a delivery with HTTP 401 or 403, the key was deleted or lacks Events or Profiles access, or the sign-in was removed. The card asks you to reconnect: paste a new key, or sign in again.
Disconnecting
Disconnect from the Klaviyo card, or uninstall the app. Delivery stops at once and the stored key or sign-in is deleted. For a sign-in, HonestTag also asks Klaviyo to revoke it, as Klaviyo asks apps to do "when a user uninstalls your app from your platform." Everything already measured stays, per the published retention schedule. The events and metrics already in Klaviyo stay there, and a private API key stays in Klaviyo until you delete it on its API keys page. If you are moving from another tracking app, see switching apps.
Frequently asked questions
Klaviyo's Shopify integration already records Placed Order. What does HonestTag add?
Klaviyo's Shopify integration syncs its own Placed Order metric. HonestTag sends a second set of events from its server: a Placed Order event for every order, plus HonestTag_Purchase_NC for a new customer or HonestTag_Purchase_RC for a returning one, and HonestTag_Purchase_FCNC as well when a new customer's first recorded click was on a paid ad. It also sends a Refunded Order event for partial refunds, where Klaviyo says its Shopify integration only receives fully refunded orders.
Will Klaviyo count an order twice?
Not inside one metric: HonestTag sends the same unique_id on every retry, and Klaviyo keeps only the first event per profile, metric and unique_id. With Klaviyo's Shopify integration also on, your account holds two metrics named Placed Order, one from Shopify and one from HonestTag. Klaviyo treats metrics with the same name from different sources as separate metrics, so build each flow, segment and report on one of them.
Which permissions does the Klaviyo API key need?
A Custom Key with read access to Accounts and full access to Events and Profiles. These match the scopes accounts:read, events:write and profiles:write that Klaviyo lists for Get Accounts, Create Event and Create Profile. A Full Access Key also works.
Does HonestTag send customer email addresses to Klaviyo?
Never inside an event. Events are matched to a profile by HonestTag's random visitor ID, Klaviyo's own click ID, or a Klaviyo profile ID. On Truth+ and higher plans, HonestTag also sends the order's email address to your Klaviyo account on the first order from a visitor with an email and no stored Klaviyo profile ID, to find the shopper's existing profile, and keeps only the profile ID Klaviyo returns.
Should I use an API key or sign in with Klaviyo?
Either works, and both send the same events. When the card offers sign-in, you can move from a key to sign-in at any time. Do not go back from sign-in to a key: Klaviyo says that move "will result in a divergent metric", which splits Placed Order and the goal metrics in two.
Do server-side events from HonestTag trigger Klaviyo flows?
They can. HonestTag does not set Klaviyo's backfill flag. Klaviyo says a backfill event "is still recorded and is visible in metrics, segmentation, and the events API, but it does not trigger flows." A flow triggered on HonestTag's Placed Order metric runs on HonestTag's events, not on the Shopify integration's.
Related: every HonestTag integration, server-side delivery, first-click attribution, which decides the FCNC metric, and first-party tracking.