Creating Monitors
Monitors are the core resource in DiffHook. Each monitor watches one URL and fires events when content changes.
Required fields
| Field | Type | Description |
|---|---|---|
label | string | Short name for the monitor |
url | string | The URL to monitor |
interval_minutes — How often to check (optional; defaults apply). Valid values include 5, 15, 30, 60, 360, 1440 (minutes).
notification_config — Optional JSON object with per-monitor overrides, e.g. { "webhook_url": "https://…", "email": "alerts@…" }. If omitted, the workspace default webhook from Integrations is used for HTTP delivery.
Optional fields
label — A human-readable name shown in the dashboard. Defaults to the URL.
css_selector — Scope the diff to a specific DOM element. Reduces noise from nav bars, cookie banners, and other boilerplate.
{
"css_selector": "#pricing-table"
}
js_rendering — Use a headless Chromium browser to render the page before taking a snapshot. Required for React/Vue/Angular apps that render content client-side. Slower and more resource-intensive — only enable when the page genuinely requires JavaScript to display its content.
JSON selector for JSON API
JSON API monitors can scope diffing to a specific field or list by setting json_selector.
Supported selector forms:
$→ root object$.field→ one field on root$.a.b.c→ nested field$.items[*]→ array field ([*]is optional and treated as the array itself)
Use identity_key when your selector resolves to an array of objects. This sorts items by a stable key before diffing, which avoids noisy reorder-only diffs.
{
"json_selector": "$.items",
"identity_key": "id",
"track_additions_only": true
}
Example: monitoring a pricing page
Interactive request sample (from the OpenAPI spec — switch language, copy, or Try it):
Updating a monitor
You can update any mutable field with a PUT request. Only provided fields change:
Pausing a monitor
Pausing a monitor stops polling. Paused monitors do not count toward any plan limit — neither the monitor count, nor the monthly check budget. This makes pausing the right tool whenever you want to temporarily stop a monitor without losing its configuration or freeing up a permanent slot.
Useful scenarios: maintenance windows, seasonal workflows, or when you're close to your check budget and want to free up capacity without deleting a monitor.
Resuming a monitor
Resuming re-activates a paused monitor. DiffHook validates plan limits at resume time — if resuming would push you over your active monitor count, monthly check budget, or JS rendering check budget, the request is rejected with a 403. Upgrade your plan or pause another monitor first.