{
  "title": "Domain Registration Lifecycle - Expiry & RDAP Changes",
  "type": "object",
  "schemaVersion": 1,
  "description": "Paste up to20 .com or .net domains. The default example.com gives a real, official registry response with no key or proxy setup. This is a small watchlist monitor, not a bulk domain-availability search.",
  "properties": {
    "domains": {
      "title": "Domains to monitor",
      "type": "array",
      "editor": "stringList",
      "description": "Registered second-level .com or .net names, or website URLs on those domains. Up to20 unique names. www is removed; other subdomains and TLDs are rejected. Empty input uses example.com.",
      "prefill": [
        "example.com"
      ],
      "default": [
        "example.com"
      ]
    },
    "maxResults": {
      "title": "Maximum saved rows",
      "type": "integer",
      "description": "One paid row per validated registration observation. Keep this at least as large as the domain list for full coverage and baseline updates. Error responses and skipped unchanged domains are not paid rows.",
      "default": 20,
      "minimum": 1,
      "maximum": 20
    },
    "comparePrevious": {
      "title": "Compare registration changes",
      "type": "boolean",
      "description": "Save a complete watchlist baseline, then identify new, changed and unchanged domain records. Expiry, status, registrar, nameservers, DNSSEC delegation and expiry-window transitions are compared.",
      "default": false
    },
    "onlyChanges": {
      "title": "Save changed domains only",
      "type": "boolean",
      "description": "Enables comparison and skips unchanged records without a dataset-item charge. The first run emits all observed domains. Source failures, missing inputs and truncated runs never prove a registration change.",
      "default": false
    },
    "snapshotName": {
      "title": "Baseline label",
      "type": "string",
      "editor": "textfield",
      "description": "Use the same label and domain watchlist for repeat checks. Labels use1-80 letters, numbers, underscores or hyphens. Run only one writer for a given baseline at a time.",
      "default": "default",
      "pattern": "^[-\\w]{1,80}$"
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Bounded to30–120 seconds. Registry requests are spaced at least one second apart per origin, without retries, proxies or fallback endpoints. Partial runs retain the previous baseline.",
      "default": 90,
      "minimum": 30,
      "maximum": 120
    }
  },
  "required": []
}
