API reference
Update a Monitor API
Pause, resume, rename, reschedule or re-scope one of your monitors. Give at least one field besides id.
Endpoint
/v1/monitors/updatelive · provenfreeMonitor 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 |
|---|---|---|---|
id | yes | Monitor id | mon_0f2c8b1d4e6a7c9b0d1e2f3a |
status | no | active to resume runs, paused to stop them. Pausing clears the next run time; resuming schedules the next run one interval from now. Accepted values: active, paused. Case, spaces, hyphens and underscores are interchangeable. | paused |
name | no | New label; pass an empty string to clear it | Monzo complaints |
schedule_minutes | no | New interval between runs; minimum 15, maximum 43200. Rescheduling re-times the next run from now. | 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 | subject/feed: in-app notifications on or off | true |
delivery_webhook | no | subject/feed: signed webhook deliveries on or off | false |
sources | no | subject: replace the platforms searched | reddit,hackernews |
relationships | no | subject: replace which classes of material count 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 |
filters | no | subject: replace the purpose filters 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 |
max_metered | no | subject: metered platforms per run, 0-2 | 1 |
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) | 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"}}] |
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/update?id=mon_0f2c8b1d4e6a7c9b0d1e2f3a" \ -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/update?id=mon_0f2c8b1d4e6a7c9b0d1e2f3a",
{ 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/update?id=mon_0f2c8b1d4e6a7c9b0d1e2f3a",
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/update",
"data": {
"id": null,
"kind": null,
"name": null,
"description": null,
"status": null,
"workflow": null,
"capped_reason": null,
"target_label": null,
"group_id": null,
"last_run_at": null,
"last_success_at": null,
"next_run_at": null,
"created_at": null,
"schedule_minutes": 0,
"estimated_credits_per_run": 0,
"monthly_cap_credits": 0,
"credits_spent_month": 0,
"consecutive_failures": 0,
"target": {},
"subject": {},
"delivery": {},
"last_run": {}
},
"credits_used": 0,
"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 | id |
kind | string | null | kind |
name | string | null | name |
description | string | null | description |
status | string | null | status |
workflow | string | null | workflow |
capped_reason | string | null | capped reason |
target_label | string | null | target label |
group_id | string | null | group id |
last_run_at | string | null | last run at |
last_success_at | string | null | last success at |
next_run_at | string | null | next run at |
created_at | string | null | created at |
schedule_minutes | number | null | schedule minutes |
estimated_credits_per_run | number | null | estimated credits per run |
monthly_cap_credits | number | null | monthly cap credits |
credits_spent_month | number | null | credits spent month |
consecutive_failures | number | null | consecutive failures |
target | object | null | Nested response fields; optional unless explicitly documented. |
subject | object | null | Nested response fields; optional unless explicitly documented. |
delivery | object | null | Nested response fields; optional unless explicitly documented. |
last_run | object | null | Nested response fields; optional unless explicitly documented. |
Core response fields reviewed from the public response shaper. Fields vary by requested options; additive fields remain allowed.
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