Monitor webhook payloads
Receive findings, summaries and attention notices. A notification is bounded; use the saved result for complete evidence and run history.
Choose destination and cadence
Register a JSON webhook, then choose it on the monitor. Immediate destinations apply minimum severity; daily or weekly destinations receive summaries. Account-wide digests and older subscription-based delivery also exist. Explicit monitor destinations and account-wide event subscriptions are different selection rules.
Use monitors/test-delivery or the dashboard sample alert. Sample events are marked and must not count as real findings. All JSON events use the shared signature and durable-acknowledgment contract.
monitor.findings: bounded result previews
| Field under data | Meaning |
|---|---|
| monitor_id / run_id | Owned monitor and run identifiers; run_id is a string. |
| name / title / purpose / subject | Display context. Subject query/name is not verified identity. |
| new_findings | Count for this notification group; the embedded preview can be shorter. |
| accounts / people / by_source | Platform-scoped account counts, not deduplicated people across platforms. |
| findings | Up to five previews: id, key, source, label, url, title, text, author, posted_at, relationship, matched, why and severity when available. Text is truncated. |
| url / summary | Saved evidence link and readable delivery body. |
| report / text | Optional report representation; not produced by every monitor. |
| event_type / result | Scheduled-result variants can use event_type:monitor.result and include result. Inspect the variant before assuming finding rows. |
Relevance-filtered delivery can send one confirmed finding at a time. The same finding can appear in a summary. Deduplicate transports by envelope id and correlate finding IDs separately. Previews are not a census.
{
"id": "whd_example_finding",
"type": "monitor.findings",
"created_at": "2026-09-22T10:00:00.000Z",
"data": {
"monitor_id": "mon_example",
"run_id": "42",
"new_findings": 1,
"findings": [
{
"id": "finding_example",
"source": "reddit",
"title": "Example discussion",
"text": "Abbreviated source passage.",
"url": "https://www.reddit.com/r/example/comments/example",
"severity": "info"
}
],
"url": "https://www.monocrawl.com/dashboard/monitors/mon_example",
"summary": "One matching discussion."
}
}monitor.digest: two summary shapes
| Variant | Fields under data |
|---|---|
| Per-monitor summary | monitor_id, name, title, period, headline, counts, totals, lines, findings, sections, url, text and destination. |
| Account-wide digest | digest_id, period, totals, headline, sections and report_id. Sections contain monitor_id, name, findings count, severity and bounded threads previews (story_id, title, severity, count). |
| Shared delivery field | summary contains the readable delivery body. |
Per-monitor summaries are transported as monitor.digest. Branch on supplied fields, not one assumed payload shape. Account and per-monitor summaries can overlap.
{
"id": "whd_example_digest",
"type": "monitor.digest",
"created_at": "2026-09-22T08:00:00.000Z",
"data": {
"digest_id": "digest_example",
"headline": "Two monitors have updates.",
"sections": [
{
"monitor_id": "mon_example",
"name": "Example monitor",
"findings": 3,
"severity": "info",
"threads": []
}
],
"report_id": null,
"summary": "Two monitors have updates."
}
}The example omits period and totals for brevity. Preserve the actual window and counts; a summary is not a second collection of new source observations.
monitor.attention: action needed
| Cause | Fields under data |
|---|---|
| Repeated failed checks | monitor_id, run_id, consecutive_failures. Inspect current status before resuming. |
| Ambiguous subject | monitor_id, run_id, candidates. Candidates include id, label and count. Review the choice in the monitor UI. |
| Delivery body | summary explains the issue. Additional cause-specific fields may appear. |
{
"id": "whd_example_attention",
"type": "monitor.attention",
"created_at": "2026-09-22T10:00:00.000Z",
"data": {
"monitor_id": "mon_example",
"run_id": "43",
"consecutive_failures": 3,
"summary": "Monitor paused after repeated failed checks."
}
}The example failure count is illustrative, not a global pause threshold. This notice does not establish a newly matched finding. Inspect health and run history.
Recover delivery separately from collection
Successful collection can have failed notification. Review the destination receipt and fix delivery before recreating a monitor or repeating paid collection. A successful check can cost credits with no matches. A webhook timeout does not prove the run or saved findings disappeared.