Intercom Incident Runbook
Overview
Rapid incident response procedures for Intercom integration failures. The runbook
takes you from alert to resolution in four phases — triage, decision, mitigation,
and postmortem — with HTTP-status-code-driven branching so you always know whether
the fault is yours or Intercom's. High-level workflow lives here; the full
copy-paste scripts and templates live in references/.
Prerequisites
INTERCOM_ACCESS_TOKEN exported in your shell (a workspace admin token).
curl and jq installed for API + status-page probing.
kubectl access to the deployment running your Intercom integration (for restarts).
- Access to your secret manager (e.g. AWS Secrets Manager) to rotate a compromised token.
- Developer Hub access for the Intercom app, or a path to escalate to a workspace admin.
Severity Levels
| Level |
Definition |
Response Time |
Example |
| P1 |
All Intercom API calls failing |
< 15 min |
401 auth failures, API unreachable |
| P2 |
Degraded service |
< 1 hour |
High latency, rate limited (429) |
| P3 |
Partial impact |
< 4 hours |
Webhook delays, search timeouts |
| P4 |
No user impact |
Next business day |
Monitoring gaps, stale cache |
Instructions
Work the phases in order. Each phase links to the full reference when you need depth.
Assign severity. Match the symptom to the table above; this sets your clock
and who you page.
Triage — is it you or Intercom? Run the first probe to confirm reachability:
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $INTERCOM_ACCESS_TOKEN" \
https://api.intercom.io/me
Then check status.intercom.com for a platform incident and read the rate-limit
headers. The full 5-step diagnostic script and the branch-by-branch decision tree
are in references/triage.md.
Decide. If Intercom reports an incident, it is their problem — enable graceful
degradation and monitor. If not, it is your integration; branch on the status code:
401 → rotate token, 403 → add OAuth scope, 429 → queue/backoff, 5xx → retry with backoff.
Mitigate by error type. Apply the matching remediation — token rotation for 401,
volume reduction for 429, cached-data fallback for 5xx. Full commands (including the
aws secretsmanager rotation and the kubectl rollout restart) plus the TypeScript
graceful-degradation pattern are in references/mitigation.md.
Communicate. Post the internal Slack status update on a fixed cadence using the
template in references/templates.md.
Write the postmortem. After resolution, fill in the postmortem template
(timeline, root cause, impact counts, action items) from
references/templates.md. Always record Intercom
request_ids captured during the incident — Intercom support needs them.
Output
Working through the runbook produces:
- A severity classification (P1–P4) with a bounded response clock.
- A fault verdict — Intercom-side platform incident vs. your integration — backed by
the triage script's HTTP codes, status-page state, and rate-limit headers.
- A mitigation applied for the specific error class (rotated token, paused sync jobs,
enabled cache fallback, or retry/backoff).
- A communication trail — timestamped Slack updates on cadence.
- A completed postmortem with timeline, root cause, impact counts, captured Intercom
request_ids, and owned action items.
Examples
Fast triage during a suspected outage — confirm reachability, then check the platform:
curl -s -o /dev/null -w "API=%{http_code}\n" \
-H "Authorization: Bearer $INTERCOM_ACCESS_TOKEN" https://api.intercom.io/me
curl -s https://status.intercom.com/api/v2/status.json | jq -r '.status.description'
A 401 with a green status page means your token, not Intercom — jump to the 401
mitigation. The full 5-step diagnostic, the decision tree, per-status mitigation
commands, and the Slack/postmortem templates are all in references/:
- references/triage.md — full triage script + decision tree
- references/mitigation.md — 401 / 429 / 5xx remediation + graceful degradation
- references/templates.md — Slack update + postmortem templates
Error Handling
| Issue |
Cause |
Solution |
| Triage script fails |
Token not set |
Export INTERCOM_ACCESS_TOKEN |
| Status page unreachable |
DNS/network |
Try mobile network or VPN |
| Can't rotate token |
No Developer Hub access |
Escalate to workspace admin |
| Cache empty during outage |
No pre-warming |
Implement cache warming job |
Resources
For data handling compliance, see intercom-data-handling.
Source: jeremylongshore/claude-code-plugins-plus-skills → plugins/saas-packs/intercom-pack/skills/intercom-incident-runbook/SKILL.md
1---2name: intercom-incident-runbook3description: "| Execute Intercom incident response procedures with triage, mitigation, and postmortem. Use when responding to Intercom API outages, investigating integration errors, or running post-incident reviews for Intercom failures. Trigger with phrases like \"intercom incident\", \"intercom outage\", \"intercom down\", \"intercom on-call\", \"intercom emergency\", \"intercom broken\"."4allowed-tools: "Bash(curl:*), Bash(kubectl:*)"5category: engineering-core6source_repo: jeremylongshore/claude-code-plugins-plus-skills7source_path: "plugins/saas-packs/intercom-pack/skills/intercom-incident-runbook/SKILL.md"8source_url: https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/HEAD/plugins/saas-packs/intercom-pack/skills/intercom-incident-runbook/SKILL.md9---1011# Intercom Incident Runbook1213## Overview1415Rapid incident response procedures for Intercom integration failures. The runbook16takes you from alert to resolution in four phases — triage, decision, mitigation,17and postmortem — with HTTP-status-code-driven branching so you always know whether18the fault is yours or Intercom's. High-level workflow lives here; the full19copy-paste scripts and templates live in `references/`.2021## Prerequisites2223- `INTERCOM_ACCESS_TOKEN` exported in your shell (a workspace admin token).24- `curl` and `jq` installed for API + status-page probing.25- `kubectl` access to the deployment running your Intercom integration (for restarts).26- Access to your secret manager (e.g. AWS Secrets Manager) to rotate a compromised token.27- Developer Hub access for the Intercom app, or a path to escalate to a workspace admin.2829## Severity Levels3031| Level | Definition | Response Time | Example |32|-------|------------|---------------|---------|33| P1 | All Intercom API calls failing | < 15 min | 401 auth failures, API unreachable |34| P2 | Degraded service | < 1 hour | High latency, rate limited (429) |35| P3 | Partial impact | < 4 hours | Webhook delays, search timeouts |36| P4 | No user impact | Next business day | Monitoring gaps, stale cache |3738## Instructions3940Work the phases in order. Each phase links to the full reference when you need depth.41421. **Assign severity.** Match the symptom to the table above; this sets your clock43 and who you page.44452. **Triage — is it you or Intercom?** Run the first probe to confirm reachability:4647 ```bash48 curl -s -o /dev/null -w "%{http_code}" \49 -H "Authorization: Bearer $INTERCOM_ACCESS_TOKEN" \50 https://api.intercom.io/me51 ```5253 Then check `status.intercom.com` for a platform incident and read the rate-limit54 headers. The full 5-step diagnostic script and the branch-by-branch decision tree55 are in [references/triage.md](references/triage.md).56573. **Decide.** If Intercom reports an incident, it is their problem — enable graceful58 degradation and monitor. If not, it is your integration; branch on the status code:59 401 → rotate token, 403 → add OAuth scope, 429 → queue/backoff, 5xx → retry with backoff.60614. **Mitigate by error type.** Apply the matching remediation — token rotation for 401,62 volume reduction for 429, cached-data fallback for 5xx. Full commands (including the63 `aws secretsmanager` rotation and the `kubectl rollout restart`) plus the TypeScript64 graceful-degradation pattern are in [references/mitigation.md](references/mitigation.md).65665. **Communicate.** Post the internal Slack status update on a fixed cadence using the67 template in [references/templates.md](references/templates.md).68696. **Write the postmortem.** After resolution, fill in the postmortem template70 (timeline, root cause, impact counts, action items) from71 [references/templates.md](references/templates.md). Always record Intercom72 `request_id`s captured during the incident — Intercom support needs them.7374## Output7576Working through the runbook produces:7778- A **severity classification** (P1–P4) with a bounded response clock.79- A **fault verdict** — Intercom-side platform incident vs. your integration — backed by80 the triage script's HTTP codes, status-page state, and rate-limit headers.81- A **mitigation applied** for the specific error class (rotated token, paused sync jobs,82 enabled cache fallback, or retry/backoff).83- A **communication trail** — timestamped Slack updates on cadence.84- A **completed postmortem** with timeline, root cause, impact counts, captured Intercom85 `request_id`s, and owned action items.8687## Examples8889**Fast triage during a suspected outage** — confirm reachability, then check the platform:9091```bash92curl -s -o /dev/null -w "API=%{http_code}\n" \93 -H "Authorization: Bearer $INTERCOM_ACCESS_TOKEN" https://api.intercom.io/me94curl -s https://status.intercom.com/api/v2/status.json | jq -r '.status.description'95```9697A `401` with a green status page means your token, not Intercom — jump to the 40198mitigation. The full 5-step diagnostic, the decision tree, per-status mitigation99commands, and the Slack/postmortem templates are all in `references/`:100101- [references/triage.md](references/triage.md) — full triage script + decision tree102- [references/mitigation.md](references/mitigation.md) — 401 / 429 / 5xx remediation + graceful degradation103- [references/templates.md](references/templates.md) — Slack update + postmortem templates104105## Error Handling106107| Issue | Cause | Solution |108|-------|-------|----------|109| Triage script fails | Token not set | Export INTERCOM_ACCESS_TOKEN |110| Status page unreachable | DNS/network | Try mobile network or VPN |111| Can't rotate token | No Developer Hub access | Escalate to workspace admin |112| Cache empty during outage | No pre-warming | Implement cache warming job |113114## Resources115116- [Intercom Status Page](https://status.intercom.com)117- [Intercom Status API](https://status.intercom.com/api)118- [Error Codes](https://developers.intercom.com/docs/references/rest-api/errors/error-codes)119- [Rate Limiting](https://developers.intercom.com/docs/references/rest-api/errors/rate-limiting)120121For data handling compliance, see `intercom-data-handling`.122123---124125**Source:** [`jeremylongshore/claude-code-plugins-plus-skills`](https://github.com/jeremylongshore/claude-code-plugins-plus-skills) → `plugins/saas-packs/intercom-pack/skills/intercom-incident-runbook/SKILL.md`