GET /monitors
List monitors · monitors:read
The PageFluxer API lets your tools manage monitors, read changes, and request checks. The same cloud monitoring engine, rules, and account allowances power the website and API.
On Pro, open Dashboard → API access. Create a named token, choose its permissions and expiry, and copy it once. Send it in the Authorization: Bearer header. Tokens are stored as hashes and cannot be retrieved again.
export PAGEFLUXER_API_BASE="https://pagefluxer.com/api/v1" # Set PAGEFLUXER_API_TOKEN using your server's secret manager. curl --fail-with-body "$PAGEFLUXER_API_BASE/monitors?limit=20" \ -H "Authorization: Bearer $PAGEFLUXER_API_TOKEN"
API base URL: https://pagefluxer.com/api/v1. Use a token from your PageFluxer account. Website cookies do not authenticate this API.
| Scope | Access |
|---|---|
monitors:read | List and retrieve monitors |
monitors:write | Create, update and delete monitors; load and evaluate cloud previews |
changes:read | List changes and read retained captured text |
usage:read | Read account allowances and usage |
checks:write | Request manual checks and read their receipts |
Tokens expire after 1–365 days; the dashboard offers 30, 90 and 365 days. Revocation blocks subsequent requests. Pro access is checked on every request, so a downgrade disables existing tokens without changing their secrets. Accepted work may finish after revocation. Re-upgrading restores access for tokens that have not expired or been revoked.
Use tokens from your own server. Keep them out of public JavaScript, URLs, repositories and browser extensions. V1 grants no cross-origin browser access. Never send third-party website passwords, cookies, or login sessions.
Request and response bodies are JSON. Success responses contain data; lists also contain meta. The downloadable OpenAPI document includes request fields, target schemas, response schemas and error responses.
/monitorsList monitors · monitors:read
/monitorsCreate a monitor from a confirmed cloud preview · monitors:write
Preview must belong to this account and remain valid. Same URL has one monitor per account; use up to three targets. Pro minimum: 5 min HTML / 15 min browser. First capture seeds a baseline without sending an alert.
/monitors/{monitor_id}Retrieve a monitor · monitors:read
/monitors/{monitor_id}Update, pause or resume a monitor · monitors:write
/monitors/{monitor_id}Delete a monitor and its retained history · monitors:write
/changesList retained changes · changes:read
Includes value changes that did not match an alert rule. [] rule_matches means no matched rules; null is legacy any-change behavior. Retention and storage pruning apply.
/changes/{change_id}Retrieve change details and captured before/after text · changes:read
Text may be null when its snapshot is unavailable. Treat it as untrusted text. Retention applies even before physical cleanup runs.
/usageView account allowances and current usage · usage:read
/monitors/{monitor_id}/checksRequest an asynchronous manual check · checks:write
Queues the active monitor for the existing worker, normally the next cron cycle, subject to capacity and quotas. Up to 20 accepted requests per UTC day; one outstanding request per monitor. Duplicate pending requests share a receipt. Uses normal monthly checks when claimed. Fastest plan interval and website backoff apply. Poll Location every 60 seconds; queued requests expire after 30 minutes. Does not guarantee a capture or bypass blocked pages.
/checks/{check_id}Retrieve a manual-check receipt · checks:write
Receipts retained for seven days. running means reserved/dispatched and may include browser queue wait. Terminal: succeeded, failed, cancelled, expired. Read changes separately; a successful check can find no change.
/previewsLoad a cloud text preview for monitor setup · monitors:write
Synchronous, allow up to 60 seconds. Same SSRF-protected loaders and separate preview allowance as the website. No screenshot, cookies or page HTML returned. Pro: 150/month, 40/day, at least 35 seconds between previews, plus service capacity. No Idempotency-Key support here: a retry may consume another preview. Preview expires after 15 minutes; at most three recent previews kept.
/previews/{preview_id}/evaluateValidate targets against a saved cloud preview · monitors:write
No new page load or preview credit. Validation can reject missing, ambiguous, blocked or unknown content. Creation repeats validation. Display/value strings capped at 1,500 characters; links at 10.
POST /previews with a public URL and load_mode of html or browser.POST /previews/{preview_id}/evaluate to inspect the extracted values without loading the page again.POST /monitors with the preview ID, targets, schedule and an Idempotency-Key. The cloud capture seeds the baseline; it does not send an initial change alert.Previews expire after 15 minutes; only the three most recent captures per account are retained. Use a fresh preview and expected_version from the monitor’s config_version when editing targets, loading method or schedule. Metadata, status, and email/webhook flags can be patched directly. URLs cannot be changed; create a new monitor for a different URL.
Alert rules match the builder: text changes or phrase transitions; price changes, drops or crossing below a threshold; becoming available/unavailable; and new matching links. Prices use an explicit currency and decimal format. Threshold strings always use a dot, such as 30.00. Price observation values are integer minor units: USD 29.00 is 2900. Missing or unknown values are check issues, never invented prices or stock states. Monitor setup guide →
| Allowance | Pro |
|---|---|
| API requests | 60/minute; 5,000/UTC day |
| Read-response data | 100 MiB per UTC day; full retained text is included in change details |
| Active API tokens | 5 |
| Manual check requests | 20/UTC day, plus normal check allowance |
| Cloud previews | 150/month, 40/day; at least 35 seconds apart |
| List page size | 20 by default; 1–100 |
| JSON request body | 16 KiB |
| Successful idempotent requests | 1,000 retained per account for 24 hours |
Request limits are shared across tokens. Authenticated, authorized calls count, including reads, polling, replays and rejected input. Successful GET response bodies also share a 100 MiB/day transfer allowance (before HTTP compression) to bound history-export costs. Inspect X-Read-Bytes-Day-Remaining. A rejected read is not charged bytes, but still uses a request. Monthly monitoring, notification and preview allowances remain separate. API access adds no check credits and causes no automatic overage charges. Use GET /usage to inspect both.
Inspect X-RateLimit-Remaining, X-RateLimit-Reset (Unix seconds), and the daily limit headers. On 429, wait at least Retry-After seconds. The minute window begins with the account’s first request after its previous window expires. Daily counters reset at 00:00 UTC; monthly counters reset on the first of the month at 00:00 UTC.
Lists are newest first. Follow meta.next_cursor unchanged with the same filters until it is null. Results are not a frozen snapshot: newly arriving changes appear at the start of a fresh traversal, and deleted/expired items may disappear. Deduplicate change IDs. Higher throughput, bulk API operations and team administration are planned for Business and are not part of v1.
POST /monitors/{monitor_id}/checks takes {} and an Idempotency-Key. A 202 response means accepted into the existing worker schedule, not that the page has been fetched. Poll the Location URL no more than once per minute.
{
"error": {
"code": "insufficient_scope",
"message": "Token requires monitors:write.",
"request_id": "3f390fd5-6c91-4d4f-8b42-a9dbba26a7d0"
}
}Use a unique Idempotency-Key for each logical monitor creation or manual-check request. Reuse the same key and JSON body when retrying a timeout. Successful responses are retained for 24 hours; reusing a key with different content returns 409. Keys are scoped to the account and operation. JSON object property order does not matter.
Only committed successes are retained. A transaction rollback does not consume the key. Replaying a creation after deleting its monitor returns the original ID; it does not recreate the monitor. A manual-check replay returns the original acceptance response: fetch its receipt for current status. After 24 hours, a key can be treated as a new request.
Preview loading is not idempotent: retrying it can use another preview. Evaluation reuses the saved capture. For transient failures, back off with jitter and respect Retry-After; do not automatically repeat non-idempotent preview loads.
401 means invalid credentials, 403 means plan/scope restrictions, 404 means unavailable or unowned data, 409 means a conflict or exhausted account allowance, 422 means invalid settings, and 503 means temporary service unavailability. Unsupported fields and query parameters are rejected. Include error.request_id when contacting support; never send your API token.