Skip to Content
Your subscription data now goes where you need it: the Curobi Developer API feeds your warehouse, ERP or CRM, and webhooks tell you the moment something changes — read the API docs →

Klaviyo

Connect Klaviyo and Curobi sends every important subscription moment to your Klaviyo account as a metric you can start a flow on, such as a win-back series when someone cancels or a “your box ships soon” email before a charge. It also keeps four subscription fields up to date on each customer’s Klaviyo profile, for segments.

Available on the Business and Pro plans. It isn’t part of the Free plan’s 14-day trial. Development stores can use it too, so you can build flows before a store launches. See Pricing & Plans.

To set it up, follow Connect Klaviyo and build your first flow. It takes about five minutes. This page is the reference: what gets sent, how the email handoff works, and what to check when something looks wrong.

What Curobi sends

Metric in KlaviyoSent when
Curobi Subscription StartedA customer starts a subscription
Curobi Subscription RenewedA recurring charge succeeds
Curobi Upcoming ChargeA charge is coming up (sent ahead of the charge)
Curobi Payment FailedA recurring charge fails
Curobi Payment RecoveredA failed charge is later paid
Curobi Subscription PausedA subscription is paused
Curobi Subscription CancelledA subscription is cancelled
Curobi Subscription ReactivatedA paused or cancelled subscription starts again
Curobi Payment Method UpdatedA customer updates their card

The metric names never change, so a flow you build today keeps working. Klaviyo flows match on the exact name, which means renaming a metric would quietly stop every flow built on the old one. The Curobi prefix keeps these apart from another subscription app’s metrics in the same Klaviyo account, which matters while you’re moving subscribers over from one.

Curobi doesn’t send orders. Klaviyo’s own Shopify integration already records every order, renewals included. Curobi adds subscription events to the customer profiles that integration created; it doesn’t replace it.

Events start when you connect. Subscriptions that started, renewed or changed before you connected aren’t sent to Klaviyo.

Event details for your emails

Each event carries the details you need inside the email. The products, amount and date also come ready to print, so an email reads right without any formatting.

PropertyExampleNotes
event.ItemNamesTextCoffee Beans, Filter PapersProduct names, ready to print
event.ChargeAmountText$25.00Total per charge, ready to print
event.NextChargeDateTextNov 16, 2026Next charge date, ready to print
event.ItemNamesProduct names as a list
event.ItemsOne entry per product, with Title, Quantity, Price, ProductId, VariantId
event.ChargeAmount25Total per charge, as a number
event.CurrencyUSD
event.FrequencyEvery month
event.NextChargeDate2026-11-16T00:00:00ZFor flow filters and date maths
event.Statusactive
event.ManageUrlA link for the customer to manage the subscription
event.CancellationReasonToo expensiveCurobi Subscription Cancelled only, when the customer gave one
event.PreviousStatuspaused

A property with no value is left out, not sent empty. That’s why the cancellation reason simply isn’t there when a customer skipped the question, rather than being a blank string your email prints as “Reason: ”.

A starter block to paste into an email, using the ready-to-print fields:

Thanks for subscribing to {{ event.ItemNamesText }}! Billed {{ event.Frequency|lower }}: {{ event.ChargeAmountText }} Next charge: {{ event.NextChargeDateText }}

Or, with one line per product:

Thanks for subscribing! {% for item in event.Items %}{{ item.Title }} × {{ item.Quantity }}<br>{% endfor %} Billed {{ event.Frequency|lower }}: {{ event.ChargeAmount|floatformat:2 }} {{ event.Currency }} Next charge: {{ event.NextChargeDate|format_date_string|date:"F j, Y" }}

Profile fields for segments

Profile fieldExample
Curobi Active Subscribertrue
Curobi Active Subscriptions2
Curobi Subscription Statusactive
Curobi Next Charge Date2026-11-16

The fields describe the customer, not one subscription. Curobi Subscription Status reads active while any of the customer’s subscriptions is active; otherwise it shows the state of their most recent one, such as paused or cancelled. So a customer who cancels one of two subscriptions is still an active subscriber, and won’t fall into a “lapsed subscribers” segment by mistake.

The fields update each time Curobi sends that customer an event, so they’re as fresh as the customer’s last subscription change.

Choosing which events to send

Everything is on by default. Klaviyo does nothing with a metric until you build a flow on it, so sending everything costs you nothing and means the metric is already there the day you want it. To stop sending one, untick it under Events sent to Klaviyo on Curobi’s Klaviyo page and click Save.

Let Klaviyo send an email instead of Curobi

Curobi already emails customers at most of these moments: a confirmation, a pause notice, a cancellation notice and so on (see Customer Notifications). If your Klaviyo flow sends the same message, customers get two. So you can hand any of these emails to Klaviyo, and Curobi then stops sending its own copy.

The section Who emails your customers on the Klaviyo page lists eight emails in two groups:

GroupEmails
Welcome & billingSubscription confirmed, Upcoming charge reminder, Charge receipt, Payment recovered, Payment method updated
Subscription changesSubscription paused, Subscription cancelled, Subscription reactivated

Each row shows the Klaviyo metric that matches it and a CUROBI | Klaviyo switch. A bar at the top counts how many emails each side sends. Every email starts on CUROBI.

To hand one over:

  1. Build the flow in Klaviyo on the matching metric, set it Live, and check that a test email reads right.
  2. On that email’s row, click Klaviyo.
  3. Confirm Switch to Klaviyo. From then on, your Klaviyo flow sends that email and Curobi doesn’t.

To take it back, click CUROBI on the row.

The rules, and why they work this way

  • Switch only after your Klaviyo flow is live. A customer gets the email only if a live flow is triggered by the metric. Curobi can’t see inside your Klaviyo account, so it can’t tell whether that flow exists. Switching first leaves customers with no email at all.
  • The event has to be on. The Klaviyo side of the switch stays greyed out until that event is ticked under Events sent to Klaviyo. If you untick it later, Curobi starts sending that email again, because Klaviyo would no longer receive anything to send it from.
  • Curobi is the safety net. If Klaviyo is disconnected for any reason, or your plan drops below Business, Curobi goes back to sending every email you handed over, with nothing for you to do.
  • Use the handoff, not the email switch in Settings. You could also turn Curobi’s email off in Settings → Customer emails. Don’t, if Klaviyo is taking over. A switch in Settings stays off after Klaviyo is disconnected, which leaves customers with no email from anyone. A handoff ends with the connection.
  • Settings shows it too. In Settings → Customer emails, an email you handed over says your Klaviyo flow sends it, and points back to the Klaviyo page. The switch there still decides whether Curobi would send the email. If it’s off and the email isn’t handed to Klaviyo, the Klaviyo page shows No one sends this.
  • The failed-payment email can’t be handed over. It’s Shopify’s secure card-update email, and it carries the only link that lets a customer update their card, so it always sends. You can still build a Klaviyo flow on Curobi Payment Failed; it sends alongside Shopify’s email, not instead of it.
  • Sent: the customer’s email address, so the event lands on the right Klaviyo profile, and the subscription details listed above.
  • Never sent: phone numbers, addresses or payment details.
  • Never changed: consent. Curobi never subscribes anyone to a list or changes their email or SMS consent. Whether Klaviyo can email a customer is still decided by Klaviyo.
  • Customer choices are respected. If a customer turned off a message type in their email preferences, for example renewal reminders, Curobi doesn’t send that event for them, so a Klaviyo flow can’t send it either. Otherwise turning off reminders in the portal would just move the reminder to a different sender. Essential account and billing events are always sent.
  • Not stored. Curobi reads the email address from Shopify when it sends the event, and doesn’t keep it.
  • Your key is encrypted. Curobi checks the key with Klaviyo before saving it, stores it encrypted, and never shows it again, not even to you.
  • Read-only where it can be. The key Curobi asks for can read your Klaviyo account’s name and send events. It can’t read your lists, campaigns or anything else.

Checking it’s working

Recent deliveries on the Klaviyo page lists the latest real subscription events Curobi sent. Test events aren’t listed there; check those in Klaviyo (Analytics → Metrics, or the activity feed on the profile).

StatusMeaning
DeliveredKlaviyo accepted it
SkippedCurobi deliberately didn’t send it: the customer has no email address, or turned that message type off. The reason is shown
RetryingKlaviyo didn’t answer; Curobi tries again for about seven hours
FailedCurobi gave up on this event

Disconnecting

  1. On the Klaviyo page, click Disconnect and confirm.
  2. Curobi stops sending events, deletes its copy of the key, and goes back to sending any emails you handed to Klaviyo.
  3. To fully revoke access, also delete the CUROBI key in Klaviyo (Settings → API keys). A private key can only be deleted from inside Klaviyo, so Curobi can’t do this part for you.

Flows you built stay in Klaviyo, but they get no new Curobi events. Reconnecting later keeps your event choices and delivery history.

Uninstalling Curobi also disconnects Klaviyo and deletes the key straight away.

Moving below Business stops events from being sent, and Curobi takes back any emails you handed to Klaviyo. Your connection itself is kept.

Troubleshooting

”That doesn’t look like a Klaviyo private API key.”

You pasted something else, often the 6-character public key or only part of the private key. A private key starts with pk_. Klaviyo shows it only once, so if you didn’t copy it, create a new one.

”Klaviyo didn’t accept that key.”

The key was deleted, or wasn’t copied in full. Create a new key.

”That key is missing a scope.”

The key doesn’t have Accounts: Read Access. Klaviyo keys can’t be edited, so create a new key with the right permissions.

A “Klaviyo was disconnected” banner

The key was deleted, it lost its Events: Full Access permission, or ten events in a row failed. The Risk Center shows the same warning. Create a new key and connect again. Events from the gap aren’t resent, and any emails you handed to Klaviyo were sent by Curobi in the meantime.

I sent a test event but got no email

That’s expected until you build a flow. The test sends an event, not an email. Build a flow on Curobi Subscription Started, set the email and the flow to Live, turn off Smart Sending, then send another test. Also check your spam folder. See Build a flow.

I sent a test but Recent deliveries still says “Nothing sent yet.”

Expected. Test events aren’t listed there. Check Analytics → Metrics in Klaviyo.

The test worked but real events don’t appear

Check Recent deliveries. Skipped means the customer has no email address, or opted out of that message type. If nothing is listed at all, no subscription has changed since you connected.

I can’t find “API keys” in Klaviyo

Your Klaviyo login isn’t an Owner or Admin. Ask the account owner to create the key, or to change your role.

I don’t see Klaviyo in Curobi, or it shows an upgrade message

Klaviyo needs the Business plan or higher. See Pricing & Plans.

Last updated on