REST API
Everything the app does, from your own code. Business plan. Keys come from Settings → API keys; send them as a bearer token. 60 requests a minute per key.
Authentication
curl https://webmonitor.io/api/v1/monitors \ -H "Authorization: Bearer wm_live_…"
Errors come back as { "error": "…" } with 401 (bad key), 403 (missing scope), 402 (plan limit) or 429 (rate limit).
Create a monitor from a sentence
Give a URL and what matters; the same AI setup as the app picks the type, element and rule. Or pass type and rules yourself.
curl -X POST https://webmonitor.io/api/v1/monitors \
-H "Authorization: Bearer wm_live_…" -H "Content-Type: application/json" \
-d '{ "url": "https://www.amazon.com/dp/B0DT7L98J1",
"prompt": "tell me when it is in stock under $1,900",
"channels": ["telegram", "email"], "intervalSec": 60 }'
# explicit
-d '{ "url": "https://example.com/pricing", "type": "keyword", "name": "Pricing",
"rules": [{ "kind": "keyword", "mode": "appears", "terms": ["free trial"] }],
"intervalSec": 600, "channels": ["webhook"] }'Monitor types: content, keyword, availability, price, visual, uptime, api, feed, file, multistep. Optional: selector, jsRender, steps[] (click/type/select/press/wait/scroll/goto), useSession.
Read
GET https://webmonitor.io/api/v1/monitors # list GET https://webmonitor.io/api/v1/monitors/:id # one monitor + last 50 changes GET https://webmonitor.io/api/v1/changes?since=2026-10-01T00:00:00Z&alerted=1&limit=100 GET https://webmonitor.io/api/v1/changes?monitor=:id&before=<createdAt of last row> # paging
Act
POST https://webmonitor.io/api/v1/monitors/:id { "action": "check" | "pause" | "resume" }
DELETE https://webmonitor.io/api/v1/monitors/:idWebhooks
Add a webhook channel in Settings → Notifications and point monitors at it. Every alert is a POST with this JSON and, when you set a secret, an X-Webmonitor-Signature header: hex HMAC-SHA256 of the raw body.
{
"event": "change",
"monitor": { "id": "…", "name": "RTX 5090", "url": "https://…" },
"change": { "id": "…", "title": "Back in stock", "summary": "Add to Cart is clickable. $1,999 → $1,849.", "createdAt": "…" },
"url": "https://webmonitor.io/monitors/…"
}Browser sessions (companion extension)
POST https://webmonitor.io/api/v1/sessions scope: sessions
{ "url": "https://portal.example.com/account", "cookies": [ { "name": "sid", "value": "…", "domain": ".example.com" } ] }Telegram bot
Not an API, but often quicker: message @webmonitor_bot with /watch https://… what matters after connecting it in Settings.