EvoHub Docs Sign in

On-Call API › Integrations

Create an integration

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/api/v1/integrations

Creates an integration with a new ingest key. Point the monitoring tool at https://evohub.io/ingest/<type>?key=<api_key> (see the Alert ingest API reference). An email integration also gets its own inbound address in email_address.

An integration carries its ingest key (api_key), the credential a monitoring tool sends alerts with — treat these responses as secrets. An integration that belongs to a team is visible only to callers in that team; others get 404.

Permission (API-key scope): oncall:integration:write.

Authorization

Any one of:

Request body required

Content type: application/json

Type: IntegrationCreate

  • name string required
    Max length: 100
  • type string required
    The integration kind; it decides the ingest URL, /ingest/<type> (webhook is /ingest/alerts). Any other value is refused.
    One of: prometheus grafana datadog newrelic cloudwatch azuremonitor dynatrace sentry googlecloud zabbix uptimerobot pingdom site24x7 statuscake nagios prtg api cortex opensearch email webhook uptimekuma graylog splunk cloudflare instana netdata eventbridge elastic opmanager solarwinds sumologic appdynamics honeycomb wazuh checkmk icinga librenms fortigate github gitlab jenkins sonarqube
  • escalation_policy_id string
  • team_id string
    A team the caller is in; empty for organization-wide.

Responses

201

The integration, with its key.

Content type: application/json

Type: object

  • data Integration required
    Show Integration properties
    • id string
    • org_id string
    • team_id string
    • name string
    • type string
      The integration kind, e.g. prometheus, grafana, api, webhook, email, github.
    • api_key string
      The ingest key. A credential: treat it as a secret.
    • email_address string
      Inbound address, for email integrations only.
    • enabled boolean
    • escalation_policy_id string
    • last_event_at string (date-time)
    • event_count integer
    • signing_secret_configured boolean
      Whether a signing secret is set. The secret itself is never returned.
    • external_source string
    • external_id string
    • created_at string (date-time)
    • updated_at string (date-time)
  • success boolean required
    Value: true

400

The body is not JSON (INVALID_BODY); name is empty or too long, type is empty or not a known integration type, or escalation_policy_id names no policy the caller can see (VALIDATION_FAILED).

Content type: application/json

Type: ValidationError

  • error object required
    • code string required
      Value: VALIDATION_FAILED
    • message string required
    • details array of object required
      • field string
      • message string

401

No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

403

The key lacks the scope (FORBIDDEN), or team_id names a team the caller is not in (NOT_IN_TEAM).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

429

Too many requests (RATE_LIMITED). Wait Retry-After seconds.

Headers

  • Retry-After integer
    Seconds to wait.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

500

Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Machine-readable code. Branch on this.
    • message string required
      Human-readable explanation.

Example request

curl -X POST 'https://evohub.io/api/v1/integrations' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <TOKEN>' \
  -d '{
  "name": "Prometheus prod",
  "type": "prometheus",
  "escalation_policy_id": "3f8a0b2c-4d6e-4f8a-b1c3-d5e7f9a1b3c5"
}'

Last updated