Klaviyo
live · conformance passing
Models the Klaviyo API a lifecycle marketing integration actually uses — profiles with upsert semantics and a real duplicate conflict, lists and membership as relationships, consent per channel with suppressions and the bulk jobs that move them, event ingestion that creates its metric and its profile on first use, segments whose membership is derived from their definition on every read rather than stored, and campaigns that queue a send job and go out when the sandbox is advanced — with private-key authentication, per-resource scope refusals, a dated revision header, per-endpoint burst and steady rate limits with a real Retry-After, and cursor pagination whose links point back at the sandbox.
- Category
- Marketing
- Sandbox key
- pk_…
- Verified against
- klaviyo-api 24.0.0
- Replaces
- Testing lifecycle marketing against a production Klaviyo account
Scenarios
Start a sandbox in one of these, or describe the state you want in a sentence and the seeder writes the records it implies.
Stocked account
A few hundred profiles with properties and event history, so pagination and filters have real data on the first call.
Suppressed profiles
A hard bounce, a spam complaint and an unsubscribe, so send-eligibility logic runs against all three reasons.
Pending bulk job
An import job stuck in processing, so a caller's poll loop is exercised instead of skipped.
Campaign scheduled
A campaign queued with a future send time, so advancing the sandbox has a send to perform and the pre-send refusals are reachable.
Narrow scopes
A read-only key, so every write is refused the way a real key with the wrong scopes refuses it.
Rate limited
Profile writes start throttled while event ingestion flows, so per-endpoint backoff is exercised rather than a global sleep.
Empty account
A brand-new account with no metrics at all, because the first-event metric-auto-creation path only exists once.
What it models
Records your code can read, write and edit for the life of the sandbox. A route the twin does not model returns a provider-shaped refusal rather than a plausible response.
- account
- profiles
- lists
- list_memberships
- segments
- metrics
- events
- campaigns
- campaign_messages
- templates
- flows
- suppressions
- bulk_jobs
Verified in CI against
- pythonklaviyo-api24.0.0