EvoHub Docs Sign in
EnglishEN

Alert ingest API › Integration webhooks

Receive a monitoring tool's webhook

Use with AI
View as MarkdownThis page as plain text, for pasting into an AI tool Open in ClaudeAsk Claude questions about this page Open in ChatGPTAsk ChatGPT questions about this page
Connect to Cursor / VS Code / ClaudeSearch and read these docs from your AI tool (MCP server)

MCP server URL

https://docs-dev.evohub.io/mcp

Claude Code

claude mcp add --transport http evohub-docs-docs https://docs-dev.evohub.io/mcp

Claude (claude.ai and Claude Desktop): Settings → Connectors → Add custom connector, and paste the URL above.

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://docs-dev.evohub.io/mcp"
      ]
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "evohub-docs-docs": {
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}

VS Code — .vscode/mcp.json

{
  "servers": {
    "evohub-docs-docs": {
      "type": "http",
      "url": "https://docs-dev.evohub.io/mcp"
    }
  }
}
POST/ingest/{type}

The endpoint each integration's webhook URL points at, shown with its key in On-Call → Integrations. type selects the parser.

For alerts the body is EvoHub's generic alert (below). For every other type it is the tool's own webhook payload, sent unchanged — a firing alert opens an alert, and where the tool reports recovery, the matching open alert is resolved. Most tools send JSON; UptimeRobot, StatusCake, Site24x7 and PRTG may send form-encoded data (UptimeRobot may also append its fields to the URL's query string), and those are read too.

Answers 200 whenever the payload was read, even if it produced no alert, so tools do not disable the webhook; created and resolved say what happened. An AWS SNS subscription confirmation sent to cloudwatch is confirmed automatically and answered with {"data": {"confirmed": true}, "success": true}.

Authorization

Requires:

Parameters

Path parameters

  • type string required
    The integration type.
    One of: alerts prometheus grafana datadog newrelic cloudwatch azuremonitor dynatrace sentry googlecloud zabbix uptimerobot pingdom site24x7 statuscake nagios prtg cortex opensearch · Example: alerts

Query parameters

  • key string required
    The integration key.
    Example: YOUR_INTEGRATION_KEY

Request body required

application/json

Type: GenericAlert | object

One of:

  • GenericAlert
    Show GenericAlert properties
    • title string required
      Example: Disk almost full on web-03
    • description string
    • severity string
      One of: critical high medium low info · Default: medium
    • source string
      The alert's source; webhook when omitted.
      Default: webhook
    • fingerprint string
      Deduplicates repeated sends while the alert is open.
    • escalation_policy_id string
      Used only when the integration has no escalation policy of its own.
    • labels object
      Other keys: string
    • annotations object
      Other keys: string
  • Native payload
    The monitoring tool's own webhook body, for every type except alerts.
    Other keys: any

application/x-www-form-urlencoded

Type: object

Form-encoded bodies sent by uptimerobot, statuscake, site24x7 and prtg.

Other keys: string

Responses

200

The payload was read.

Content type: application/json

Type: IngestResult

  • data object
    • received integer
      Alerts and recoveries found in the payload.
    • created integer
      Alerts opened, or matched to an alert already open with the same fingerprint.
    • resolved integer
      Recoveries processed.
  • success boolean
    Value: true

400

The body could not be read as this type's payload (INVALID_BODY); for azuremonitor, the common alert schema is not enabled (INVALID_SCHEMA); for alerts, title is missing (VALIDATION_FAILED, with details).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: INVALID_KEY
    • message string required
      Example: invalid integration key
    • details array of object
      Field problems, on VALIDATION_FAILED.
      • field string
      • message string

401

key is missing, unknown, or names a disabled integration (INVALID_KEY).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: INVALID_KEY
    • message string required
      Example: invalid integration key
    • details array of object
      Field problems, on VALIDATION_FAILED.
      • field string
      • message string

500

The alert could not be stored (INTERNAL_ERROR).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: INVALID_KEY
    • message string required
      Example: invalid integration key
    • details array of object
      Field problems, on VALIDATION_FAILED.
      • field string
      • message string

503

The key could not be checked right now (INGEST_UNAVAILABLE). Retry after the delay given.

Headers

  • Retry-After integer
    Seconds to wait before retrying.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: INVALID_KEY
    • message string required
      Example: invalid integration key
    • details array of object
      Field problems, on VALIDATION_FAILED.
      • field string
      • message string

Example request

curl -X POST 'https://evohub.io/ingest/alerts?key=<INTEGRATION_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "Disk almost full on web-03",
  "labels": {
    "host": "web-03.acme.example"
  },
  "source": "cron-disk-check",
  "severity": "high",
  "description": "/var is at 93%",
  "fingerprint": "web-03-disk-var"
}'

Last updated