This reference documents the JSON payload PulseAPI sends to webhook notification channels when incidents are created or resolved.
{
"event": "incident.created",
"triggered_at": "2026-04-16T14:23:00Z",
"incident": {
"id": 1234,
"title": "Production API — Status code 503",
"status": "open",
"severity": "critical",
"started_at": "2026-04-16T14:23:00Z",
"acknowledged_at": null,
"resolved_at": null,
"root_cause": null
},
"monitor": {
"id": 42,
"name": "Production API",
"url": "https://api.yourapp.com/health",
"method": "GET"
},
"check": {
"status": "failed",
"http_status_code": 503,
"response_time_ms": 1203,
"error": "HTTP error: 503 Service Unavailable",
"checked_at": "2026-04-16T14:23:00Z"
},
"team": {
"id": 7,
"name": "Acme Corp"
}
}
{
"event": "incident.resolved",
"triggered_at": "2026-04-16T14:47:00Z",
"incident": {
"id": 1234,
"title": "Production API — Status code 503",
"status": "resolved",
"severity": "critical",
"started_at": "2026-04-16T14:23:00Z",
"acknowledged_at": "2026-04-16T14:28:00Z",
"resolved_at": "2026-04-16T14:47:00Z",
"duration_seconds": 1440,
"root_cause": "Database connection pool exhausted during deploy"
},
"monitor": {
"id": 42,
"name": "Production API",
"url": "https://api.yourapp.com/health",
"method": "GET"
},
"team": {
"id": 7,
"name": "Acme Corp"
}
}
| Field | Type | Description |
|---|---|---|
event |
string | "incident.created" or "incident.resolved" |
triggered_at |
ISO 8601 datetime | When the webhook was dispatched (UTC) |
incident |
object | The incident object (see below) |
monitor |
object | The affected monitor (see below) |
check |
object | The check that triggered the incident (only on incident.created) |
team |
object | The team the monitor belongs to |
| Field | Type | Description |
|---|---|---|
id |
integer | Unique incident ID |
title |
string | Auto-generated incident title |
status |
string | "open", "acknowledged", or "resolved" |
severity |
string | "critical", "high", "medium", or "low" |
started_at |
ISO 8601 datetime | When the incident was created (UTC) |
acknowledged_at |
ISO 8601 datetime | null | When acknowledged, or null |
resolved_at |
ISO 8601 datetime | null | When resolved, or null |
duration_seconds |
integer | null | Duration in seconds (only present after resolution) |
root_cause |
string | null | Root cause note added at resolution, or null |
| Field | Type | Description |
|---|---|---|
id |
integer | Unique monitor ID |
name |
string | Monitor name |
url |
string | The URL being monitored |
method |
string | HTTP method (GET, POST, etc.) |
| Field | Type | Description |
|---|---|---|
status |
string | "failed" |
http_status_code |
integer | null | HTTP status code returned (null if no response) |
response_time_ms |
integer | null | Response time in ms (null on timeout/connection failure) |
error |
string | null | Error description if the check failed |
checked_at |
ISO 8601 datetime | When the check was performed (UTC) |
PulseAPI expects your webhook endpoint to:
POST requests2xx response within 10 secondsContent-Type: application/jsonIf your endpoint returns a non-2xx response or times out, PulseAPI marks the delivery as failed. Currently, failed deliveries are not automatically retried.
Still have questions? Contact support.