GuidesCreating Monitors

Creating Monitors

Monitors are the core resource in DiffHook. Each monitor watches one URL and fires events when content changes.

Required fields

FieldTypeDescription
labelstringShort name for the monitor
urlstringThe 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.