Integrations
Send alerts from your existing monitoring tools directly into postmortem.so. Incidents are created automatically, enriched with the external signal data, and used to generate richer AI post-mortems.
Sentry
Route error alerts with stack traces and occurrence data
Grafana
Ingest metric alerts and threshold breaches
Generic Webhook
Connect any tool via a simple JSON payload
PagerDutyComing soon
Incident alerts and escalation data
BetterStack
Uptime alerts via token-authenticated webhook
Quick Start
- Go to your project → Settings → Incident Sources → Webhook ingestion.
- Toggle Enable webhook ingestion on.
- Select the adapter that matches your monitoring tool.
- For Sentry / Grafana / Generic: click Generate secret and copy the value — shown only once. For BetterStack: click Generate URL — the token is embedded in the URL.
- Copy the Webhook URL and paste it into your tool's settings.
Sentry
POST https://postmortem.so/api/v1/webhooks/{projectId}/sentryHandles Sentry's issue, metric alert, and event alert resource types. Signature verification uses the sentry-hook-signature header (HMAC-SHA256 signed with your webhook secret).
- In Sentry, go to Settings → Integrations → Webhooks.
- Set the webhook URL to the Sentry adapter URL above.
- Set the client secret to the secret you generated in postmortem.so.
- Optionally enter a Sentry project slug in your postmortem.so settings to only accept events from that specific Sentry project.
When Sentry sends a “resolved” action for an issue or metric alert, the corresponding open incident is automatically resolved.
Grafana
POST https://postmortem.so/api/v1/webhooks/{projectId}/grafanaHandles Grafana's Unified Alerting format (Grafana 9+). A single delivery may contain multiple alerts — they are consolidated into one incident context entry.
- In Grafana, go to Alerting → Contact Points → Add Contact Point.
- Select Webhook as the integration type.
- Set the URL to the Grafana adapter URL above.
- Optional HMAC signing (Grafana ≥ 12.0): enable HMAC verification and enter your postmortem.so webhook secret. Older versions should send the secret via an
X-Webhook-Secretcustom header instead. - Save and assign the contact point to your notification policies.
When Grafana sends status: “resolved” for an alert group, postmortem.so automatically resolves the open incident. Repeated deliveries for the same alert group are idempotent.
BetterStack
POST https://postmortem.so/api/webhooks/betterstack/{token}BetterStack Uptime does not sign outgoing webhooks with an HMAC secret. Instead, postmortem.so uses a token embedded in the URL as the authentication mechanism — keep the URL private.
- In your project settings, go to Webhook ingestion and select the BetterStack adapter.
- Click Generate URL and copy the full webhook URL.
- In BetterStack, go to Integrations → Webhook and paste the URL. Leave the payload format as the default.
- Toggle Enable webhook ingestion on in postmortem.so.
When BetterStack reports a monitor as down, a new incident is created (or the existing open one is updated). When the status returns to up or a resolved_at timestamp is present, the open incident is automatically resolved.
If you rotate the token (via Rotate token in settings), update the webhook URL in BetterStack — the old URL stops working immediately.
Generic Webhook
POST https://postmortem.so/api/v1/webhooks/{projectId}/genericUse generic when your source doesn't have a dedicated adapter, or for custom scripts and internal tooling. Authentication: include your secret in the X-Webhook-Secret header.
Recognized body fields (all optional except at least a title):
title/alert_title/name— incident titledescription/message— longer descriptionid/event_id— deduplication IDaction— set to"resolve"to resolve the current open incidentseverity/priority— shown in the context summary
How incident matching works
- If the project has an open incident, the incoming alert is attached to it as an incident context entry.
- If there is no open incident, a new one is created using the alert's title.
- Duplicate events (same source + event ID) are silently ignored via a unique constraint on the
externalIdfield.
AI post-mortems
Webhook context is automatically included when generating an AI post-mortem. The external signals — Sentry errors, Grafana threshold breaches, or any other attached events — give the AI model richer data to infer root causes and write better action items.
Rate limits
- Pro: 100 webhook events per hour, per project
- Team: 500 webhook events per hour, per project
When the limit is reached, the endpoint returns HTTP 429. Events resume being accepted after the one-hour rolling window resets.
Via MCP
Two MCP tools manage webhook ingestion programmatically:
get_webhook_url— returns the webhook URL and whether ingestion is enabled. Available on all plans.configure_webhook— enables/disables ingestion and regenerates the secret. Requires Pro or Team.
See the MCP Setup guide to connect your AI assistant to postmortem.so.
Example payloads
Reference payload shapes are available in the lib/webhooks/__fixtures__/ directory of the postmortem.so repository for integration testing.
Generic trigger
POST /api/v1/webhooks/{projectId}/generic
X-Webhook-Secret: <your-secret>
{
"title": "High error rate on /api/checkout",
"description": "Error rate exceeded 5% for 3 consecutive minutes.",
"id": "alert-001",
"severity": "critical",
"action": "trigger"
}Generic resolve
POST /api/v1/webhooks/{projectId}/generic
X-Webhook-Secret: <your-secret>
{
"title": "High error rate on /api/checkout",
"id": "alert-001",
"action": "resolve"
}