{
  "name": "ohdear",
  "displayName": "Oh Dear",
  "description": "A Pulumi provider for Oh Dear: manage monitors, status pages, tags, and notification destinations.",
  "keywords": [
    "ohdear",
    "monitoring",
    "uptime",
    "status-page",
    "category/monitoring",
    "kind/native"
  ],
  "homepage": "https://ohdear.app",
  "license": "Apache-2.0",
  "repository": "https://github.com/matthiashamacher/pulumi-ohdear",
  "logoUrl": "https://raw.githubusercontent.com/matthiashamacher/pulumi-ohdear/main/assets/logo.png",
  "pluginDownloadURL": "github://api.github.com/matthiashamacher/pulumi-ohdear",
  "publisher": "Matthias Hamacher",
  "namespace": "matthiashamacher",
  "language": {
    "csharp": {
      "respectSchemaVersion": true
    },
    "go": {
      "generateResourceContainerTypes": true,
      "respectSchemaVersion": true
    },
    "java": {
      "basePackage": "io.github.matthiashamacher"
    },
    "nodejs": {
      "packageName": "@matthiashamacher/ohdear",
      "respectSchemaVersion": true
    },
    "python": {
      "packageName": "matthiashamacher_ohdear",
      "pyproject": {
        "enabled": true
      },
      "respectSchemaVersion": true
    }
  },
  "config": {
    "variables": {
      "apiToken": {
        "type": "string",
        "description": "Oh Dear API token, sent as a Bearer token on every request. Defaults to the OHDEAR_API_TOKEN environment variable.",
        "default": "",
        "defaultInfo": {
          "environment": [
            "OHDEAR_API_TOKEN"
          ]
        },
        "secret": true
      }
    }
  },
  "types": {
    "ohdear:index:StatusPageMonitor": {
      "properties": {
        "clickable": {
          "type": "boolean",
          "description": "Whether the entry links to the monitor's detail page. Default false."
        },
        "id": {
          "type": "integer",
          "description": "Monitor ID to show on the page."
        }
      },
      "type": "object",
      "required": [
        "id"
      ]
    }
  },
  "provider": {
    "properties": {
      "apiToken": {
        "type": "string",
        "description": "Oh Dear API token, sent as a Bearer token on every request. Defaults to the OHDEAR_API_TOKEN environment variable.",
        "default": "",
        "defaultInfo": {
          "environment": [
            "OHDEAR_API_TOKEN"
          ]
        },
        "secret": true
      }
    },
    "required": [
      "apiToken"
    ],
    "inputProperties": {
      "apiToken": {
        "type": "string",
        "description": "Oh Dear API token, sent as a Bearer token on every request. Defaults to the OHDEAR_API_TOKEN environment variable.",
        "default": "",
        "defaultInfo": {
          "environment": [
            "OHDEAR_API_TOKEN"
          ]
        },
        "secret": true
      }
    }
  },
  "resources": {
    "ohdear:index:CronCheck": {
      "description": "An Oh Dear cron job monitor. Curl `pingUrl` from the job on success.",
      "properties": {
        "createdAt": {
          "type": "string",
          "description": "When the cron check was created, as an ISO 8601 timestamp."
        },
        "cronCheckId": {
          "type": "integer",
          "description": "Numeric Oh Dear cron check ID."
        },
        "cronExpression": {
          "type": "string",
          "description": "For \"cron\" checks: crontab expression for when a ping is expected."
        },
        "description": {
          "type": "string",
          "description": "Free-form description."
        },
        "frequencyInMinutes": {
          "type": "integer",
          "description": "For \"simple\" checks: how often a ping is expected."
        },
        "graceTimeInMinutes": {
          "type": "integer",
          "description": "How long a ping may be late before the check alerts."
        },
        "humanReadableCronExpression": {
          "type": "string",
          "description": "Plain-English rendering of the schedule."
        },
        "monitorId": {
          "type": "integer",
          "description": "Monitor this cron check belongs to. Immutable — the API cannot move a check between monitors.",
          "replaceOnChanges": true
        },
        "name": {
          "type": "string",
          "description": "Display name for the cron check."
        },
        "pingUrl": {
          "type": "string",
          "description": "URL the job must request on each successful run."
        },
        "serverTimezone": {
          "type": "string",
          "description": "For \"cron\" checks: timezone the expression is evaluated in, e.g. Europe/Berlin."
        },
        "type": {
          "type": "string",
          "description": "One of \"simple\" (uses frequencyInMinutes) or \"cron\" (uses cronExpression + serverTimezone)."
        },
        "uuid": {
          "type": "string",
          "description": "Stable UUID for the cron check; part of the ping URL."
        }
      },
      "required": [
        "monitorId",
        "name",
        "type",
        "cronCheckId",
        "uuid",
        "pingUrl",
        "humanReadableCronExpression",
        "createdAt"
      ],
      "inputProperties": {
        "cronExpression": {
          "type": "string",
          "description": "For \"cron\" checks: crontab expression for when a ping is expected."
        },
        "description": {
          "type": "string",
          "description": "Free-form description."
        },
        "frequencyInMinutes": {
          "type": "integer",
          "description": "For \"simple\" checks: how often a ping is expected."
        },
        "graceTimeInMinutes": {
          "type": "integer",
          "description": "How long a ping may be late before the check alerts."
        },
        "monitorId": {
          "type": "integer",
          "description": "Monitor this cron check belongs to. Immutable — the API cannot move a check between monitors.",
          "replaceOnChanges": true
        },
        "name": {
          "type": "string",
          "description": "Display name for the cron check."
        },
        "serverTimezone": {
          "type": "string",
          "description": "For \"cron\" checks: timezone the expression is evaluated in, e.g. Europe/Berlin."
        },
        "type": {
          "type": "string",
          "description": "One of \"simple\" (uses frequencyInMinutes) or \"cron\" (uses cronExpression + serverTimezone)."
        }
      },
      "requiredInputs": [
        "monitorId",
        "name",
        "type"
      ]
    },
    "ohdear:index:Monitor": {
      "description": "An Oh Dear monitor (http, ping, tcp or ai).",
      "properties": {
        "aiCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "AI check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "applicationHealthCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Application-health check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "brokenLinksCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Broken-links check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "certificateHealthCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Certificate-health check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "checks": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Check types to enable (uptime, broken_links, lighthouse, performance, dns, certificate_health, mixed_content, ...)."
        },
        "crawlerSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Crawler settings shared by the crawl-based checks. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "createdAt": {
          "type": "string",
          "description": "When the monitor was created, as an ISO 8601 timestamp."
        },
        "description": {
          "type": "string",
          "description": "Short description of what is monitored."
        },
        "dnsBlocklistCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "DNS-blocklist check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "dnsCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "DNS check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "domainCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Domain-expiry check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "friendlyName": {
          "type": "string",
          "description": "Display name in the Oh Dear UI. Not echoed by the API; kept from inputs."
        },
        "groupName": {
          "type": "string",
          "description": "Group the monitor is filed under."
        },
        "includeCheckTypesInReport": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Check types included in that report."
        },
        "label": {
          "type": "string",
          "description": "Human-readable label the API derives from the URL."
        },
        "lighthouseCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Lighthouse check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "monitorId": {
          "type": "integer",
          "description": "Numeric Oh Dear monitor ID."
        },
        "notes": {
          "type": "string",
          "description": "Free-form notes."
        },
        "performanceCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Performance check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "portsCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Ports check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "realIpAddress": {
          "type": "string",
          "description": "Origin server IP for sites behind a proxy or CDN."
        },
        "sendReportToEmails": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Addresses that receive the monitor's periodic report."
        },
        "sitemapCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Sitemap check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "sortUrl": {
          "type": "string",
          "description": "Normalised URL the API uses for sorting."
        },
        "summarizedCheckResult": {
          "type": "string",
          "description": "Worst current result across the checks (succeeded / failed / warning)."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tag names applied to the monitor."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the monitor. Immutable — a change replaces it.",
          "replaceOnChanges": true
        },
        "type": {
          "type": "string",
          "description": "Monitor type: \"http\", \"ping\", \"tcp\" or \"ai\".",
          "default": "http",
          "replaceOnChanges": true
        },
        "updatedAt": {
          "type": "string",
          "description": "When the monitor was last updated, as an ISO 8601 timestamp."
        },
        "uptimeCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Uptime/reachability check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "url": {
          "type": "string",
          "description": "URL or hostname to monitor."
        },
        "usesHttps": {
          "type": "boolean",
          "description": "Whether the monitored URL uses HTTPS."
        }
      },
      "required": [
        "url",
        "teamId",
        "type",
        "monitorId",
        "label",
        "usesHttps",
        "sortUrl",
        "summarizedCheckResult",
        "createdAt",
        "updatedAt"
      ],
      "inputProperties": {
        "aiCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "AI check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "applicationHealthCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Application-health check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "brokenLinksCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Broken-links check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "certificateHealthCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Certificate-health check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "checks": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Check types to enable (uptime, broken_links, lighthouse, performance, dns, certificate_health, mixed_content, ...)."
        },
        "crawlerSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Crawler settings shared by the crawl-based checks. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "description": {
          "type": "string",
          "description": "Short description of what is monitored."
        },
        "dnsBlocklistCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "DNS-blocklist check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "dnsCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "DNS check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "domainCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Domain-expiry check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "friendlyName": {
          "type": "string",
          "description": "Display name in the Oh Dear UI. Not echoed by the API; kept from inputs."
        },
        "groupName": {
          "type": "string",
          "description": "Group the monitor is filed under."
        },
        "includeCheckTypesInReport": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Check types included in that report."
        },
        "lighthouseCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Lighthouse check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "notes": {
          "type": "string",
          "description": "Free-form notes."
        },
        "performanceCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Performance check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "portsCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Ports check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "realIpAddress": {
          "type": "string",
          "description": "Origin server IP for sites behind a proxy or CDN."
        },
        "sendReportToEmails": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Addresses that receive the monitor's periodic report."
        },
        "sitemapCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Sitemap check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tag names applied to the monitor."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the monitor. Immutable — a change replaces it.",
          "replaceOnChanges": true
        },
        "type": {
          "type": "string",
          "description": "Monitor type: \"http\", \"ping\", \"tcp\" or \"ai\".",
          "default": "http",
          "replaceOnChanges": true
        },
        "uptimeCheckSettings": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Uptime/reachability check tuning. Open map passed through to the matching *_check_settings API object; see https://ohdear.app/docs/api/monitors. Only keys set here are reconciled on refresh."
        },
        "url": {
          "type": "string",
          "description": "URL or hostname to monitor."
        }
      },
      "requiredInputs": [
        "url",
        "teamId"
      ]
    },
    "ohdear:index:NotificationDestination": {
      "description": "An Oh Dear notification destination for a team, monitor, tag or tag group.",
      "properties": {
        "channel": {
          "type": "string",
          "description": "Notification channel, e.g. \"mail\", \"slack\", \"discord\", \"webhook\"."
        },
        "destination": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Channel-specific settings, e.g. { url: ... } for a webhook, { channel: ... } for Slack. Values are strings; use \"true\"/\"false\" for booleans such as Opsgenie's euEndpoint. Secret; kept from inputs on refresh.",
          "secret": true
        },
        "destinationId": {
          "type": "integer",
          "description": "Numeric Oh Dear notification destination ID."
        },
        "disabledReason": {
          "type": "string",
          "description": "Why Oh Dear disabled the destination, if it did (e.g. repeated delivery failures)."
        },
        "enabled": {
          "type": "boolean",
          "description": "Whether the destination is active. Default true; toggled via the enable/disable endpoints.",
          "default": true
        },
        "label": {
          "type": "string",
          "description": "Display label for the destination."
        },
        "level": {
          "type": "string",
          "description": "Owner type: \"team\", \"monitor\", \"tag\" or \"tagGroup\".",
          "replaceOnChanges": true
        },
        "notificationTypes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Event types that trigger a notification (uptime, certificate_health, ...). Empty means all."
        },
        "ownerId": {
          "type": "integer",
          "description": "ID of the owning team, monitor, tag or tag group.",
          "replaceOnChanges": true
        }
      },
      "required": [
        "level",
        "ownerId",
        "channel",
        "destination",
        "enabled",
        "destinationId",
        "disabledReason"
      ],
      "inputProperties": {
        "channel": {
          "type": "string",
          "description": "Notification channel, e.g. \"mail\", \"slack\", \"discord\", \"webhook\"."
        },
        "destination": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Channel-specific settings, e.g. { url: ... } for a webhook, { channel: ... } for Slack. Values are strings; use \"true\"/\"false\" for booleans such as Opsgenie's euEndpoint. Secret; kept from inputs on refresh.",
          "secret": true
        },
        "enabled": {
          "type": "boolean",
          "description": "Whether the destination is active. Default true; toggled via the enable/disable endpoints.",
          "default": true
        },
        "label": {
          "type": "string",
          "description": "Display label for the destination."
        },
        "level": {
          "type": "string",
          "description": "Owner type: \"team\", \"monitor\", \"tag\" or \"tagGroup\".",
          "replaceOnChanges": true
        },
        "notificationTypes": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Event types that trigger a notification (uptime, certificate_health, ...). Empty means all."
        },
        "ownerId": {
          "type": "integer",
          "description": "ID of the owning team, monitor, tag or tag group.",
          "replaceOnChanges": true
        }
      },
      "requiredInputs": [
        "level",
        "ownerId",
        "channel",
        "destination"
      ]
    },
    "ohdear:index:RecurringMaintenancePeriod": {
      "description": "An Oh Dear recurring maintenance schedule that generates maintenance periods on a cadence.",
      "properties": {
        "createdAt": {
          "type": "string",
          "description": "When the schedule was created, as an ISO 8601 timestamp."
        },
        "dayOfMonth": {
          "type": "integer",
          "description": "Day for a monthly schedule, 1 to 31."
        },
        "daysOfWeek": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "Days for a weekly schedule, 0 (Sunday) to 6 (Saturday)."
        },
        "endTime": {
          "type": "string",
          "description": "End of the window, `HH:MM`."
        },
        "humanReadableSchedule": {
          "type": "string",
          "description": "Plain-English rendering of the recurrence."
        },
        "lastGeneratedUntil": {
          "type": "string",
          "description": "Date through which concrete maintenance periods have been generated (ISO 8601)."
        },
        "monitorId": {
          "type": "integer",
          "description": "Monitor this schedule applies to. Accepted only on create; immutable afterwards.",
          "replaceOnChanges": true
        },
        "name": {
          "type": "string",
          "description": "Display name for the recurring schedule."
        },
        "recurrenceType": {
          "type": "string",
          "description": "One of \"daily\", \"weekly\" or \"monthly\"."
        },
        "recurringMaintenancePeriodId": {
          "type": "integer",
          "description": "Numeric Oh Dear recurring maintenance period ID."
        },
        "startTime": {
          "type": "string",
          "description": "Start of the window, `HH:MM`."
        },
        "updatedAt": {
          "type": "string",
          "description": "When the schedule was last updated, as an ISO 8601 timestamp."
        }
      },
      "required": [
        "monitorId",
        "name",
        "recurrenceType",
        "startTime",
        "endTime",
        "recurringMaintenancePeriodId",
        "humanReadableSchedule",
        "lastGeneratedUntil",
        "createdAt",
        "updatedAt"
      ],
      "inputProperties": {
        "dayOfMonth": {
          "type": "integer",
          "description": "Day for a monthly schedule, 1 to 31."
        },
        "daysOfWeek": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "Days for a weekly schedule, 0 (Sunday) to 6 (Saturday)."
        },
        "endTime": {
          "type": "string",
          "description": "End of the window, `HH:MM`."
        },
        "monitorId": {
          "type": "integer",
          "description": "Monitor this schedule applies to. Accepted only on create; immutable afterwards.",
          "replaceOnChanges": true
        },
        "name": {
          "type": "string",
          "description": "Display name for the recurring schedule."
        },
        "recurrenceType": {
          "type": "string",
          "description": "One of \"daily\", \"weekly\" or \"monthly\"."
        },
        "startTime": {
          "type": "string",
          "description": "Start of the window, `HH:MM`."
        }
      },
      "requiredInputs": [
        "monitorId",
        "name",
        "recurrenceType",
        "startTime",
        "endTime"
      ]
    },
    "ohdear:index:StatusPage": {
      "description": "An Oh Dear status page. `monitors` is the full set of monitors shown on the page.",
      "properties": {
        "badgeId": {
          "type": "string",
          "description": "ID used to build the status badge image URL."
        },
        "createdAt": {
          "type": "string",
          "description": "When the page was created, as an ISO 8601 timestamp."
        },
        "domain": {
          "type": "string",
          "description": "Custom domain serving the page, if configured."
        },
        "fullUrl": {
          "type": "string",
          "description": "Fully-qualified URL of the status page."
        },
        "monitors": {
          "type": "array",
          "items": {
            "$ref": "#/types/ohdear:index:StatusPageMonitor"
          },
          "description": "Full set of monitors shown on the page; syncing this list replaces the previous set."
        },
        "slug": {
          "type": "string",
          "description": "URL slug on the Oh Dear-hosted domain."
        },
        "statusPageId": {
          "type": "integer",
          "description": "Numeric Oh Dear status page ID."
        },
        "summarizedStatus": {
          "type": "string",
          "description": "Current overall status shown on the page."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the page. Immutable — no API endpoint edits the page itself, so a change replaces it.",
          "replaceOnChanges": true
        },
        "timezone": {
          "type": "string",
          "description": "Timezone the page renders times in."
        },
        "title": {
          "type": "string",
          "description": "Status page title. Immutable, same reason as teamId.",
          "replaceOnChanges": true
        },
        "updatedAt": {
          "type": "string",
          "description": "When the page was last updated, as an ISO 8601 timestamp."
        }
      },
      "required": [
        "teamId",
        "title",
        "monitors",
        "statusPageId",
        "slug",
        "domain",
        "fullUrl",
        "timezone",
        "summarizedStatus",
        "badgeId",
        "createdAt",
        "updatedAt"
      ],
      "inputProperties": {
        "monitors": {
          "type": "array",
          "items": {
            "$ref": "#/types/ohdear:index:StatusPageMonitor"
          },
          "description": "Full set of monitors shown on the page; syncing this list replaces the previous set."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the page. Immutable — no API endpoint edits the page itself, so a change replaces it.",
          "replaceOnChanges": true
        },
        "title": {
          "type": "string",
          "description": "Status page title. Immutable, same reason as teamId.",
          "replaceOnChanges": true
        }
      },
      "requiredInputs": [
        "teamId",
        "title",
        "monitors"
      ]
    },
    "ohdear:index:Tag": {
      "description": "An Oh Dear tag. The API cannot update or delete tags: changing an input replaces the resource, and destroy only removes it from Pulumi state.",
      "properties": {
        "createdAt": {
          "type": "string",
          "description": "When the tag was created, as an ISO 8601 timestamp."
        },
        "monitors": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "IDs of monitors to attach the tag to."
        },
        "name": {
          "type": "string",
          "description": "Tag name."
        },
        "sites": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "IDs of the sites/monitors currently carrying the tag."
        },
        "slug": {
          "type": "string",
          "description": "URL-safe form of the tag name."
        },
        "tagId": {
          "type": "integer",
          "description": "Numeric Oh Dear tag ID."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the tag."
        },
        "teamName": {
          "type": "string",
          "description": "Name of the owning team."
        },
        "updatedAt": {
          "type": "string",
          "description": "When the tag was last updated, as an ISO 8601 timestamp."
        }
      },
      "required": [
        "teamId",
        "name",
        "tagId",
        "slug",
        "teamName",
        "sites",
        "createdAt",
        "updatedAt"
      ],
      "inputProperties": {
        "monitors": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "description": "IDs of monitors to attach the tag to."
        },
        "name": {
          "type": "string",
          "description": "Tag name."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the tag."
        }
      },
      "requiredInputs": [
        "teamId",
        "name"
      ]
    },
    "ohdear:index:TagGroup": {
      "description": "An Oh Dear tag group. `tags` holds tag names and supports wildcards such as `prod-*`.",
      "properties": {
        "createdAt": {
          "type": "string",
          "description": "When the tag group was created, as an ISO 8601 timestamp."
        },
        "groupId": {
          "type": "integer",
          "description": "Numeric Oh Dear tag group ID."
        },
        "label": {
          "type": "string",
          "description": "Display label for the group."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tag names in the group; wildcards such as prod-* are allowed."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the tag group."
        },
        "teamName": {
          "type": "string",
          "description": "Name of the owning team."
        }
      },
      "required": [
        "teamId",
        "label",
        "groupId",
        "teamName",
        "createdAt"
      ],
      "inputProperties": {
        "label": {
          "type": "string",
          "description": "Display label for the group."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Tag names in the group; wildcards such as prod-* are allowed."
        },
        "teamId": {
          "type": "integer",
          "description": "Team that owns the tag group."
        }
      },
      "requiredInputs": [
        "teamId",
        "label"
      ]
    }
  }
}
