Raw schema
{
"type": "object",
"properties": {
"checkId": {
"type": "string",
"description": "The monitor's id"
},
"checkout": {
"type": "object",
"description": "Checkout monitors",
"properties": {
"depth": {
"type": "string",
"enum": [
"ready",
"order"
],
"description": "\"ready\" stops at the payment step; \"order\" places a REAL test order (the WordPress plugin marks it, keeps it out of stock, analytics and ad platforms, and removes it)"
},
"productUrl": {
"type": "string",
"description": "The product to buy (full URL on the site; blank = Relvato picks one)"
},
"verifyEmail": {
"type": "boolean",
"description": "Order mode: confirm the order email arrives"
},
"paymentMethod": {
"type": "string",
"enum": [
"cod",
"free"
]
},
"coupon": {
"type": [
"object",
"null"
],
"properties": {
"code": {
"type": "string"
},
"expect": {
"type": "string",
"enum": [
"applies",
"rejected"
]
}
},
"required": [
"code"
],
"additionalProperties": false
},
"shipping": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string"
},
"require": {
"type": "boolean"
}
},
"additionalProperties": false
},
"fieldAnswers": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"properties": {
"match": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"match",
"value"
],
"additionalProperties": false
},
"description": "Answers for checkout fields Relvato can't fill by itself: match = the field's label or name, value = what to enter"
},
"expect": {
"type": [
"object",
"null"
],
"properties": {
"shipping": {
"description": "\"free\", \"charged\" or an amount"
},
"tax": {
"description": "\"applied\", \"none\" or an amount"
},
"discount": {
"description": "\"applied\", \"none\" or an amount"
},
"total": {
"type": "object",
"properties": {
"equals": {
"type": "number"
},
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"description": "What the order totals must be"
}
},
"additionalProperties": false
},
"devices": {
"type": "array",
"items": {
"type": "string",
"enum": [
"desktop",
"mobile"
]
},
"description": "Flow and page monitors"
},
"errorScan": {
"type": "object",
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"ignore": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"urls",
"ignore"
],
"additionalProperties": false,
"description": "Extra pages to scan (full URLs on the site) and error texts to ignore"
},
"brokenLinks": {
"type": "object",
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
}
},
"ignore": {
"type": "array",
"items": {
"type": "string"
}
},
"checkExternal": {
"type": "boolean"
}
},
"required": [
"urls",
"ignore",
"checkExternal"
],
"additionalProperties": false,
"description": "Extra pages to crawl, address fragments to skip, and whether external links are checked too"
},
"uptime": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Page to check (full URL on the site; blank = the homepage)"
},
"expectText": {
"type": "string",
"description": "Down if the page doesn't contain this text"
},
"absentText": {
"type": "string",
"description": "Down if the page contains this text"
},
"okStatuses": {
"type": "string",
"description": "Accepted status codes, e.g. \"200-299, 301\" (blank = any non-error answer)"
},
"timeoutSec": {
"type": "number",
"description": "Down if there's no answer within this many seconds (5-30, default 15)"
},
"alertAfterMin": {
"type": "number",
"description": "Minutes down before alerting (0-60, default 0 = as soon as both regions confirm)"
},
"maxResponseMs": {
"type": "number",
"description": "The monitor's run warns above this response time (500-30000, default 8000); not counted as down"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"POST"
],
"description": "API endpoints: the request method (default GET)"
},
"body": {
"type": "string",
"description": "POST only: the request body (sent as JSON when it parses as JSON; up to 2,000 characters). No custom headers or secrets"
},
"json": {
"type": "array",
"description": "Rules on a JSON answer (up to 10; down when any fails): the value at `path` (\"status\", \"checks.db.ok\", \"items[0].id\") tested with `op` against `value`",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Dot path into the JSON answer"
},
"op": {
"type": "string",
"enum": [
"equals",
"not-equals",
"contains",
"exists",
"missing",
"lt",
"gt"
]
},
"value": {
"type": "string",
"description": "What to compare with (a number for lt / gt; not needed for exists / missing)"
}
},
"required": [
"path",
"op"
],
"additionalProperties": false
}
},
"maintenance": {
"type": "array",
"description": "Maintenance windows (up to 10): no uptime alerts and no Uptime run inside them, and an outage that starts inside one counts as downtime only after it ends. Left out = keep the saved windows; [] clears them. A new one-off window can't start in the past",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"once",
"weekly"
]
},
"from": {
"type": "string",
"description": "once: start, ISO 8601 with a time zone"
},
"to": {
"type": "string",
"description": "once: end, ISO 8601 (at most 7 days after the start)"
},
"days": {
"type": "array",
"items": {
"type": "number"
},
"description": "weekly: weekdays, 0 = Sunday … 6 = Saturday"
},
"start": {
"type": "string",
"description": "weekly: local start time, HH:MM"
},
"minutes": {
"type": "number",
"description": "weekly: length in minutes (5-720)"
},
"tz": {
"type": "string",
"description": "weekly: IANA time zone, e.g. Europe/Bucharest"
},
"note": {
"type": "string",
"description": "Optional label, e.g. \"Host migration\""
}
},
"required": [
"kind"
],
"additionalProperties": false
}
}
},
"additionalProperties": false,
"description": "Uptime: what the probes check and when they alert. The whole section is replaced: fields left out go back to their defaults (except maintenance, kept unless sent)"
},
"accessibilityPages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Accessibility: extra pages to test on top of the key pages (full URLs on the site, up to 20). A new page's issues are reviewed on its first scan, not failed"
},
"aiOutput": {
"type": "object",
"description": "The site's own AI feature: its endpoint (full URL on the site), a fixed prompt, and what the answer must (not) contain",
"properties": {
"endpoint": {
"type": "string"
},
"method": {
"type": "string",
"enum": [
"POST",
"GET"
]
},
"prompt": {
"type": "string"
},
"bodyTemplate": {
"type": "string"
},
"responsePath": {
"type": "string"
},
"mustInclude": {
"type": "array",
"items": {
"type": "string"
}
},
"mustExclude": {
"type": "array",
"items": {
"type": "string"
}
},
"minLength": {
"type": "number"
},
"maxLatencyMs": {
"type": "number"
},
"golden": {
"type": "string"
}
},
"required": [
"endpoint",
"prompt",
"mustInclude",
"mustExclude"
],
"additionalProperties": false
},
"browseUrl": {
"type": "string",
"description": "Storefront: the shop page (blank = the calibrated one)"
},
"shopUrl": {
"type": "string",
"description": "Prices: the shop page"
},
"productUrl": {
"type": "string",
"description": "Prices: a sample product"
},
"dkimSelectors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Email authentication: your mail provider's DKIM selectors (up to 10)"
},
"structurePages": {
"type": "array",
"items": {
"type": "string",
"enum": [
"home",
"shop",
"product",
"category",
"checkout"
]
},
"description": "Structure drift: pages to fingerprint"
},
"webVitalsDevices": {
"type": "array",
"items": {
"type": "string",
"enum": [
"desktop",
"mobile"
]
},
"description": "Core Web Vitals: devices to measure"
}
},
"required": [
"checkId"
],
"additionalProperties": false
}