{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/getuptimely-com/json-schema/getuptimely-com-webhook-endpoint-schema.json",
  "title": "WebhookEndpoint",
  "description": "A registered outbound webhook endpoint.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/getuptimely-com-openapi.json#/components/schemas/WebhookEndpoint",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Stable opaque endpoint id."
    },
    "url": {
      "type": "string",
      "description": "The https:// URL deliveries are POSTed to."
    },
    "description": {
      "description": "Optional human label.",
      "type": [
        "string",
        "null"
      ]
    },
    "event_types": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "monitor.status_changed",
          "incident.declared",
          "incident.state_changed",
          "alert.created",
          "alert.state_changed"
        ]
      },
      "description": "Event types this endpoint is subscribed to."
    },
    "enabled": {
      "type": "boolean",
      "description": "False when paused by you, or auto-disabled after sustained delivery failures (see `disabled_reason`)."
    },
    "disabled_reason": {
      "description": "Why the endpoint was automatically disabled, when it was. Null otherwise.",
      "type": [
        "string",
        "null"
      ]
    },
    "consecutive_failures": {
      "type": "number",
      "description": "Deliveries that failed terminally in a row. Resets to 0 on any success."
    },
    "secret_hint": {
      "type": "string",
      "description": "Last 4 characters of the signing secret — enough to identify it, useless as a key. The full secret is shown only at create and rotate time."
    },
    "created_at": {
      "type": "string",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      "format": "date-time"
    },
    "updated_at": {
      "type": "string",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      "format": "date-time"
    }
  },
  "required": [
    "id",
    "url",
    "description",
    "event_types",
    "enabled",
    "disabled_reason",
    "consecutive_failures",
    "secret_hint",
    "created_at",
    "updated_at"
  ],
  "additionalProperties": false
}