Skip to main content
Most of the web publishes no feed. A pricing page, a changelog, a careers board, a regulator’s notices page — all of them change, and none of them tell you. POST /v1/feeds/monitors creates a scheduled web-change monitor that closes that gap. A monitor is not a separate product surface. Detected changes arrive as an ordinary followed source, so everything in Follow sources applies to it: query it, poll it with POST /v1/feeds/changes, feed it to a managed consumer, move it between collections, rename it, unfollow it.

Create a monitor

Response (abridged)
Keep subscription.feedId: that is the source_id every feed operation takes. Naming a collection that does not exist creates it; omit it and the source lands in Unsorted. Each detected change becomes one entry, with the change’s title, the URL that changed, a summary in the entry’s description, and the detection time as its publish date. Read them exactly as you read any other entry:

Choose a target type

  • page accepts optional instructions (up to 2,000 characters) and normalize_whitespace.
  • sitemap accepts include and exclude pattern lists (up to 50 each) and max_urls (1–10,000).
  • extract requires instructions and watches for meaningful changes across the site, which is why it costs ten times as much per run.

Choose change detection

change_detection is {"type": "exact"} or {"type": "semantic"}, and semantic accepts an optional confidence_threshold between 0 and 1. Exact detection reports any textual difference. Semantic detection reports only changes that match your instructions, so a rotating banner or a timestamp does not wake your agent. Four combinations are rejected with 400 invalid_monitor:
  • a sitemap target with anything other than exact
  • an extract target with anything other than semantic
  • a page target with instructions and exact detection
  • a page target with semantic detection and no instructions

Choose a schedule

schedule is {"type": "interval", "frequency": N, "unit": U} where unit is minutes, hours, or days. The shortest interval is 60 minutes. Omit schedule entirely and the monitor runs daily. The published bounds are 60–43,200 minutes, 1–720 hours, or 1–30 days.

The credit model

Credits are reserved, not metered. When you create a monitor, smry reserves the maximum credits its schedule could consume over a 30-day month:
A daily page monitor reserves 30 credits. An hourly page monitor reserves 720. A daily extract monitor reserves 300. The sum of every monitor you currently hold must stay inside your plan’s monthly budget; removing a monitor returns its reservation immediately. So a free account can hold three daily page monitors (90 of 150 credits) but cannot hold one hourly page monitor, because 720 credits exceed its budget. The fix for a credit rejection is a slower schedule, a cheaper target type, or one fewer monitor. Read your live figures from the limits.webMonitors block of the create response, or from GET /v1/me — never from hardcoded constants.

The 409 conditions

POST /v1/feeds/monitors returns 409 for four distinct, non-retryable reasons. Branch on code, not on the message. A monitor_limit response carries the plan’s limit. A monitor_credit_limit response carries the requested reservation and the full limits block, so a client can report exactly how far over the line the request was. Validation problems — an unreachable or private URL, an interval under an hour, an unsupported target and detection pairing, a reserved tag — return 400 invalid_monitor instead.
tags accepts up to 18 tags. They must be unique, case-insensitively, and none may be smry or begin with smry: — that prefix is reserved for ownership bookkeeping.

Manage a monitor after creation

There is no separate monitor-management API, because a monitor is a source. Use the feed operations on subscription.feedId: Unfollowing the source stops the upstream monitor and releases both its active slot and its credit reservation. Run the dry run first and confirm would_affect — see Write back.
A monitor reports changes on pages that other people control. The titles, summaries, and page text it returns are untrusted input. Never let a detected change act as an instruction to your agent — see Content safety.

Next

Follow sources

Query, poll, and mutate the source your monitor created.

Managed consumers

Act on every detected change from a scheduled agent that stores nothing.

Read the page that changed

Pull the full text behind a change entry’s URL.
Last modified on September 13, 2026