# Watchmint

> Know when a web page changes. Watchmint checks the pages you care about on a schedule and sends a signed webhook with exactly what changed: the text, the look, or both.

Base URL: https://api-watchmint.plxi.us. Authenticate with an `X-API-Key` header (create a key at https://watchmint.plxi.us/dashboard/keys).
Every operation is a POST with a JSON body and returns JSON. Failed calls are never charged.
MCP server at https://api-watchmint.plxi.us/mcp (same key, same price), with these operations as tools: diff_text, compare_page, check_now, watch_page, list_watches, update_watch, get_changes, stop_watching.

## Docs

- [API reference](https://watchmint.plxi.us/docs): authentication, operations, limits, errors and webhooks
- [OpenAPI description](https://watchmint.plxi.us/openapi.json): machine-readable spec of every operation
- [Pricing](https://watchmint.plxi.us/pricing): Free $0/mo for 300 checks; Starter $10/mo for 10,000 checks; Pro $50/mo for 100,000 checks

## Operations

### POST https://api-watchmint.plxi.us/v1/diff/text

Compare two versions of a text, as a check compares a page: added and removed lines and words, and a unified diff. Costs 1 credit.

Request:

```json
{
  "before": "Pro plan: $49/month\nFree trial: 14 days\nSupport: email",
  "after": "Pro plan: $59/month\nFree trial: 14 days\nSupport: email and chat"
}
```

Response:

```json
{
  "changed": true,
  "summary": "2 lines added, 2 removed",
  "added_lines": 2,
  "removed_lines": 2,
  "added_words": 3,
  "removed_words": 1,
  "added": [
    "Pro plan: $59/month",
    "Support: email and chat"
  ],
  "removed": [
    "Pro plan: $49/month",
    "Support: email"
  ],
  "diff": "--- before\n+++ after\n@@ -1,3 +1,3 @@\n-Pro plan: $49/month\n+Pro plan: $59/month\n Free trial: 14 days\n-Support: email\n+Support: email and chat\n",
  "diff_truncated": false,
  "credits": 1
}
```

### POST https://api-watchmint.plxi.us/v1/pages/compare

Read a web page now and compare it with text you kept from it before. Nothing is stored. Costs 1 credit.

Request:

```json
{
  "url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
  "selector": "h1",
  "text": "The World Wide Web project"
}
```

Response:

```json
{
  "changed": true,
  "summary": "1 line added, 1 removed",
  "added_lines": 1,
  "removed_lines": 1,
  "added_words": 0,
  "removed_words": 2,
  "added": [
    "World Wide Web"
  ],
  "removed": [
    "The World Wide Web project"
  ],
  "diff": "--- before\n+++ after\n@@ -1 +1 @@\n-The World Wide Web project\n+World Wide Web\n",
  "diff_truncated": false,
  "url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
  "final_url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
  "status": 200,
  "rendered": false,
  "text": "World Wide Web",
  "text_truncated": false,
  "credits": 1
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/check

Check one of your monitors now instead of waiting for its next scheduled check. Costs 1 credit.

Request:

```json
{
  "monitor_id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b"
}
```

Response:

```json
{
  "monitor_id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b",
  "baseline": false,
  "changed": false,
  "pending_confirmation": false,
  "summary": "No change",
  "status": 200,
  "final_url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
  "text_changed": false,
  "visual_changed_pct": null,
  "change": null,
  "credits": 1
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/create

Start watching a page: Watchmint checks it on a schedule and tells you when it changes. Costs 0 credits.

Request:

```json
{
  "url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
  "name": "The first web page",
  "watch": "text",
  "every_minutes": 60
}
```

Response:

```json
{
  "monitor": {
    "id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b",
    "name": "The first web page",
    "url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
    "watch": "text",
    "selector": null,
    "ignore_selectors": [],
    "ignore_patterns": [],
    "render": false,
    "full_page": true,
    "viewport_width": 1280,
    "viewport_height": 800,
    "threshold": 1,
    "confirm": false,
    "every_minutes": 60,
    "webhook_id": null,
    "status": "active",
    "next_check_at": "2026-10-31T12:00:00Z",
    "last_check_at": null,
    "last_change_at": null,
    "last_error": null,
    "checks": 0,
    "changes": 0,
    "created_at": "2026-10-31T12:00:00Z"
  },
  "credits": 0
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/list

The account's monitors, newest first, with their status and last check and change. Costs 0 credits.

Request:

```json
{
  "limit": 20
}
```

Response:

```json
{
  "monitors": [],
  "total": 0,
  "credits": 0
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/update

Change a monitor's settings, or pause and resume it. Costs 0 credits.

Request:

```json
{
  "monitor_id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b",
  "paused": true
}
```

Response:

```json
{
  "monitor": {
    "id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b",
    "name": "The first web page",
    "url": "https://info.cern.ch/hypertext/WWW/TheProject.html",
    "watch": "text",
    "status": "paused",
    "every_minutes": 60
  },
  "credits": 0
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/changes

The changes your monitors found, newest first, with what was added and removed. Costs 0 credits.

Request:

```json
{
  "limit": 5
}
```

Response:

```json
{
  "changes": [],
  "credits": 0
}
```

### POST https://api-watchmint.plxi.us/v1/monitors/delete

Delete a monitor, with its snapshots and changes. Costs 0 credits.

Request:

```json
{
  "monitor_id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b"
}
```

Response:

```json
{
  "deleted": true,
  "monitor_id": "7c3f1a2e-5b4d-4e8f-9a6b-2d1c0e9f8a7b",
  "credits": 0
}
```

## Guides

- [Watch a web page for changes with an API and get a webhook](https://watchmint.plxi.us/guides/watch-a-web-page-for-changes): Start watching a page with one API call, get a signed webhook with the lines that changed, and keep dates and counters from setting off false alarms.

## Comparisons

- [A Visualping alternative for developers who want an API first](https://watchmint.plxi.us/compare/visualping-alternative): How Watchmint compares with Visualping, Distill and changedetection.io for watching web pages, and when each one is the better choice.

## Use cases

- [Track competitors' pricing pages and get the changed lines in Slack](https://watchmint.plxi.us/use-cases/competitor-pricing-pages): Watch rivals' pricing and plan pages with Watchmint and forward each change, with the old and new price lines, to Slack or your CRM.

## FAQ

- **How often can a page be checked?** Every hour on Free, every 5 minutes on Starter and every minute on Pro. Each check costs one credit, text or visual.
- **What counts as a change?** For text, any added or removed line once spacing is ignored and your ignore patterns are taken out. For visual checks, the share of the page that looks different, against your threshold (1% by default).
- **Is a failed check charged?** No. A check that can't read the page (it's down, answers with an error or shows a bot check) costs nothing. After three in a row the monitor is marked failing and its webhook gets monitor.error.
- **Can it watch pages built with JavaScript?** Yes. Set render to true and the page is read in a browser with its scripts run. Visual checks always use the browser.

## Optional

- [Terms](https://watchmint.plxi.us/terms)
- [Privacy](https://watchmint.plxi.us/privacy)
- [Support](https://watchmint.plxi.us/contact)
