Webhook Payload Reference

Webhook Payload Reference

This reference documents the JSON payload PulseAPI sends to webhook notification channels when incidents are created or resolved.


Incident Created Payload

{
  "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"
  }
}

Incident Resolved Payload

{
  "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 Reference

Top-Level Fields

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

Incident Object

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

Monitor Object

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.)

Check Object (incident.created only)

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)

HTTP Requirements

PulseAPI expects your webhook endpoint to:

  • Accept POST requests
  • Return an HTTP 2xx response within 10 seconds
  • Accept Content-Type: application/json

If your endpoint returns a non-2xx response or times out, PulseAPI marks the delivery as failed. Currently, failed deliveries are not automatically retried.


Related Articles


Still have questions? Contact support.

    • Related Articles

    • Setting Up Webhook Notifications

      This article explains how to create a webhook notification channel so PulseAPI can send JSON payloads to any URL when incidents are created or resolved. Use webhooks to integrate with PagerDuty, Opsgenie, custom incident systems, or any service that ...
    • Key Concepts: Endpoints, Checks, Incidents, and Alerts

      This article explains the four core building blocks of PulseAPI and how they work together. Understanding these concepts makes every other part of the product easier to use. Endpoint (Monitor) An endpoint is a URL you want PulseAPI to watch. In ...
    • Monitor Settings Reference

      This article describes every field in the monitor create/edit form. Use it as a reference when configuring a monitor or troubleshooting unexpected behavior. Basic Settings Name A label for the monitor. Appears in the dashboard, incident ...
    • Testing a Notification Channel

      Before relying on a notification channel to deliver real alerts, send a test notification to confirm it's working. This article explains how. How to Send a Test Notification In the left sidebar, click Alerts. Click Notification Channels. Find the ...
    • Setting Up Slack Notifications

      This article explains how to connect PulseAPI to Slack so your team receives alert notifications in a Slack channel. Prerequisites: Slack notifications require a Starter, Professional, or Team plan. You'll need permission to add apps to your Slack ...