Guides · Setup

Connect the Klaviyo API to Outloop

Last updated:

In short

Outloop connects Klaviyo to your AI agents using a Private API Key stored in your Mac's Keychain.

Agents run real Klaviyo work — reporting, segments, list membership, campaign drafts and sends — while the key is injected host-side and redacted out of every response, audit line and log. Each client workspace is bound to exactly one Klaviyo account, derived from the key rather than typed by you.

Summarize this setup guide with AI ChatGPTClaudePerplexity

The two one-way doors

Klaviyo's Private API Key is the credential, and two facts about it shape the entire setup. Both are Klaviyo's design, not Outloop's, and both are irreversible — which is why they come before anything else on this page rather than in a footnote after you have already created the key.

Scopes cannot be changed after a key is created. Klaviyo fixes a key's scopes at creation and offers no edit afterwards. A key that turns out to be missing a scope has to be deleted and replaced — you cannot widen it in place. Get the scopes right the first time.
The key is shown exactly once. Klaviyo reveals it on creation and never again. Treat it like a password: paste it straight into Outloop, and do not park it in a chat, a ticket, a notes app or a project file on the way.

The second door is the one Outloop is built for. You paste the key once, it goes into the macOS Keychain, and from then on it is used without being seen — by you or by any agent.

What this connection gives you

Your agent works in Klaviyo — pulls reporting, builds segments, drafts and sends campaigns, manages list membership — and never sees the API key. Every request is bounded to one client account and written to a redacted audit line.

What you need

You do not need an account id. Some connectors ask you to find and paste one. Klaviyo does not: a Private API Key reaches exactly one account, so Outloop asks Klaviyo which account that is and pins it for you. There is nothing to look up and nothing to transcribe.

1. Create the key with the right scopes

In Klaviyo, open Settings → API keys → Create Private API Key. Choose Custom key and grant the scopes below. A Full Access key also works if that suits your client's policy.

Scope What it is for Grant
accounts:read Required. It is how Outloop identifies which account the key belongs to. Always
campaigns, flows Draft, edit, schedule and send campaigns; read and edit flows, activate or pause them. Read + write
lists, segments, profiles, subscriptions Audience and consent work. Read + write
templates, tags, images, events Content and event writes. Read + write
metrics:read, forms:read Reporting. Read
catalogs, coupons, coupon-codes, web-feeds Ecommerce catalog and coupon work. Only if this client uses them
data-privacy Permanent erasure of a person and their event history. Only if this workspace handles deletion requests

Klaviyo can pre-tick the whole set for you. Open this link instead of ticking twenty-two boxes by hand, then name the key and create it:

https://www.klaviyo.com/create-private-api-key?scopes=accounts:read,campaigns:read,campaigns:write,flows:read,flows:write,lists:read,lists:write,profiles:read,profiles:write,segments:read,segments:write,subscriptions:read,subscriptions:write,templates:read,templates:write,tags:read,tags:write,images:read,images:write,events:read,events:write,metrics:read,forms:read
A missing scope is a 403, not a bad key. Klaviyo answers 403 when the key is valid but lacks the scope for that endpoint. Outloop passes that through as a real 403 carrying the provider's own status — it does not relabel it as an authentication failure, and it will not send you off to replace a key that is working perfectly well.
Outloop's Klaviyo setup guidance listing the scopes to grant, warning that Klaviyo does not allow a key's scopes to be edited after creation, and linking out to Open Klaviyo API keys.
Outloop lists the scopes it needs and states the one-way door in the setup panel, before you go to Klaviyo.
Klaviyo's own screens are not pictured here. Capturing the Klaviyo console needs a signed-in session behind a CAPTCHA, and nothing on this page is mocked up or lifted from marketing material — so the Klaviyo side is described in words and the pictures are all Outloop's own UI. The sequence is short: Settings, API keys, Create Private API Key, Custom key, tick the scopes, create, copy the key once.

2. What Outloop sends

Outloop calls https://a.klaviyo.com under /api/ only, injecting Authorization: Klaviyo-API-Key … host-side, plus two companion headers it sets automatically: revision (pinned) and X-Klaviyo-Revision-Fall-Forward-Opt-Out.

The agent cannot choose the API revision. Those headers are injected after the agent's own, so a request can never silently move to a different version of Klaviyo's API — which is what would otherwise let a payload shape change under you without a single line of your configuration changing.

Outloop's Klaviyo panel showing the in-Klaviyo sequence, the bounded API bridge to a.klaviyo.com with documented auth, and the required companion headers revision and X-Klaviyo-Revision-Fall-Forward-Opt-Out.
The bounded host, the documented auth injection, and the two headers Outloop sends on every request without being asked.
Updates use PATCH, not PUT. Klaviyo's API is JSON:API-shaped, so the allowed methods on a full grant are GET, POST, PATCH and DELETE. An agent reaching for PUT is using the wrong verb for this provider, not hitting a policy limit.

3. Add the key in Outloop

In Outloop open API Keys & Access, pick Klaviyo, and choose whether this key is dedicated to one workspace or shared across several. For a client's own Klaviyo account, dedicated is almost always right — the key reaches that client's account and nothing else, so sharing it buys you nothing and widens the blast radius.

Outloop's Add an API key card with Klaviyo selected, showing the dedicated-versus-shared explanation and the workspace picker set to a placeholder client workspace.
Pick Klaviyo, decide whether the key is dedicated to one client workspace or shared, then choose the workspace.

Then paste the key and add it.

The empty Paste the Klaviyo Private API Key field in Outloop, scoped to a single workspace, next to the Add API Key button.
The key goes straight to this Mac's Keychain. It is never shown again and never handed to an agent.
Saving does not grant access. Outloop immediately runs one read-only check against Klaviyo. If it passes, runtime access turns on for the workspaces you selected. If it fails, the key stays stored but no agent can use it — you fix the token and press Re-run access check on the key row. This connector requires that check before runtime; there is no way to skip it.
Outloop's callout stating that access is granted only after a read-only check passes, above the environment variable name used by the universal command runner.
Access is gated on a real read against the provider, not on the key being stored.

4. The account binds itself

You do not type an account id. Outloop calls GET /api/accounts/, reads the one account the key belongs to, shows it to you, and binds the workspace to it. You confirm rather than transcribe — which removes the single most common setup error on connectors that ask for an identifier by hand.

Outloop explaining that no account id is needed because it asks Klaviyo which account the key belongs to and binds the workspace to that account, above an optional key label field.
Outloop derives the account from the key itself. The only thing you type is an optional label.

That binding is the client boundary. A Private API Key reaches exactly one Klaviyo account, so the credential is the boundary — which is why the pin fails closed until it is bound, and why the only route reachable before binding is that one read-only account call.

The first safe proof

Start with a Grant Preflight, which answers from local policy with no provider call and no credential read — expect PREFLIGHT_OK plus the allowed methods and the resource pin. Then the real proof, which is the same read-only call the access check runs and the one that binds the workspace:

GET /api/accounts/

decision:        allow
code:            OK
http_status:     200
secret_exposed:  false

account bound:   data[0].id       <- derived, never typed
public_api_key:  ***REDACTED***

It identifies the account and touches nothing. Note the last line: Klaviyo's own public_api_key field comes back redacted, because Outloop redacts credential-shaped values out of provider responses as well as out of its own.

The boundary is proven by the negative case, and this one costs nothing to run — asking for a data-privacy deletion while that capability is off:

POST /api/data-privacy-deletion-jobs/

decision:        deny
code:            DATA_PRIVACY_ACTION_NOT_ENABLED
http_status:     null            <- no Klaviyo call was made at all
secret_exposed:  false

http_status: null is the part that matters. The refusal happened before the key was read and before Klaviyo was contacted, so nothing was deleted and nothing was even asked.

Account-scoped access: Live verified through Outloop Audited Secret-safe Workspace-scoped

Capabilities and write actions

Reads are never gated. Profile data, including the personal data your client is entitled to, is returned intact. Outloop does not hide authorized business data on the grounds that it is personal — the gates are on what an agent can change, not on what it can see within an account it is already bound to.

What runs unattended

Once you enable full API access, nothing waits for a person. Sends, flow activation and consent changes all execute and are audited. There is no approval queue and nothing is sitting in Outloop waiting for you to click something.

Exactly two switches can stop a request:

Switch Default What it gates
Destructive actions (delete / archive) ON DELETE requests, and delete or archive semantics expressed through POST.
Data-privacy deletion OFF POST /api/data-privacy-deletion-jobs/ — permanently deletes a person and their entire event history.
A newly connected Klaviyo grant has destructive actions ENABLED. DELETE is part of this connector's declared baseline, so the add flow writes it and the row reads Enabled immediately. If you do not want agents deleting lists, turning it off is a deliberate act you have to perform — an operator who assumes deletion starts off will be wrong.
Data-privacy deletion is irreversible and has no export. It erases a person and their entire event history from Klaviyo. It is the one capability that is off by default. Enable it only if this workspace actually handles deletion requests, and understand that once it is on, a deletion runs unattended like any other permitted action.

Unsubscribe has two very different shapes

Klaviyo does not make the difference obvious, and it is the sharpest edge on this connector. An unsubscribe that names a list still globally unsubscribes anyone who is not on that list. An unsubscribe with no list is account-wide by definition.

So Outloop runs a bounded membership pre-read first, and one non-member refuses the entire request — it never strips the non-members and quietly sends the remainder, because a partial consent change is the kind of thing nobody discovers until a client asks why a customer stopped hearing from them. Batches are capped at 100 targets, or 6 when addressed by profile id.

Removing someone from a list is not a consent change and needs no capability. DELETE /api/lists/{id}/relationships/profiles unlinks a profile from a list without touching their marketing consent. Outloop deliberately does not classify it as destructive — it is the most common list-hygiene write an agency performs, and gating it would make the switch meaningless.
A 202 is accepted, not delivered. Klaviyo returns 202 for job-shaped work such as a campaign send. Outloop reports that honestly as accepted-but-unverified and never auto-resubmits. Poll the job if you need to know it finished — and note that a send Klaviyo accepts can still be skipped by Klaviyo's own Smart Sending.

What is verified vs what is not claimed

Tested here: against a real production Klaviyo account on 2026-08-29, workspace-scoped, on a live account rather than a test one — secure key entry with zero leaks including broker stdout and stderr; account binding derived from the live account read; the read set and write set listed above; a campaign send executing exactly once with delivery observed and a replay refused; a data-privacy deletion denied before any provider call while the capability was off; and a permanent list delete executing unattended with the destructive capability on. Zero approval records were created, and the key never appeared in any result, audit line or log.

Not claimed. These are stated plainly because they are the guarantees customers most want, and they are proven only by offline suites rather than against the live provider:

One further honesty note. The observed delivery came from the earlier proof run. In the later unattended run the send was skipped by Klaviyo's own Smart Sending — a provider policy protecting the recipient from over-mailing, not an Outloop decision, and not a failure of the send path.

Klaviyo through Outloop vs the Klaviyo MCP server

For this workspace, the Klaviyo API through Outloop is the only Klaviyo path that is live and verified right now.
Area Klaviyo through OutloopOfficial Klaviyo MCP server
Provenance The Klaviyo connector in Outloop, verified here against product 1.29.6. An official hosted MCP server published by Klaviyo at mcp.klaviyo.com, generally available.
Authentication One Private API Key per client, held in the macOS Keychain and injected host-side. No person signs in. OAuth with dynamic client registration. A person signs in, and the tools run as that signed-in session.
Who can use it Any approved agent runtime in the workspace, bounded by the capabilities you enabled. Klaviyo restricts it to users holding an Owner, Admin or Manager role.
Per-client scoping Each workspace is bound to the one Klaviyo account its key answers for, before the credential is read. Reach follows whoever authenticated. There is no per-workspace account boundary.
Credential handling The key never reaches the agent, the chat, your project files or your logs. Responses carry secret_exposed: false. Not applicable here — no key of yours is held by Outloop on this path.
Consent-changing writes An unsubscribe naming a list runs a bounded membership pre-read first, and one non-member refuses the whole request. Governed by the MCP server and the signed-in account, not by Outloop.
Audit trail One redacted line per attempt: workspace, service, action class, the resource addressed, and the capability that authorized it. Not applicable here.
Status here Live verified through Outloop Real read, write and send proof against a production account, 2026-08-29. Official MCP exists Not connected here; not verified in this guide.
Official MCP exists Not connected here Not verified in this guide
Honesty note. Klaviyo's MCP server is a real, official, generally available product, and this comparison is deliberately conservative about it. It is a good way for a person to work their own Klaviyo account from an AI client, and nothing here says otherwise. The difference is governance, not capability: an MCP session is one signed-in person's reach, whereas Outloop binds a workspace to one client account, keeps the key out of the agent entirely, and audits each attempt against the capability that authorized it. That matters when one operator runs many clients. The general mechanism is covered in credential broker vs MCP authentication.

When something is refused

What keeps one client separate

Replacing the key starts on Klaviyo's side, because scopes are immutable: create a new Private API Key with the scopes you want, then use Rotate key on the Outloop key row to enter it, and delete the old key in Klaviyo. The workspace binding, the access level and the capability switches are untouched. The broader mechanism is on the security model page.

Stage honesty. Outloop is at controlled design-partner prep. This guide describes what was actually run and what the connector actually enforces — it makes no compliance or certification claim of any kind.

Official documentation

Outloop is available with guided onboarding for agency teams. Outloop is an independent tool and is not affiliated with or endorsed by Klaviyo. See the security model for how credentials are stored and used, the Taboola Backstage guide and the Microsoft 365 Mail guide for the other connectors at this level of proof, or the rest of the connector setup guides.

Summarize this setup guide with AI ChatGPTClaudePerplexity

One key in the Keychain. The right client account, every time.

Run Klaviyo campaigns, segments and list work across client workspaces without handing an agent the key.

Frequently Asked Questions

Klaviyo API + Outloop — FAQ