Klaviyo App Marketplace
Testing instructions — Sendtonium Klaviyo Audit
Structured for the Klaviyo Ecosystem review team using the official App & Testing Requirements template. Last updated: August 4, 2026.
Support: kyle@sendtonium.com · Reviewer contact: app.marketplace@klaviyo.com
Quick links for reviewers
- OAuth install URL: https://app.sendtonium.com/api/klaviyo/install (requires Sendtonium login first)
- Create account: https://app.sendtonium.com/account/signup
- Customer dashboard: https://app.sendtonium.com/account
- Partner-app install path: https://app.sendtonium.com/audit
- Settings URL: https://app.sendtonium.com/settings
- User guide: https://app.sendtonium.com/user-guide
- Privacy policy: https://app.sendtonium.com/privacy-policy
- Redirect URI:
https://app.sendtonium.com/api/klaviyo/callback
OAuth app overview
App name: Sendtonium Klaviyo Audit
Developer: Sendtonium
Auth: OAuth 2.0 with PKCE (S256) — read-only scopes only
Purpose: Instant marketing health audit of a merchant's Klaviyo email/SMS program. We never write to Klaviyo, send messages, or change account settings.
After install, the app fetches Klaviyo account data, grades a 100+ point checklist across six categories, and shows an overall letter grade plus opportunities. An optional full web report supports screen-share walkthroughs.
Requested OAuth scopes (exact list)
accounts:readcampaigns:readflows:readforms:readlists:readmetrics:readprofiles:readsegments:readsubscriptions:readtags:readtemplates:read
Space-separated value used in authorize requests: accounts:read campaigns:read flows:read forms:read lists:read metrics:read profiles:read segments:read subscriptions:read tags:read templates:read
Customer workflow
Important: Sendtonium account login is required before Klaviyo OAuth
Customers create or sign into a Sendtonium account first. Klaviyo OAuth is only started from an authenticated session. Access/refresh tokens are exchanged and stored server-side (encrypted at rest) and bound to the customer's lead via leads.user_id.
A. Install from Klaviyo App Marketplace (Install button)
- Reviewer clicks Install on the Sendtonium listing in Klaviyo.
- Browser opens
https://app.sendtonium.com/api/klaviyo/install. - If not signed in to Sendtonium, the user is redirected to
/account/login(with option to Create account at/account/signup— email + password). Signup immediately signs the user in; no email verification is required. - After authentication, Sendtonium creates/claims a lead owned by that user and continues to
/account/connect→ PKCE authorize → Klaviyo consent. - User reviews read-only permissions and clicks Allow (or Deny — see Testing details).
- Callback stores encrypted tokens, starts the audit, and redirects to the score page
/audit/[leadId]?token=…. - Results also appear on the customer dashboard at
/account.
B. Install from the Sendtonium app (partner side)
- Open /account/signup or /account.
- Create an account (email + password) and continue immediately—there is no email verification step—or sign in to an existing account.
- From the dashboard, click Connect Klaviyo (or complete the intake form at
/auditwhile signed in). - Approve scopes in Klaviyo → return to score page / dashboard with results.
C. Settings / reconnect
- Open https://app.sendtonium.com/settings
- Confirm the page shows Status: connected (not only Connect).
- Click Disconnect Klaviyo and confirm. The page should show not connected, and Sendtonium should leave Klaviyo Integrations.
- Optionally click Add another Klaviyo account to start a new OAuth install.
D. Uninstall
- In Sendtonium: Integration settings → Disconnect Klaviyo (calls
POST /oauth/revoke). - Confirm the app is no longer enabled under Klaviyo → Settings → Integrations.
Integration details — use cases, endpoints, and scopes
All calls use Klaviyo REST revision 2025-10-15 with the merchant's OAuth access token. No write scopes are requested.
| Use case | Endpoint(s) | Scope(s) |
|---|---|---|
| Resolve Klaviyo account identity after OAuth | GET /api/accounts | accounts:read |
| Grade flows (welcome, cart, browse, winback, etc.) by trigger + content | GET /api/flowsGET /api/flows/{id} (definition + flow-actions)POST /api/flow-values-reports | flows:readmetrics:read |
| Grade campaigns vs industry benchmarks; sample campaign messages | GET /api/campaignsPOST /api/campaign-values-reportsCampaign messages / related reads as needed | campaigns:readmetrics:read |
| List growth & attributed email/SMS revenue | GET /api/metricsPOST /api/metric-aggregates | metrics:read |
| Segmentation & list health checks | GET /api/segmentsGET /api/lists | segments:readlists:read |
| Design / AI grading of email HTML; flow email bodies | GET /api/templatesGET /api/templates/{id} | templates:read |
| Detect live Klaviyo signup forms (popup / flyout / embed) for Acquisition checks | GET /api/formsGET /api/forms/{id}/form-versions/ | forms:read |
| Tags used in account organization checks | GET /api/tags | tags:read |
| Profile / subscription context for relevant checklist items | Read-only profile & subscription endpoints as needed for checks | profiles:readsubscriptions:read |
| Storefront pop-up / embed visual grading (non-Klaviyo) | Headless browser capture of merchant store_url (not a Klaviyo API) | — |
Architectural diagram
Data flow between Klaviyo and Sendtonium (read-only):
Merchant / Reviewer
|
| (1) Install (Marketplace) or /audit form
v
app.sendtonium.com
/api/klaviyo/install → create lead
/api/klaviyo/authorize → PKCE state + code_challenge
|
| (2) Redirect to Klaviyo OAuth consent
v
klaviyo.com/oauth/authorize
|
| (3) Allow → code + state
v
/api/klaviyo/callback
exchange code → access + refresh tokens (encrypted at rest)
GET /api/accounts → store account id
|
| (4) runAudit()
v
Klaviyo REST API (revision 2025-10-15)
accounts, flows, campaigns, metrics, lists, segments,
templates, forms, tags, reports, metric-aggregates
|
+---- optional: headless capture of store_url
|
v
Supabase (audits, audit_results, report_content)
|
v
Score page /audit/[leadId]?token=…
Optional report /report/[auditId]
Tokens are AES-256-GCM encrypted. Service-role DB access is server-side only. Score/report pages require a per-lead reveal token (or admin session).
Product integration demo
A recorded walkthrough of installation + use cases is available for the Ecosystem and Security teams. Request the latest Loom / video link from kyle@sendtonium.com (or use the link provided in the Manage App submission notes if attached).
Demo recording URL
Paste your Loom (or similar) URL here when ready, and update this section before final submission — e.g. https://www.loom.com/share/…
Suggested demo script (2–4 minutes):
- Start from Klaviyo Install URL → approve read-only scopes.
- Show score page loading → overall grade + six categories.
- Show flow quality chips and opportunities.
- Optional: open full report if generated.
- Show Settings page + how to revoke in Klaviyo.
Testing details (for Klaviyo reviewers)
Test account access (no passwords in this doc)
Per Klaviyo guidance, do not email passwords. To test end-to-end:
- Prefer using a Klaviyo account you control that has realistic campaign / flow data, then install via the Install URL or
/audit. - Or email kyle@sendtonium.com from app.marketplace@klaviyo.com and we will invite that address to a prepared demo Klaviyo account / Sendtonium test lead and reply with the score-page link.
Test plan — installation
- Marketplace install (logged out): open Install URL in a private window → you are prompted to Create account or Sign in on Sendtonium (email + password) → account is created and signed in immediately, without email verification → Klaviyo OAuth consent appears → Allow → score page.
- Marketplace install (already logged in): open Install URL while signed in to Sendtonium → goes straight to Klaviyo consent (no second partner login).
- Partner-app install: create account at
/account/signup→ open/account→ Connect Klaviyo → OAuth. Alternatively complete the intake form at/auditwhile signed in. - Settings install: open
/settings→ Connect Klaviyo → authenticate if needed → OAuth. - Deny permissions: on Klaviyo consent, click Deny / Cancel. You should return to Sendtonium with a clear message that permissions were not approved, and a path to retry after signing in again.
Test plan — functionality
- Wait for audit status to leave “running” (usually under ~2 minutes).
- Confirm overall grade/score, six category bars, flow quality section, and opportunity bullets render.
- Confirm the score page URL includes
?token=and that opening the same path without the token does not show results (404 / not found). - Confirm the audit appears on
/accountwhile signed in. - Optional: if a full report is generated for the audit, open
/report/[auditId](admin session or share token).
Test plan — uninstall
- In Klaviyo, remove/revoke the Sendtonium app.
- Attempting a new audit without re-consent should fail to use prior tokens; merchant must reinstall / reconnect while signed in to Sendtonium.
- Settings page documents revoke steps: /settings.
Expected permissions screen copy
Reviewers should see only the read scopes listed in Overview (accounts, campaigns, flows, forms, lists, metrics, profiles, segments, subscriptions, tags, templates — all :read). No write scopes.
App review checklist — how we map
- Install URL directs as expected —
/api/klaviyo/installrequires a Sendtonium session first, then starts PKCE and redirects into Klaviyo authorize. - Works logged in / not logged in to partner app — logged out users are redirected through signup/login; logged-in users go straight to OAuth.
- Settings URL — /settings
- Deny permission workflow — clear incomplete/denied messaging + retry path via
/audit. - Client-facing docs — /user-guide, privacy policy, settings.
- Support — kyle@sendtonium.com
Related pages: User guide · Settings · Privacy policy