Monitors API endpoint
Partially updates one of the caller's own monitors. Free to call. Changing `target_type` or `sitemap` resets the stored diff baseline (fingerprint, snapshot, or URL set), so the next check establishes a fresh baseline instead of comparing against a now-meaningless prior state.
/monitors/{id}Partially updates one of the caller's own monitors. Only fields present in the request body are changed.
Requires a dashboard JWT (Authorization: Token <jwt>) or an x-api-key. Free to call.
Request body (all fields optional): name, target_type (page or sitemap), sitemap
(include_patterns, exclude_patterns, max_urls — see the create endpoint), cadence_minutes
(5–10080), enabled, notification (webhook_url, webhook_secret, events).
Changing target_type or sitemap resets the stored diff baseline (fingerprint, page snapshot,
or tracked URL set), so the next check establishes a fresh baseline instead of comparing against
a now-meaningless prior state — otherwise a narrower sitemap.include_patterns or a switch from
page to sitemap would report a burst of false "removed" entries on the very next run.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| Authorization (header) | string | No | Dashboard JWT in the form `Token <jwt>` (use this or x-api-key) | ||
| x-api-key (header) | string | No | API key (alternative to a dashboard JWT) | ||
| id (path) | string | Yes | Monitor ID returned by your account monitor create/list response; replace the illustrative example with your own ID | 66d2f0b1c2a4e5f6a7b8c9d0 | |
| request (body) | object | Yes | Fields to update |
curl -X PATCH "https://api.crawlora.net/api/v1/monitors/66d2f0b1c2a4e5f6a7b8c9d0" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cadence_minutes":60,"enabled":true,"name":"Pricing page","notification":{"events":["change.detected","run.completed"],"webhook_secret":"whsec_...","webhook_url":"https://example.com/webhooks/crawlora"},"sitemap":{"exclude_patterns":["/blog/*"],"include_patterns":["/products/*"],"max_urls":5000},"target_type":"page"}'{
"cadence_minutes": 60,
"enabled": true,
"name": "Pricing page",
"notification": {
"events": [
"change.detected",
"run.completed"
],
"webhook_secret": "whsec_...",
"webhook_url": "https://example.com/webhooks/crawlora"
},
"sitemap": {
"exclude_patterns": [
"/blog/*"
],
"include_patterns": [
"/products/*"
],
"max_urls": 5000
},
"target_type": "page"
}{
"code": 200,
"msg": "OK",
"data": {
"id": "66d2f0b1c2a4e5f6a7b8c9d0",
"url": "https://example.com/pricing",
"target_type": "page",
"cadence_minutes": 30,
"enabled": true,
"next_check_at": "2026-08-22T11:30:00Z",
"failures": 0,
"created_at": "2026-08-22T10:00:00Z",
"updated_at": "2026-08-22T11:00:00Z"
}
}Request schema
#/definitions/webmonitor.updateMonitorBodyDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| cadence_minutes | integer | No | 60 | |||
| enabled | boolean | No | true | |||
| name | string | No | Pricing page | |||
| notification | webmonitor.notificationBodyDoc | No | ||||
| notification.events | array | No | change.detected,run.completed | |||
| notification.webhook_secret | string | No | whsec_... | |||
| notification.webhook_url | string | No | https://example.com/webhooks/crawlora | |||
| sitemap | webmonitor.sitemapTargetBodyDoc | No | ||||
| sitemap.exclude_patterns | array | No | /blog/* | |||
| sitemap.include_patterns | array | No | /products/* | |||
| sitemap.max_urls | integer | No | 5000 | |||
| target_type | string | No | page, sitemap | page |
Response schema
#/definitions/webmonitor.monitorResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | webmonitor.monitorDoc | No | ||||
| data.cadence_minutes | integer | No | 60 | |||
| data.created_at | string | No | 2026-08-01T00:00:00Z | |||
| data.enabled | boolean | No | true | |||
| data.failures | integer | No | 0 | |||
| data.id | string | No | 66d2f0b1c2a4e5f6a7b8c9d0 | |||
| data.last_changed_at | string | No | 2026-08-20T09:00:00Z | |||
| data.last_checked_at | string | No | 2026-08-22T10:00:00Z | |||
| data.last_error | string | No | ||||
| data.name | string | No | Pricing page | |||
| data.next_check_at | string | No | 2026-08-22T11:00:00Z | |||
| data.notification | webmonitor.notificationDoc | No | ||||
| data.notification.events | array | No | change.detected,run.completed | |||
| data.notification.webhook_url | string | No | https://example.com/webhooks/crawlora | |||
| data.sitemap | webmonitor.sitemapTargetDoc | No | ||||
| data.sitemap.exclude_patterns | array | No | /blog/* | |||
| data.sitemap.include_patterns | array | No | /products/* | |||
| data.sitemap.max_urls | integer | No | 5000 | |||
| data.target_type | string | No | page, sitemap | page | ||
| data.updated_at | string | No | 2026-08-22T10:00:00Z | |||
| data.url | string | No | https://example.com/pricing | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid parameters | #/definitions/app.Response |
| 401 | Authentication required | #/definitions/app.Response |
| 404 | Monitor not found | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X PATCH "https://api.crawlora.net/api/v1/monitors/66d2f0b1c2a4e5f6a7b8c9d0" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"cadence_minutes":60,"enabled":true,"name":"Pricing page","notification":{"events":["change.detected","run.completed"],"webhook_secret":"whsec_...","webhook_url":"https://example.com/webhooks/crawlora"},"sitemap":{"exclude_patterns":["/blog/*"],"include_patterns":["/products/*"],"max_urls":5000},"target_type":"page"}'