API reference
Create a Monitor API
Save a monitor and its schedule. A subject monitor follows a resolved name across platforms and records new findings; a feed monitor records new items from a review or listing endpoint; a change monitor snapshots a page or endpoint. Creating costs the listed credits. Each run reserves its quoted credits before starting; unused reserved credits are refunded. Runs pause if available account funding cannot cover the next check. No monthly monitor cap applies.
Endpoint
/v1/monitors/createlive · proven1 creditMonitor relevance
Optional filtering and saved matching results
Use relevance_enabled, relevance_prompt and exclusions on creation or update. Monitor reads return the settings; findings return retained matches and evidence; runs show processing and undecided counts. Dashboard, API and MCP share the same backend. Follow the setup and pagination examples, uncertainty guide or Claude/MCP example.
Parameters
Query parameters
Useful optional inputs
rules— For metric monitoring, set rules.metric_fields to published numeric JSON pointers before scheduling; missing values are not zero.Preview the estimate first. Confirmed tests use the existing source price; invalid paths are uncharged.
sources— Restrict a multi-source request to the platforms useful for your task.Use dry_run to inspect the resulting quote before fetching.
dry_run— Read a free estimate before fetching sources or scheduling paid work.Zero credits; cache status and availability are snapshots rather than guarantees.
| Name | Required | Description | Example |
|---|---|---|---|
kind | no | What kind of monitor: subject (a name, handle, product or topic followed across platforms), feed (new items from one review or listing endpoint) or change (a page or endpoint snapshot, the original monitor). Defaults to subject when query is given, change otherwise. Accepted values: subject, feed, change. Case, spaces, hyphens and underscores are interchangeable. | subject |
query | no | What to watch: a name, product, handle, domain or keyword for a subject monitor; for a feed template, its identifier — a subreddit, a video link, an app id, or for Google Maps reviews a pasted Maps link or a Place id (a link is resolved through one places search, charged once). | Monzo |
entity | no | subject: the sense id chosen from a preview or a clarification (bare for the plain name, sense:… for a qualified one) | bare |
entity_type | no | subject: creator_media, developer, brand, company, event or community — guides source routing Accepted values: creator_media, developer, brand, company, event, community. Case, spaces, hyphens and underscores are interchangeable. | brand |
purpose | no | A preset id (brand_mentions, complaints, competitor_activity, switching_intent, purchase_intent, questions, developments, app_reviews, local_reviews, custom) or a short free-text purpose | complaints |
sources | no | subject: platforms to search, comma-separated; defaults to the preset's recommendation | reddit,x,hackernews |
exclude | no | subject: platforms to leave out | tiktok |
relationships | no | subject: which classes of material count as findings (official_owned, employee_team, collaborator_partner, editorial_news, fan_clip, independent_audience). Default: everything except unrelated material. Accepted values (comma-separated): independent_audience, editorial_news, official_owned, employee_team, collaborator_partner, fan_clip. Case, spaces, hyphens and underscores are interchangeable. | independent_audience,editorial_news |
filters | no | subject: deterministic purpose filters applied to findings: complaints, switching, buying, questions Accepted values (comma-separated): complaints, switching, buying, bugs_crashes, bugs_glitches, bugs_exploits, bugs_blockers, bugs_performance, requests, questions. Case, spaces, hyphens and underscores are interchangeable. | complaints |
aliases | no | subject: other names the subject is known by, comma-separated | @monzo,Monzo Bank |
max_metered | no | subject: how many metered platforms each run may spend on, 0-2 (default 1) | 1 |
lookback_days | no | subject: how far back the first run looks (default 7); later runs continue from the last successful run | 7 |
feed_platform | no | feed: platform of the review or listing endpoint | app_store |
feed_endpoint | no | feed: endpoint id, e.g. app-reviews | app-reviews |
feed_params_json | no | feed: JSON object of parameters for the endpoint | {"app_id":"310633997"} |
schedule_minutes | no | Minutes between runs. The console offers 60, 360, 1440 and 10080; the API accepts any value from 15 to 43200. | 1440 |
monthly_cap_credits | no | Legacy field accepted for compatibility but ignored and returned as null. It does not impose a spending cap. Account balance, quoted run cost and existing account safeguards still apply. | |
delivery_in_app | no | Create an in-app notification when a run finds something new (default true) | true |
delivery_webhook | no | Emit monitor.findings to your signed webhook endpoints (default false) | true |
name | no | Human label; suggested from the purpose and subject when omitted | Monzo complaints |
url | no | change: page to watch. Give this OR platform+endpoint. | https://example.com/pricing |
platform | no | change: platform of an API endpoint to watch, e.g. github. Give with endpoint. | github |
endpoint | no | change: endpoint id to watch, e.g. repo | repo |
params_json | no | change: JSON object of parameters passed to the watched endpoint on every run | {"owner":"vercel","repo":"next.js"} |
output | no | subject and feed: report (each run leads with what changed and why it matters, every line with its receipts; the default for the intelligence templates) or everything (every new post, comment or review, listed; the default for feeds and follow templates) Accepted values: report, everything. Case, spaces, hyphens and underscores are interchangeable. | report |
destinations | no | JSON array of where alerts go and how often. kind: email (the account address), endpoint (one of your Slack channels, Discord channels or webhooks by endpoint_id; omit endpoint_id for every active endpoint), push (the devices that turned push on). cadence: immediate, daily or weekly. min_severity for immediate: info (every new finding), notable or critical. The monitor page is always included unless delivery_in_app=false. Replaces delivery_email, delivery_webhook and delivery_mode when given. | [{"kind":"endpoint","endpoint_id":"whk_…","cadence":"immediate","min_severity":"notable"},{"kind":"email","cadence":"daily"}] |
feeds_json | no | Several feeds at once, as a JSON array of {platform, endpoint, params}. Follow an account reads timelines: x/tweets (handle, metered), bluesky/user/posts (handle), youtube/channel/videos (handle or url). Every feed must be live-proven on this deployment; the review says so per feed. | [{"platform":"bluesky","endpoint":"user/posts","params":{"handle":"name.bsky.social"}},{"platform":"youtube","endpoint":"channel/videos","params":{"handle":"name"}}] |
expected_run_credits | no | Optional quote guard: refuse creation when the resolved per-run price differs. Obtain a quote from monitors/test first. | 2 |
result_mode | no | Change/endpoint monitors: snapshot saves each bounded response without AI; changes applies existing comparison rules (default). One request per check, no automatic pagination. Responses above 200 KB are not retained. | snapshot |
dry_run | no | Read a zero-credit estimate without fetching sources, running AI, or reserving credits. Cache status is a snapshot, not a guarantee at execution. Accepted values: 1, 0, true, false. Case, spaces, hyphens and underscores are interchangeable. | 1 |
rules | no | Optional change-monitor rules as a JSON object. Use metric_fields with up to 10 published numeric object JSON pointers (for example /followers or /stats/likes), with result_mode=changes. Unknown/nonnumeric paths are rejected before a source call or charge; missing actual values are not zero and the check is refunded. Numeric selection replaces family rules. Or use watch_fields for generic field comparisons. See /docs/monitors#metric-fields. | {"metric_fields":["/followers"]} |
relevance_enabled | no | Optional on every monitor. Enable or disable relevance filtering. Enabling requires a nonempty relevance_prompt. | true |
relevance_prompt | no | Up to 600 characters describing what should trigger an alert. A nonempty value enables filtering unless explicitly disabled. Empty clears it. | Only genuine requests for recommendations; exclude promotions. |
exclusions | no | Comma-separated phrases skipped before AI; empty clears. Returned by monitor read tools. | sponsored,job opening |
Examples
Make the request
curl "https://www.monocrawl.com/v1/monitors/create?url=https%3A%2F%2Fexample.com%2Fpricing" \ -H "x-api-key: mn_your_key_here"
TypeScript
const key = process.env.MONOCRAWL_API_KEY;
if (!key) throw new Error('Set MONOCRAWL_API_KEY on your server.');
const res = await fetch(
"https://www.monocrawl.com/v1/monitors/create?url=https%3A%2F%2Fexample.com%2Fpricing",
{ headers: { "x-api-key": key } },
);
const body = await res.json();
if (!body.success) {
// one error shape for every endpoint — see /docs/errors
throw new Error(`${body.error.type}: ${body.error.message}`);
}
console.log(body.data, "credits left:", body.credits_remaining);Python
import os
import requests
res = requests.get(
"https://www.monocrawl.com/v1/monitors/create?url=https%3A%2F%2Fexample.com%2Fpricing",
headers={"x-api-key": os.environ["MONOCRAWL_API_KEY"]},
timeout=60,
)
body = res.json()
if not body["success"]:
# one error shape for every endpoint — see /docs/errors
raise RuntimeError(f"{body['error']['type']}: {body['error']['message']}")
print(body["data"], "credits left:", body["credits_remaining"])Response
Response fields and example
This example is illustrative, not a captured live response. Variable-cost operations may settle a charge different from the list price below. A successful response puts the platform payload in data and reports the exact credits used, remaining balance, request id and cache status beside it.
{
"success": true,
"platform": "monitors",
"endpoint": "/v1/monitors/create",
"data": {
"id": "monitor_example",
"status": "active"
},
"credits_used": 1,
"credits_remaining": 99,
"request_id": "req_…",
"cached": false
}The example is illustrative and shows a documented subset of data. The fields below are optional across supported sources; nullable fields can also be absent. Preserve unknown values and accept additional fields.
Schema basis: reviewed response shaper. See schema coverage and validation limits.
Download the data JSON Schema. Validate response.data, not the whole envelope. A valid shape does not establish that every field or source record was returned.
| Field inside data | Type | Meaning |
|---|---|---|
id | string | null | Exact source identifier; preserve it as a string. |
status | string | null | status |
name | string | null | name |
kind | string | null | kind |
created_at | string | null | created at |
next_run_at | string | null | next run at |
target | object | null | Nested response fields; optional unless explicitly documented. |
target.platform | string | null | platform |
target.endpoint | string | null | endpoint |
schedule_minutes | number | null | Configured check interval in minutes. |
estimated_credits_per_run | number | null | Current estimate, not a guarantee. |
The response creates a monitor. It does not guarantee a successful first check or delivery.
Failures use the typed error envelope. A confirmed uncharged or refunded failure reports zero; a pending reconciliation can report an unknown charge. Read credits_used and error.details.billing_status, and keep request_id for recovery. Response contract · Error reference