Subscription apps built in React
An app sells plans from a pricing page. A Klaviyo flow triggered by the purchase metric sends the welcome series, and a plan property decides which tips email goes out.

Checkout embed
React renders the buy button, Plandalf takes the payment, and a webhook step carries the order to Klaviyo.
No credit card required. No coding required.
React
KlaviyoPlandalf does not have native Klaviyo steps and does not sync a React app with Klaviyo. The app opens the checkout with attributes or the React package; after payment a Send Webhook step can call Klaviyo's events API, or a function you host. Klaviyo flows can post back to a Plandalf catch URL.
| Event | From and to | Through | What happens |
|---|---|---|---|
| Checkout opened | React → Plandalf | A JSX button with data-plandalf-present works with the hosted script, and the docs recommend attributes for a first install. | |
| Checkout completed | Plandalf → Klaviyo | Webhook | Send Webhook posts to a small function you host, which calls Klaviyo's events endpoint with a metric, the user's email and the amount as value. |
| Profile properties | Plandalf → Klaviyo | Webhook | Klaviyo's profile import endpoint creates or updates a profile, so a plan name can be stored as a property. |
| Flow webhook | Klaviyo → Plandalf | Webhook | A flow can post to a Plandalf Webhook Trigger URL, and Enroll in Promo starts a countdown that a React component can show. |
| Browser purchase event | Plandalf → React | The purchase event on a handle lets the UI react, but it is not a record to send to Klaviyo from the browser. |
Keep the Klaviyo private key out of React. Both the key and the Plandalf signing key belong on a server.
Load the hosted SDK once in your HTML shell, then render a button with data-plandalf-present and the offer slug. Add useRef and an effect that closes plandalf.from(element) on unmount.
Give the button a key built from the offer and promo slugs. The SDK reads those attributes only when it first binds an element.
Have your server sign a Plandalf customer token and call identify() with it, or pass it per call through the user option. The docs say identify() does not confirm acceptance, so check the customer on the resulting session.
Create a serverless function that checks a shared secret, then posts an event to Klaviyo with the revision header, your private key and the metric name Plandalf Purchase. Deduplicate on the invoice number.
On a Checkout Completed sequence add Send Webhook to the function's URL, secret in Headers, payload using {{trigger.customer_email}} and {{trigger.total_amount}}. Test with Run on test purchases switched on.
An app sells plans from a pricing page. A Klaviyo flow triggered by the purchase metric sends the welcome series, and a plan property decides which tips email goes out.
A small React storefront sells limited runs. Klaviyo flows handle shipping notices, while a Plandalf promo drives urgency on the product page.
revision header and vnd.api+json bodies, so test that Send Webhook can produce a request Klaviyo accepts, or use your own function.Checked October 26, 2026 against Plandalf's own setup guides and the vendor documentation: Klaviyo API: create event, Klaviyo API: create or update profile, Klaviyo help: understanding webhooks in flows.