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

GET/v1/monitors/createlive · proven1 credit
Try in Playground

Monitor 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.

NameRequiredDescriptionExample
kindnoWhat 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
querynoWhat 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
entitynosubject: the sense id chosen from a preview or a clarification (bare for the plain name, sense:… for a qualified one)bare
entity_typenosubject: 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
purposenoA preset id (brand_mentions, complaints, competitor_activity, switching_intent, purchase_intent, questions, developments, app_reviews, local_reviews, custom) or a short free-text purposecomplaints
sourcesnosubject: platforms to search, comma-separated; defaults to the preset's recommendationreddit,x,hackernews
excludenosubject: platforms to leave outtiktok
relationshipsnosubject: 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
filtersnosubject: 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
aliasesnosubject: other names the subject is known by, comma-separated@monzo,Monzo Bank
max_meterednosubject: how many metered platforms each run may spend on, 0-2 (default 1)1
lookback_daysnosubject: how far back the first run looks (default 7); later runs continue from the last successful run7
feed_platformnofeed: platform of the review or listing endpointapp_store
feed_endpointnofeed: endpoint id, e.g. app-reviewsapp-reviews
feed_params_jsonnofeed: JSON object of parameters for the endpoint{"app_id":"310633997"}
schedule_minutesnoMinutes between runs. The console offers 60, 360, 1440 and 10080; the API accepts any value from 15 to 43200.1440
monthly_cap_creditsnoLegacy 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_appnoCreate an in-app notification when a run finds something new (default true)true
delivery_webhooknoEmit monitor.findings to your signed webhook endpoints (default false)true
namenoHuman label; suggested from the purpose and subject when omittedMonzo complaints
urlnochange: page to watch. Give this OR platform+endpoint.https://example.com/pricing
platformnochange: platform of an API endpoint to watch, e.g. github. Give with endpoint.github
endpointnochange: endpoint id to watch, e.g. reporepo
params_jsonnochange: JSON object of parameters passed to the watched endpoint on every run{"owner":"vercel","repo":"next.js"}
outputnosubject 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
destinationsnoJSON 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_jsonnoSeveral 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_creditsnoOptional quote guard: refuse creation when the resolved per-run price differs. Obtain a quote from monitors/test first.2
result_modenoChange/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_runnoRead 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
rulesnoOptional 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_enablednoOptional on every monitor. Enable or disable relevance filtering. Enabling requires a nonempty relevance_prompt.true
relevance_promptnoUp 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.
exclusionsnoComma-separated phrases skipped before AI; empty clears. Returned by monitor read tools.sponsored,job opening

Examples

Make the request

curl
curl "https://www.monocrawl.com/v1/monitors/create?url=https%3A%2F%2Fexample.com%2Fpricing" \
  -H "x-api-key: mn_your_key_here"
TypeScript
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
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.

200 · application/json
{
  "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 dataTypeMeaning
idstring | nullExact source identifier; preserve it as a string.
statusstring | nullstatus
namestring | nullname
kindstring | nullkind
created_atstring | nullcreated at
next_run_atstring | nullnext run at
targetobject | nullNested response fields; optional unless explicitly documented.
target.platformstring | nullplatform
target.endpointstring | nullendpoint
schedule_minutesnumber | nullConfigured check interval in minutes.
estimated_credits_per_runnumber | nullCurrent 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

First call in under a minute

150 free credits and a ready-made key the moment you sign up. No card.