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 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.
- 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.
- Classify the failure. Walk the decision tree in
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).
- Assign a severity from the table above and set the response-time clock.
- 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.
- 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.
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):
# 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:
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; for the full per-error remediation
commands see references/remediation.md; for the
Slack/status-page templates and the postmortem template see
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
Source: jeremylongshore/claude-code-plugins-plus-skills → plugins/saas-packs/klaviyo-pack/skills/klaviyo-incident-runbook/SKILL.md
1---2name: klaviyo-incident-runbook3description: "| 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\"."4allowed-tools: "Read, Bash(curl:*), Bash(kubectl:*), Bash(npm:*)"5category: engineering-core6source_repo: jeremylongshore/claude-code-plugins-plus-skills7source_path: "plugins/saas-packs/klaviyo-pack/skills/klaviyo-incident-runbook/SKILL.md"8source_url: https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/HEAD/plugins/saas-packs/klaviyo-pack/skills/klaviyo-incident-runbook/SKILL.md9---1011# Klaviyo Incident Runbook1213## Overview1415Rapid incident response for Klaviyo API outages and integration failures: quick16triage, decision trees, mitigation steps, and postmortem templates. Use this17skill to move from "Klaviyo is broken" to a classified severity, an applied18mitigation, and a written postmortem — without improvising under pressure.1920The heavy content (full triage script, per-error remediation blocks, and the21communication + postmortem templates) lives in `references/` so this file stays22a fast high-level runbook you can follow end-to-end, then drill into for depth.2324## Prerequisites2526- `KLAVIYO_PRIVATE_KEY` exported in the shell (a private API key, `pk_...`).27- `curl` and `python3` available for the triage and monitoring commands.28- Read access to your app's health endpoint and, ideally, its Prometheus metrics.29- Access to the [Klaviyo dashboard](https://www.klaviyo.com) to rotate a key if needed.30- Klaviyo's `revision` header value your app ships (this runbook pins `2024-10-15`,31 a dated stable API version — Klaviyo requires the header on every request).3233## Severity Levels3435| Level | Definition | Response Time | Example |36|-------|------------|---------------|---------|37| P1 | Complete outage | <15 min | All Klaviyo API calls returning 5xx |38| P2 | Degraded service | <1 hour | 429 rate limiting, high latency |39| P3 | Minor impact | <4 hours | Webhook delays, single endpoint errors |40| P4 | No user impact | Next business day | Monitoring gaps, deprecation warnings |4142## Instructions4344Work the incident in five steps. Each step points at the reference file that45carries the full, copy-paste-ready detail.46471. **Triage immediately.** Run the quick-triage script to answer the four48 questions that classify every Klaviyo incident: Is Klaviyo itself down? Can49 we authenticate? Are we rate limited? Is our app healthy? See the full script50 in [references/triage.md](references/triage.md).512. **Classify the failure.** Walk the decision tree in52 [references/triage.md](references/triage.md) to split a Klaviyo-side outage53 (status page shows an incident → enable fallback, monitor, communicate) from54 an integration issue (route by status code: 401/403, 429, 400, 5xx).553. **Assign a severity** from the table above and set the response-time clock.564. **Apply the remediation** for the observed error type — auth failure (401),57 rate limit (429), or Klaviyo server error (5xx). The exact commands are in58 [references/remediation.md](references/remediation.md).595. **Communicate and write the postmortem.** Post the internal + external60 updates and, once resolved, collect evidence and fill the postmortem template61 from [references/communication-and-postmortem.md](references/communication-and-postmortem.md).6263## Output6465Following this runbook produces:6667- A **triage report** printed to the terminal: Klaviyo status-page state, your68 API auth HTTP code, current rate-limit headers, and app health.69- A **severity classification** (P1–P4) with the matching response-time target.70- An **applied mitigation** (key rotation, concurrency reduction, or graceful71 degradation) with confirmation the error rate is recovering.72- **Stakeholder updates** — one internal Slack message and, for P1/P2, one73 external status-page note.74- A **completed postmortem** document (summary, timeline, root cause, impact,75 action items, lessons learned) plus an evidence bundle of logs and metrics.7677## Examples7879**Triage first (always run this before anything else):**8081```bash82# Is Klaviyo itself down, or is it us?83curl -s "https://status.klaviyo.com/api/v2/status.json" \84 | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['status']['description'])"85```8687**Then classify by the auth HTTP code:**8889```bash90curl -s -w "\nHTTP %{http_code}\n" -o /dev/null \91 -H "Authorization: Klaviyo-API-Key $KLAVIYO_PRIVATE_KEY" \92 -H "revision: 2024-10-15" \93 "https://a.klaviyo.com/api/accounts/"94# 401 → key problem · 429 → rate limited · 5xx → Klaviyo server error95```9697For the complete triage script and decision tree see98[references/triage.md](references/triage.md); for the full per-error remediation99commands see [references/remediation.md](references/remediation.md); for the100Slack/status-page templates and the postmortem template see101[references/communication-and-postmortem.md](references/communication-and-postmortem.md).102103## Error Handling104105| Issue | Cause | Solution |106|-------|-------|----------|107| Can't reach status page | Network issue | Use mobile or check Twitter @klaviyo |108| Metrics unavailable | Prometheus down | Check direct API with cURL |109| Key rotation panic | No backup key | Always have a rotation procedure documented |110| Alert fatigue | Too many false alarms | Tune thresholds based on baseline |111112## Resources113114- [Triage script and decision tree](references/triage.md)115- [Per-error remediation (401 / 429 / 5xx)](references/remediation.md)116- [Communication templates and postmortem](references/communication-and-postmortem.md)117- [Klaviyo Status Page](https://status.klaviyo.com)118- [Klaviyo API Error Alerts](https://developers.klaviyo.com/en/docs/review_api_error_alerts)119- For data handling, see the `klaviyo-data-handling` skill.120121---122123**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`