Get single watch
Retrieve web page change monitor (watch) information and set muted/paused status. Returns the FULL Watch JSON.
Authorizations
API key for authentication. You can find your API key in the Site Spy dashboard under Settings → API.
Path Parameters
Web page change monitor (watch) unique ID
Query Parameters
Recheck this web page change monitor (watch)
1, true Set pause state
paused, unpaused Set mute state
muted, unmuted Response
Watch information or operation result
Unique identifier
Unix timestamp of creation
API key that owns this watch (multi-tenant isolation)
URL to monitor for changes
5000Custom title for the web page change monitor (watch), not to be confused with page_title
5000Tag UUID to associate with this web page change monitor (watch)
5000Array of tag UUIDs
Whether the web page change monitor (watch) is paused
Non-null when paused=true was set automatically. Values:
plan_limit— owner exceeded their plan's watch cap; auto-deleted 30d afterpaused_atunless user upgrades or un-pauses. Null means the watch was paused manually by the user (no auto-delete).
plan_limit, null Unix timestamp when auto-pause was applied. Starts the auto-delete clock for
paused_by != null watches. 0 when never auto-paused.
Whether notifications are muted
HTTP method to use
GET, POST, DELETE, PUT Backend to use for fetching content. Common values:
system(default) - Use the system-wide default fetcherhtml_requests- Fast requests-based fetcherhtml_webdriver- Browser-based fetcher (Playwright/Puppeteer)extra_browser_*- Custom browser configurations (if configured)- Plugin-provided fetchers (if installed)
^(system|html_requests|html_webdriver|extra_browser_.+)$HTTP headers to include in requests
HTTP request body
5000Proxy configuration
5000Ignore HTTP status code errors (boolean or null)
Delay in seconds for webdriver
JavaScript code to execute
5000Time intervals between checks. All fields must be non-negative. At least one non-zero value required when not using default settings.
Whether to use global settings for time between checks - defaults to true if not set
Notification URLs for this web page change monitor (watch). Maximum 100 URLs.
1001000Custom notification title
5000Custom notification body
5000Format for notifications
text, html, htmlcolor, markdown, System default Whether to track JSON-LD price data
Browser automation steps. Maximum 100 steps allowed.
100Optional processor mode to use for change detection. image_ssim_diff (screenshot monitoring) requires Pro plan. Defaults to text_json_diff if not specified.
restock_diff, text_json_diff, image_ssim_diff When true, capture and store screenshots alongside text snapshots on each check. Requires Pro plan and fetch_backend set to a browser-based fetcher (e.g. html_webdriver).
CSS/XPath selectors to extract specific content from the page
1005000CSS/XPath selectors to remove content from the page
1005000Text patterns to ignore in change detection
1005000Text/regex patterns that must be present to trigger a change
1005000Text that should NOT be present (triggers alert if found)
1005000Regex patterns to extract specific text after filtering
1005000Strip leading/trailing whitespace from text
Sort lines alphabetically before comparison
Remove duplicate lines from content
Compare against all history for unique lines
Remove lines matching ignore patterns
Include added text in change detection
Include removed text in change detection
Include replaced text in change detection
Only trigger on in-stock transitions (restock_diff processor)
Monitor and track price changes (restock_diff processor)
Minimum price change percentage to trigger notification
Whether page has LD-JSON price data (auto-detected)
Include screenshot in notifications (if supported by notification URL)
Send notification when filters fail to match content
Display page title in watch list (null = use system default)
Maximum number of history snapshots to keep (null = use system default)
1 <= x <= 1000Weekly schedule limiting when checks can run
Array of condition rules for change detection logic (empty array when not set)
100Logic operator - ALL (match all conditions) or ANY (match any condition)
ALL, ANY Plain-English condition for AI smart alerts (Pro+ only). When set, AI evaluates each change against this condition and suppresses notifications that don't match. Example - "Only notify me if the price drops below $50".
500AI-generated plain-English summary of the most recent change (Pro+ only, read-only — generated automatically when a change is detected).
User's monitoring intent, e.g. "price changes", "new job listings". Set by smart-configure or AI chat when the user describes what they want to track.
500Unix timestamp of last check
Unix timestamp of last change
Last error message (false when no error, string when error occurred, null if not checked yet)
Unix timestamp in seconds of the last time the watch was viewed. Setting it to a value higher than last_changed in the "Update watch" endpoint marks the watch as viewed.
x >= 0The watch URL rendered in case of any Jinja2 markup, always use this for listing.
HTML tag extracted from the page
Total number of checks performed
Duration of last fetch in seconds
MD5 hash of previous content (false if not set)
MD5 hash before filters applied (false if not set)
Counter for consecutive filter match failures
Whether filters were set manually or by smart-configure ('manual' or 'smart')
manual, smart How many times smart-configure has re-run due to self-healing
Last notification error message
Number of notifications sent
Why the most recent delivery attempt succeeded or failed. Populated on every
change-detected event so the dashboard can explain a silent watch to the user.
Possible values include delivered_via_user_email, delivered_via_telegram,
delivered_via_webpush, email_unverified, email_notifications_muted,
smtp_not_configured, no_owner_api_key, no_urls_configured.
Unix timestamp of the most recent delivery attempt (success or silent drop)
Incremented every time a change was detected but no notification was queued.
A non-zero value combined with notification_alert_count=0 means the detection
engine is working but delivery is blocked — check last_notification_delivery_reason.
Content-Type from last fetch
Server header from last response
Last browser step that caused an error
Computed property - true if watch has been viewed, false otherwise (deprecated, use last_viewed instead)
Number of history snapshots available
User-facing health summary. Computed from existing watch fields; no new storage. Lets the dashboard tell the user which kind of broken a watch is and offer a one-click fix.

