EvoHub Docs Sign in

On-Call API › Incidents

Declare an incident

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/incidents

Declares an incident. It starts investigating, with the caller as commander unless commander_id names someone else, who must be a member who can respond to alerts.

To record an incident that already ended, send both started_at and resolved_at: it is stored resolved, with those times.

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

Authorization

Any one of:

Request body required

Content type: application/json

Type: IncidentCreate

  • title string required
  • severity IncidentSeverity required
    One of: none minor major critical
  • summary string
  • commander_id string
    Defaults to the caller.
  • started_at string (date-time)
    With resolved_at: record an incident that already ended.
  • resolved_at string (date-time)
    With started_at: record an incident that already ended. Must be after started_at and not in the future.

Responses

201

The incident.

Content type: application/json

Type: object

  • data Incident required
    Show Incident properties
    • id string required
    • org_id string
    • number integer required
      Sequential number within the organization.
    • title string required
    • summary string
    • severity IncidentSeverity required
      One of: none minor major critical
    • status IncidentStatus required
      One of: investigating identified monitoring resolved
    • commander_id string
    • started_at string (date-time) required
    • identified_at string (date-time)
    • resolved_at string (date-time)
    • created_at string (date-time)
    • updated_at string (date-time)
  • success boolean required
    Value: true

400

The body is not JSON (INVALID_BODY); title or severity is missing or severity is not one of the four values, or the past times are not a start before an end that has already happened (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 this endpoint needs (FORBIDDEN).

Content type: application/json

Type: Error

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

404

commander_id is not a member of the organization (NOT_A_MEMBER).

Content type: application/json

Type: Error

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

422

The person cannot respond to alerts: they do not hold oncall:alert:respond (CANNOT_RESPOND).

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.

503

Whether the person may be paged could not be checked right now; nothing was changed (MEMBER_CHECK_UNAVAILABLE). Retry shortly.

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/incidents' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <TOKEN>' \
  -d '{
  "title": "Checkout payments failing",
  "summary": "Card payments time out for about 30% of customers.",
  "severity": "major"
}'

Last updated