What the Events API is for
The Events API is a direct HTTP endpoint: your backend, a webhook handler, or a queue worker posts an event with a metric name, a profile identifier, and a set of properties. No CRM or intermediary system is required - this is the "backend tracking without a CRM" pattern: your application is the source of truth, and it tells Klaviyo directly what happened.
Where custom events matter most
| Business type | Custom event example | Why the default integration misses it |
|---|---|---|
| Subscription / SaaS | Trial started, plan upgraded, seat added, usage threshold hit | No e-commerce order to hang the event off - it's a backend state change |
| Subscription boxes | Box skipped, box customized, recurring charge failed | Recurring-order logic differs from a standard one-time purchase |
| Marketplaces / multi-vendor | Vendor payout issued, listing approved | Not a customer-facing purchase event at all |
| Services / bookings | Appointment booked, appointment completed, no-show | No native e-commerce integration to source it from |
| Any business | Support ticket resolved, warranty registered, loyalty tier changed | Backend-only state, invisible to client-side or e-commerce tracking |
Naming and property discipline
- One event name per distinct business action - avoid overloading a single event with a "status" property to mean several different things.
- Every property a flow or segment might filter on should be present on every instance of the event, even if the value is null/empty - missing properties fail silently, not loudly.
- Timestamps should reflect when the action actually happened in your system, not when the API call was made, if the two can differ (e.g. batch processing, retries).
- Idempotency: retried webhook deliveries should not create duplicate events with different timestamps.
Server-side vs. client-side
Send server-side whenever an event represents a backend truth (a payment succeeding, a subscription renewing) or when reliability matters more than latency - server-side calls aren't subject to ad blockers or JavaScript errors. Client-side remains appropriate for pure browsing signals where some loss is acceptable.