Monitors
List, inspect, delete, manually run, pause, and resume existing Paperpin web change monitors through the REST API.
The Developer API intentionally does not create or configure monitors. Use PaperPin to create and configure monitoring; use these endpoints to access existing monitors.
List monitors
GET /monitors
{
"data": [
{
"id": "99b61a96-40d9-44a6-9fd5-e56e5d29e49f",
"name": "Pricing page",
"url": "https://example.com/pricing",
"group_id": "0e838345-648b-46f5-8586-6e8b2f7bbf76",
"status": "active",
"interval_minutes": 60,
"detection_mode": "visual",
"sensitivity": "medium",
"last_successful_check_at": "2026-07-16T08:15:00.000Z",
"last_detected_change_at": null,
"created_at": "2026-07-15T08:00:00.000Z",
"updated_at": "2026-07-16T08:15:00.000Z"
}
]
}Get a monitor
GET /monitors/:monitorId
Monitor responses are returned in data and expose stable fields including id, name, url, group_id, status, interval_minutes, detection_mode, sensitivity, last_successful_check_at, and last_detected_change_at.
{
"data": {
"id": "99b61a96-40d9-44a6-9fd5-e56e5d29e49f",
"name": "Pricing page",
"url": "https://example.com/pricing",
"group_id": "0e838345-648b-46f5-8586-6e8b2f7bbf76",
"status": "active",
"interval_minutes": 60,
"detection_mode": "visual",
"sensitivity": "medium",
"last_successful_check_at": "2026-07-16T08:15:00.000Z",
"last_detected_change_at": null,
"created_at": "2026-07-15T08:00:00.000Z",
"updated_at": "2026-07-16T08:15:00.000Z"
}
}Delete a monitor
DELETE /monitors/:monitorId
Returns 204 No Content when the tenant-owned monitor is removed.
The successful response has no JSON body.
Queue a manual run
POST /monitors/:monitorId/run
{
"data": {
"state": "queued"
}
}The endpoint returns 202 Accepted after a job is queued. It never waits for detection, rendering, or change analysis to finish. If the monitor does not have a valid watch zone, it returns 400; if the tenant has reached its run limit, it returns 402.
state can be queued, running, or idle when a queue-state race is resolved.
PaperPin does not expose a group-run or batch-run endpoint. Queue each supported monitor individually by its ID.
Pause a monitor
POST /monitors/:monitorId/pause
Returns the updated monitor in data. Pausing removes the scheduled monitor job.
{
"data": {
"id": "99b61a96-40d9-44a6-9fd5-e56e5d29e49f",
"name": "Pricing page",
"url": "https://example.com/pricing",
"group_id": "0e838345-648b-46f5-8586-6e8b2f7bbf76",
"status": "paused",
"interval_minutes": 60,
"detection_mode": "visual",
"sensitivity": "medium",
"last_successful_check_at": "2026-07-16T08:15:00.000Z",
"last_detected_change_at": null,
"created_at": "2026-07-15T08:00:00.000Z",
"updated_at": "2026-07-16T09:00:00.000Z"
}
}Resume a monitor
POST /monitors/:monitorId/resume
Returns the updated monitor in data. Resuming queues its next scheduled run using the monitor's configured interval.
{
"data": {
"id": "99b61a96-40d9-44a6-9fd5-e56e5d29e49f",
"name": "Pricing page",
"url": "https://example.com/pricing",
"group_id": "0e838345-648b-46f5-8586-6e8b2f7bbf76",
"status": "active",
"interval_minutes": 60,
"detection_mode": "visual",
"sensitivity": "medium",
"last_successful_check_at": "2026-07-16T08:15:00.000Z",
"last_detected_change_at": null,
"created_at": "2026-07-15T08:00:00.000Z",
"updated_at": "2026-07-16T09:05:00.000Z"
}
}All monitor IDs are UUIDs and must belong to the authenticated tenant.