# Klaviyo Incident Runbook

> | Execute Klaviyo incident response procedures with triage, mitigation, and postmortem. Use when responding to Klaviyo-related outages, investigating API errors (401/403/429/5xx), or running post-incident reviews for Klaviyo integration failures on an on-call rotation. Trigger with phrases like "klaviyo incident", "klaviyo outage", "klaviyo down", "klaviyo on-call", "klaviyo emergency", "klaviyo broken".

- Skill: `thedixitjain/klaviyo-incident-runbook` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds add thedixitjain/klaviyo-incident-runbook`
- Raw SKILL.md: https://api.skillmd.com/api/skills/thedixitjain/klaviyo-incident-runbook/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: thedixitjain (https://skillmd.com/u/thedixitjain)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/thedixitjain/klaviyo-incident-runbook

---


# Klaviyo Incident Runbook

## Overview

Rapid incident response for Klaviyo API outages and integration failures: quick
triage, decision trees, mitigation steps, and postmortem templates. Use this
skill to move from "Klaviyo is broken" to a classified severity, an applied
mitigation, and a written postmortem — without improvising under pressure.

The heavy content (full triage script, per-error remediation blocks, and the
communication + postmortem templates) lives in `references/` so this file stays
a fast high-level runbook you can follow end-to-end, then drill into for depth.

## Prerequisites

- `KLAVIYO_PRIVATE_KEY` exported in the shell (a private API key, `pk_...`).
- `curl` and `python3` available for the triage and monitoring commands.
- Read access to your app's health endpoint and, ideally, its Prometheus metrics.
- Access to the [Klaviyo dashboard](https://www.klaviyo.com) to rotate a key if needed.
- Klaviyo's `revision` header value your app ships (this runbook pins `2024-10-15`,
  a dated stable API version — Klaviyo requires the header on every request).

## Severity Levels

| Level | Definition | Response Time | Example |
|-------|------------|---------------|---------|
| P1 | Complete outage | <15 min | All Klaviyo API calls returning 5xx |
| P2 | Degraded service | <1 hour | 429 rate limiting, high latency |
| P3 | Minor impact | <4 hours | Webhook delays, single endpoint errors |
| P4 | No user impact | Next business day | Monitoring gaps, deprecation warnings |

## Instructions

Work the incident in five steps. Each step points at the reference file that
carries the full, copy-paste-ready detail.

1. **Triage immediately.** Run the quick-triage script to answer the four
   questions that classify every Klaviyo incident: Is Klaviyo itself down? Can
   we authenticate? Are we rate limited? Is our app healthy? See the full script
   in [references/triage.md](references/triage.md).
2. **Classify the failure.** Walk the decision tree in
   [references/triage.md](references/triage.md) to split a Klaviyo-side outage
   (status page shows an incident → enable fallback, monitor, communicate) from
   an integration issue (route by status code: 401/403, 429, 400, 5xx).
3. **Assign a severity** from the table above and set the response-time clock.
4. **Apply the remediation** for the observed error type — auth failure (401),
   rate limit (429), or Klaviyo server error (5xx). The exact commands are in
   [references/remediation.md](references/remediation.md).
5. **Communicate and write the postmortem.** Post the internal + external
   updates and, once resolved, collect evidence and fill the postmortem template
   from [references/communication-and-postmortem.md](references/communication-and-postmortem.md).

## Output

Following this runbook produces:

- A **triage report** printed to the terminal: Klaviyo status-page state, your
  API auth HTTP code, current rate-limit headers, and app health.
- A **severity classification** (P1–P4) with the matching response-time target.
- An **applied mitigation** (key rotation, concurrency reduction, or graceful
  degradation) with confirmation the error rate is recovering.
- **Stakeholder updates** — one internal Slack message and, for P1/P2, one
  external status-page note.
- A **completed postmortem** document (summary, timeline, root cause, impact,
  action items, lessons learned) plus an evidence bundle of logs and metrics.

## Examples

**Triage first (always run this before anything else):**

```bash
# Is Klaviyo itself down, or is it us?
curl -s "https://status.klaviyo.com/api/v2/status.json" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['status']['description'])"
```

**Then classify by the auth HTTP code:**

```bash
curl -s -w "\nHTTP %{http_code}\n" -o /dev/null \
  -H "Authorization: Klaviyo-API-Key $KLAVIYO_PRIVATE_KEY" \
  -H "revision: 2024-10-15" \
  "https://a.klaviyo.com/api/accounts/"
# 401 → key problem  ·  429 → rate limited  ·  5xx → Klaviyo server error
```

For the complete triage script and decision tree see
[references/triage.md](references/triage.md); for the full per-error remediation
commands see [references/remediation.md](references/remediation.md); for the
Slack/status-page templates and the postmortem template see
[references/communication-and-postmortem.md](references/communication-and-postmortem.md).

## Error Handling

| Issue | Cause | Solution |
|-------|-------|----------|
| Can't reach status page | Network issue | Use mobile or check Twitter @klaviyo |
| Metrics unavailable | Prometheus down | Check direct API with cURL |
| Key rotation panic | No backup key | Always have a rotation procedure documented |
| Alert fatigue | Too many false alarms | Tune thresholds based on baseline |

## Resources

- [Triage script and decision tree](references/triage.md)
- [Per-error remediation (401 / 429 / 5xx)](references/remediation.md)
- [Communication templates and postmortem](references/communication-and-postmortem.md)
- [Klaviyo Status Page](https://status.klaviyo.com)
- [Klaviyo API Error Alerts](https://developers.klaviyo.com/en/docs/review_api_error_alerts)
- For data handling, see the `klaviyo-data-handling` skill.

---

**Source:** [`jeremylongshore/claude-code-plugins-plus-skills`](https://github.com/jeremylongshore/claude-code-plugins-plus-skills) → `plugins/saas-packs/klaviyo-pack/skills/klaviyo-incident-runbook/SKILL.md`

